You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@lucene.apache.org by "Radoslaw Zielinski (JIRA)" <ji...@apache.org> on 2016/08/19 11:40:20 UTC

[jira] [Updated] (SOLR-5725) Efficient facets without counts for enum method

     [ https://issues.apache.org/jira/browse/SOLR-5725?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Radoslaw Zielinski updated SOLR-5725:
-------------------------------------
    Attachment: SOLR-5725-master.patch

I've altered the patch to be applicable on the current master branch. I had to do this by hand because there were to many changes. 

I've applied Mikhail suggestions as well. Can you please look at this?

What is done:
* renamed the faceting method to {{enumprobing}}
* switched to conditional code branching inside {{getFacetTermEnumCounts()}} method
* covered {{else}} branch of \{\{if (df >= minDfFilterCache) \}\}
* throw an exception if combined with {{mincount=2}} or more
* handled per field faceting type setting
* handled distributed environment
* updated/added test to cover more use cases

> Efficient facets without counts for enum method
> -----------------------------------------------
>
>                 Key: SOLR-5725
>                 URL: https://issues.apache.org/jira/browse/SOLR-5725
>             Project: Solr
>          Issue Type: Improvement
>          Components: search
>            Reporter: Alexey Kozhemiakin
>            Assignee: Shalin Shekhar Mangar
>             Fix For: 6.0
>
>         Attachments: SOLR-5725-5x.patch, SOLR-5725-master.patch, SOLR-5725.patch
>
>
> Shot version:
> This improves performance for facet.method=enum when it's enough to know that facet count>0, for example when you it's when you dynamically populate filters on search form. New method checks if two bitsets intersect instead of counting intersection size.
> Long version:
> We have a dataset containing hundreds of millions of records, we facet by dozens of fields with many of facet-excludes and have relatively small number of unique values in fields, around thousands.
> Before executing search, users work with "advanced search" form, our  goal is to populate dozens of filters with values which are applicable with other selected values, so basically this is a use case for facets with mincount=1, but without need in actual counts.
> Our performance tests showed that facet.method=enum works much better than fc\fcs, probably due to a specific ratio of "docset"\"unique terms count". For example average execution of query time with method fc=1500ms, fcs=2600ms and with enum=280ms. Profiling indicated the majority time for enum was spent on intersecting docsets.
> Hers's a patch that introduces an extension to facet calculation for method=enum. Basically it uses docSetA.intersects(docSetB) instead of docSetA. intersectionSize (docSetB).
> As a result we were able to reduce our average query time from 280ms to 60ms.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@lucene.apache.org
For additional commands, e-mail: dev-help@lucene.apache.org