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

Ability to Facet on a Function

Attach filesAttach ScreenshotAdd voteVotersWatch issueWatchersCreate sub-taskLinkCloneUpdate Comment AuthorReplace String in CommentUpdate Comment VisibilityDelete Comments
    XMLWordPrintableJSON

Details

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

    Description

      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.

      Attachments

        Activity

          This comment will be Viewable by All Users Viewable by All Users
          Cancel

          People

            Unassigned Unassigned
            TimOwen Tim Owen

            Dates

              Created:
              Updated:

              Slack

                Issue deployment