So, you want to display 5 results from each category and still know how many results are in each category. This is a perfect situation for the field collapsing patch:

https://issues.apache.org/jira/browse/SOLR-236
http://wiki.apache.org/solr/FieldCollapsing

Here is how I would do it.

Add a field to your schema called category or whatever. Then while indexing you populate that field with whatever category the document belongs in. While executing a search, collapse the results on that field with a max collapse of 5. This will give you at most 5 results per category. Now, at the same time enable faceting on that field and DO NOT use the collapsing parameter to recount the facet vales. This means that the facet counts will be reflect the non-collapsed results. This facet should only be used to get the count for each category, not displayed to the user. On your search results page that gets the collapsed results, you can put a link that says "Show all X results from this category" where X is the value you pull out of the facet. When a user clicks that link you basically do the same search with field collapsing disabled, and a filter query on the specific category they want to see, for example: &fq=category:people.

Hope this helps.

Thanks,

Matt Weber

On Sep 29, 2009, at 4:55 AM, Marian Steinbach wrote:

On Tue, Sep 29, 2009 at 11:36 AM, Varun Gupta <varun.vgu...@gmail.com> wrote:
...

One way that I can think of doing this is by making as many queries as there are categories and show these results under each category. But this will be
very inefficient. Is there any way I can do this ?


Hi Varun!

I think that doing multiple queries doesn't have to be inefficient,
since Solr caches subsequent queries for the same term and facets.

Imagine this as your first query:
- q: xyz
- facets: myfacet

and this as a second query:
- q:xyz
- fq: myfacet=a

Compared to the first query, the second query will be very fast, since
all the hard work ahs been done in query one and then cached.

At least that's my understanding. Please correct me if I'm wrong.

Marian

Reply via email to