Class ScoreJoinQParserPlugin

java.lang.Object
org.apache.solr.search.QParserPlugin
org.apache.solr.search.join.ScoreJoinQParserPlugin
All Implemented Interfaces:
NamedListInitializedPlugin

public class ScoreJoinQParserPlugin extends QParserPlugin
Create a query-time join query with scoring. It just calls JoinUtil.createJoinQuery(String, boolean, String, Query, org.apache.lucene.search.IndexSearcher, ScoreMode). It runs subordinate query and collects values of "from" field and scores, then it lookups these collected values in "to" field, and yields aggregated scores. Local parameters are similar to JoinQParserPlugin {!join} This plugin doesn't have its own name, and is called by specifying local parameter {!join score=...}.... Note: this parser is invoked even if you specify score=none .
Example:q={!join from=manu_id_s to=id score=total}foo
  • from - "foreign key" field name to collect values while enumerating subordinate query (denoted as foo in example above). it's better to have this field declared as type="string" docValues="true". note: if docValues are not enabled for this field, it will work anyway, but it costs some memory for UninvertingReader. Also, numeric doc values are not supported until LUCENE-5868. Thus, it only supports DocValuesType.SORTED, DocValuesType.SORTED_SET, DocValuesType.BINARY.
  • fromIndex - optional parameter, a core name where subordinate query should run (and from values are collected) rather than current core.
    Example:q={!join from=manu_id_s to=id score=total fromIndex=products}foo
  • to - "primary key" field name which is searched for values collected from subordinate query. it should be declared as indexed="true". Now it's treated as a single value field.
  • score - one of ScoreMode: none,avg,total,max,min. Capital case is also accepted.
  • Field Details

  • Constructor Details

    • ScoreJoinQParserPlugin

      public ScoreJoinQParserPlugin()
  • Method Details

    • createParser

      public QParser createParser(String qstr, org.apache.solr.common.params.SolrParams localParams, org.apache.solr.common.params.SolrParams params, SolrQueryRequest req)
      Description copied from class: QParserPlugin
      Creates the QParser.
      Specified by:
      createParser in class QParserPlugin
      See Also:
    • getCoreName

      public static String getCoreName(String fromIndex, CoreContainer container, SolrCore toCore, String toField, String fromField, org.apache.solr.common.params.SolrParams localParams)
      Returns a String with the name of a core.

      This method searches the core with fromIndex name in the core's container. If fromIndex isn't the name of a collection or alias it returns fromIndex without changes. If fromIndex is the name of an alias but the alias points to multiple collections it throws SolrException.ErrorCode.BAD_REQUEST because multiple shards not yet supported.

      Parameters:
      fromIndex - name of the index
      container - the core container for searching the core with fromIndex name or alias
      toCore - core which it joins to ie executing this request
      toField - to side field
      fromField - from side field
      localParams - local params for this qparser invocation
      Returns:
      the string with name of core
    • createJoinQuery

      public static org.apache.lucene.search.Query createJoinQuery(org.apache.lucene.search.Query subQuery, String fromField, String toField, org.apache.lucene.search.join.ScoreMode scoreMode)
      A helper method for other plugins to create single-core JoinQueries
      Parameters:
      subQuery - the query to define the starting set of documents on the "left side" of the join
      fromField - "left side" field name to use in the join
      toField - "right side" field name to use in the join
      scoreMode - the score statistic to produce while joining
      See Also: