On 01.02.2007, at 13:57, Ngoc Ngoc wrote:

> I want to learn more about ferret. So I downloaded ferret-0.10.14 and
> write a simple test script
>
> Only query = TermQuery.new(:content, 'program') gives result.
> If I change 'program' with 'Good' or 'Extra' -> no result
> and searching on (:title, 'Ruby') -> no result
>
>
> query = TermQuery.new(:content, 'Good')
>
> searcher.search_each(query) do |id, score|
>   doc = searcher[id]
>   puts "Document #{id} found with a score of #{score}"
>   puts doc[:content]
> end

Try 'good' in lowercase and it'll work.

The reason is that your index converts each word in your document to  
lowercase. This is due to the default analyzer used by the index  
which happens to be Ferret::Analysis::StandardAnalyzer (see the rdocs  
for details).

Because of the way you build your query, this lowercase conversion is  
not applied to your query string, hence no match.

The trick is, that your queries need to go through the same analyzer  
that is used for indexing in order to get the desired results.

Let me suggest a better way to write this script:

   require 'rubygems'
   require 'ferret'
   include Ferret::Index

   index = Index.new

   index << {
     :location => 'here',
     :title => 'Programming Ruby',
     :content => 'Good excellent program'
   }

   index << {
     :location => 'local',
     :title => 'Programming Rubyist',
     :content => 'Extra ordinary program'
   }

   docs = index.search('Good')
   docs.hits.each do |hit|
     puts hit.inspect
     puts "Document #{hit.doc} found with a score of #{hit.score}"
     puts index[hit.doc][:content]
   end


As you see, you don't need to employ a Searcher, nor do you have to  
build a TermQuery explicitely. Just call #search on your Index and  
everything works as expected (plus you get all the nice features of  
Ferret's query parser).

Since we have used the Index#search method, the search automatically  
uses the same analyzer for parsing your query that was used for  
indexing the document.

Cheers,
Andy



_______________________________________________
Ferret-talk mailing list
[email protected]
http://rubyforge.org/mailman/listinfo/ferret-talk

Reply via email to