On 7/6/06, Caspar <waspfactory at gmail.com>
wrote:> Hi I''m using the acts_as_ferret to index one table in my database.
The
> table contains formation about listed items and each of these items
> belongs to a section and a category. On the results page I want to have
> two drop down boxes whose contents are populated depeneding on the
> returned results. So for example the section drop down should only show
> sections that exist in the result set, also i would like to display a
> count of the number of results returned in that section in the drop down
> e.g. sections[cars:5]. Does anyone know the best way to go about this?
> I''m a total ferret/lucene beginner...
> thanks for any help
> cheers
> caspar
Hi Caspar,
I''ll try and answer this from a Ferret point of view (I don''t
know
acts_as_ferret well enough yet). I think the best way to do this is to
do the search for all documents and do a running count. So something
like this;
sections = {}
models = {}
index.search_each(query_str) do |doc_id, score|
doc = index[doc_id]
(sections[doc[:section]]||=0) += 1
(models[doc[:model]]||=0) += 1
end
You might run into performance problems doing this if your queries are
returning a large number of documents or if the documents are quite
large. The biggest performance hit will come from loading so many
documents from the index. You''ll be able to make this quite fast by
caching the fields that you want to count. Let me know if you do run
into performance problems and I''ll show you how to build a cache of
the field values.
Cheers,
Dave