Joshua Bates
2006-May-05 20:11 UTC
[Ferret-talk] Is there any working way to search multiple indexes?
I''m running from the trunk, and hitting road blocks no matter which way I attempt to search across multiple indexes. I tried a MultiSearcher, but I can''t pass a string for the search query ms.search "iraq" TypeError: wrong argument type String (expected Data) So I tried creating a QueryParser to pass, but I can''t get the fields from the reader r.get_field_names NoMethodError: undefined method `get_field_names'' for #<Ferret::Index::IndexReader:0x406059dc> and even if I could, I cant pass any fields to the QueryParser qp.fields = ["title"] NoMethodError: undefined method `fields='' for #<Ferret::QueryParser:0x407db070> So I tried using the MultiReader, like acts_as_ferret does, but it won''t take any arguments @reader = Index::MultiReader.new(sub_readers) ArgumentError: wrong number of arguments (1 for 0) Is everything I''m trying to do unimplemented in the c version, or am I just overlooking something obvious? thanks, joshua -------------- next part -------------- An HTML attachment was scrubbed... URL: http://rubyforge.org/pipermail/ferret-talk/attachments/20060505/c6c20065/attachment.htm
David Balmain
2006-May-06 00:46 UTC
[Ferret-talk] Is there any working way to search multiple indexes?
Hi Joshua,
The best place to check how to use the MultiSearcher is the
MultiSearcher unit tests;
test/unit/search/tc_multi_searcher.rb
test/unit/search/tc_multi_searcher2.rb
Create a MultiSearcher like this;
@multi = Ferret::Search::MultiSearcher.new([IndexSearcher.new(dir1),
IndexSearcher.new(dir2)])
You can have as many IndexSearchers as you like. You actually need to
pass a query to both IndexSearcher and MultiSearcher. Strings are not
allowed in Ferret 0.9.1. That may change in future versions. So do
something like this;
def do_search(query)
@query_parser ||= Ferret::QueryParser.new([''date'',
''field'',
''cat''], :analyzer => WhiteSpaceAnalyzer.new())
query = @query_parser.parse(query) if (query.is_a? String)
return @multi.search(query)
end
Hope that helps.
Cheers,
Dave
On 5/6/06, Joshua Bates <joshuabates at gmail.com>
wrote:> I''m running from the trunk, and hitting road blocks no matter
which way I
> attempt
> to search across multiple indexes.
>
> I tried a MultiSearcher, but I can''t pass a string for the search
query
>
> ms.search "iraq"
> TypeError: wrong argument type String (expected Data)
>
> So I tried creating a QueryParser to pass, but I can''t get the
fields from
> the reader
> r.get_field_names
> NoMethodError: undefined method `get_field_names'' for
> #<Ferret::Index::IndexReader:0x406059dc>
>
> and even if I could, I cant pass any fields to the QueryParser
> qp.fields = ["title"]
> NoMethodError: undefined method `fields='' for
> #<Ferret::QueryParser:0x407db070>
>
> So I tried using the MultiReader, like acts_as_ferret does, but it
won''t
> take any arguments
> @reader = Index::MultiReader.new(sub_readers)
> ArgumentError: wrong number of arguments (1 for 0)
>
> Is everything I''m trying to do unimplemented in the c version, or
am I just
> overlooking something obvious?
>
> thanks,
> joshua
>
>
> _______________________________________________
> Ferret-talk mailing list
> Ferret-talk at rubyforge.org
> http://rubyforge.org/mailman/listinfo/ferret-talk
>
>