March 2008
Intermediate to advanced
112 pages
3h 7m
English
We’d like to be able to sort searches. This is pretty simple, since we can actually
just pass sort strings as the :sort
parameter to the Index#search_each
method. We’ll also give the option to specify the :limit and :offset parameters so that the user can page
through search results. Here is the search code:
158ifoptions.query159index=Ferret::I.new(:path=>options.path,160:default_field=>:content)161total=index.search_each(options.query,162:limit=>options.limit,163:offset=>options.offset,164:sort=>options.sort)do|id,score|165doc=index[id]166puts"%1.5f => %s"%[score,doc[:path]]167options.fields.eachdo|field|168puts"\t#{field}=>#{doc[field]}"ifdoc[field]169end170end171start=options.offset172finish=[options.offset+options.limit,total].min173puts"**#{start}-#{finish}of#{total}documents found **"174end
We use an Index object here instead of a
Searcher combined with an IndexReader and QueryParser simply because it is so much easier
and does everything we need without a loss in performance. For each hit,
we print the score and the :path field
(166). We also allow the optional
printing of other fields from the hits (167).
Read now
Unlock full access