Changesets can be listed by changeset number.
The Git repository is here.
- Revision:
- 7
- Log:
Initial import of RForum 0.2 sources from a downloaded Tarball.
RForum is a Ruby On Rails based forum and mail gateway service.
- Author:
- adh
- Date:
- Sat Jul 22 18:43:13 +0100 2006
- Size:
- 2581 Bytes
1 | require 'ferret' |
2 | |
3 | class SearchFerret < Search |
4 | include Ferret |
5 | |
6 | def initialize(path = RAILS_ROOT + '/ferret_index') |
7 | @path = path |
8 | end |
9 | |
10 | def search(term, forum_ids=[]) |
11 | index_searcher ||= Search::IndexSearcher.new(@path) |
12 | query_parser ||= QueryParser.new(index_searcher.reader.get_field_names.to_a) |
13 | |
14 | query = Search::BooleanQuery.new |
15 | query.add_clause(Search::BooleanClause.new(query_parser.parse(term), Search::BooleanClause::Occur::MUST)) |
16 | query.add_clause(Search::BooleanClause.new(Search::TermQuery.new(Index::Term.new('class', 'post')), Search::BooleanClause::Occur::MUST)) |
17 | |
18 | if not forum_ids.empty? |
19 | forum_query = Search::BooleanQuery.new |
20 | forum_ids.each do |forum_id| |
21 | forum_query.add_clause(Search::BooleanClause.new(Search::TermQuery.new(Index::Term.new('forum', forum_id.to_s)), Search::BooleanClause::Occur::SHOULD)) |
22 | end |
23 | query.add_query(forum_query, Search::BooleanClause::Occur::MUST) |
24 | end |
25 | |
26 | posts = [] |
27 | |
28 | index_searcher.search_each(query) do |doc, score| |
29 | id = index_searcher.reader.get_document(doc)['id'] |
30 | posts << Post.find(id) |
31 | end |
32 | |
33 | return posts |
34 | end |
35 | |
36 | def update(post) |
37 | index << create_doc(post) |
38 | index.flush |
39 | end |
40 | |
41 | def delete(post) |
42 | query = Search::BooleanQuery.new |
43 | query.add_clause(Search::BooleanClause.new(Search::TermQuery.new(Index::Term.new('class', 'post')), Search::BooleanClause::Occur::MUST)) |
44 | query.add_clause(Search::BooleanClause.new(Search::TermQuery.new(Index::Term.new('id', post.id.to_s)), Search::BooleanClause::Occur::MUST)) |
45 | index.query_delete(query) |
46 | index.flush |
47 | end |
48 | |
49 | def create_doc(post) |
50 | doc = Document::Document.new |
51 | doc << Document::Field.new('class', 'post', Document::Field::Store::YES, Document::Field::Index::UNTOKENIZED) |
52 | doc << Document::Field.new('id', post.id, Document::Field::Store::YES, Document::Field::Index::UNTOKENIZED) |
53 | doc << Document::Field.new('forum', post.topic.forum_id, Document::Field::Store::YES, Document::Field::Index::UNTOKENIZED) |
54 | doc << Document::Field.new('subject', post.subject, Document::Field::Store::NO, Document::Field::Index::TOKENIZED) |
55 | doc << Document::Field.new('text', post.text, Document::Field::Store::NO, Document::Field::Index::TOKENIZED) |
56 | doc |
57 | end |
58 | |
59 | def supports_search_by_forum?; true; end |
60 | |
61 | def index |
62 | @index ||= Index::Index.new(:path => @path, |
63 | :auto_flush => true, |
64 | :default_search_field => ['subject'], |
65 | :key => ['id', 'class']) |
66 | end |
67 | end |