Uploaded image for project: 'Solr'
  1. Solr
  2. SOLR-11765

Ability to Facet on a Function



    • Improvement
    • Status: Open
    • Major
    • Resolution: Unresolved
    • None
    • None
    • None


      This is an extension to the JSON facet functionality, to support faceting on a function. I have extended the parsing of json.facet to allow a 4th facet type (function) and you provide a function expression. You can also provide sort, limit and mincount, as it behaves similarly to faceting on a field. Subfacets work as normal - you can nest function facets anywhere you can use other types.

      The output is in the same format as field facets, but with a bucket per distinct value produced by the function. Hence the usage of this is most appropriate for situations where your function only produces a relatively small number of possible values. It's also recommended to have docValues on any field used by the function.

      Our initial use-case for this is with a function that extracts a given part from a date field's value e.g. day of week, or hour of day, where the possible range of output values is very low.

      Still TODO: documentation, unit tests, and possible extensions to support a missing bucket and functional sorting (currently it's only sortable by the bucket label or by volume)

      Example usage:

      { facet : { dayOfWeek : { type : function, f : "chronofield(my_date_field,DAY_OF_WEEK)", sort : "count desc" } } }

      I did some refactoring in the facet parser, to hoist some common code for sort and pagination parsing.


        1. SOLR-11765.patch
          19 kB
          Tim Owen
        2. SOLR-11765.patch
          18 kB
          Tim Owen



            Unassigned Unassigned
            TimOwen Tim Owen
            1 Vote for this issue
            6 Start watching this issue