Class XCombinedFieldQuery

java.lang.Object
org.apache.lucene.search.Query
org.apache.lucene.search.XCombinedFieldQuery
All Implemented Interfaces:
org.apache.lucene.util.Accountable

public final class XCombinedFieldQuery extends org.apache.lucene.search.Query implements org.apache.lucene.util.Accountable
Copy of CombinedFieldQuery that contains a fix for LUCENE-9999. TODO: remove once LUCENE-9999 is fixed and integrated A Query that treats multiple fields as a single stream and scores terms as if you had indexed them as a single term in a single field.

The query works as follows:

  1. Given a list of fields and weights, it pretends there is a synthetic combined field where all terms have been indexed. It computes new term and collection statistics for this combined field.
  2. It uses a disjunction iterator and IndexSearcher.getSimilarity() to score documents.

In order for a similarity to be compatible, Similarity.computeNorm(org.apache.lucene.index.FieldInvertState) must be additive: the norm of the combined field is the sum of norms for each individual field. The norms must also be encoded using SmallFloat.intToByte4(int). These requirements hold for all similarities that compute norms the same way as SimilarityBase.computeNorm(org.apache.lucene.index.FieldInvertState), which includes BM25Similarity and DFRSimilarity. Per-field similarities are not supported.

The query also requires that either all fields or no fields have norms enabled. Having only some fields with norms enabled can result in errors.

The scoring is based on BM25F's simple formula described in: http://www.staff.city.ac.uk/~sb317/papers/foundations_bm25_review.pdf. This query implements the same approach but allows other similarities besides BM25Similarity.

  • Nested Class Summary

    Nested Classes
    Modifier and Type
    Class
    Description
    static class 
    A builder for XCombinedFieldQuery.
  • Field Summary

    Fields inherited from interface org.apache.lucene.util.Accountable

    NULL_ACCOUNTABLE
  • Method Summary

    Modifier and Type
    Method
    Description
    org.apache.lucene.search.Weight
    createWeight(org.apache.lucene.search.IndexSearcher searcher, org.apache.lucene.search.ScoreMode scoreMode, float boost)
     
    boolean
     
    List<org.apache.lucene.index.Term>
     
    int
     
    long
     
    org.apache.lucene.search.Query
    rewrite(org.apache.lucene.index.IndexReader reader)
     
     
    void
    visit(org.apache.lucene.search.QueryVisitor visitor)
     

    Methods inherited from class org.apache.lucene.search.Query

    classHash, sameClassAs, toString

    Methods inherited from class java.lang.Object

    clone, finalize, getClass, notify, notifyAll, wait, wait, wait

    Methods inherited from interface org.apache.lucene.util.Accountable

    getChildResources
  • Method Details

    • getTerms

      public List<org.apache.lucene.index.Term> getTerms()
    • toString

      public String toString(String field)
      Specified by:
      toString in class org.apache.lucene.search.Query
    • equals

      public boolean equals(Object o)
      Specified by:
      equals in class org.apache.lucene.search.Query
    • hashCode

      public int hashCode()
      Specified by:
      hashCode in class org.apache.lucene.search.Query
    • ramBytesUsed

      public long ramBytesUsed()
      Specified by:
      ramBytesUsed in interface org.apache.lucene.util.Accountable
    • rewrite

      public org.apache.lucene.search.Query rewrite(org.apache.lucene.index.IndexReader reader) throws IOException
      Overrides:
      rewrite in class org.apache.lucene.search.Query
      Throws:
      IOException
    • visit

      public void visit(org.apache.lucene.search.QueryVisitor visitor)
      Overrides:
      visit in class org.apache.lucene.search.Query
    • createWeight

      public org.apache.lucene.search.Weight createWeight(org.apache.lucene.search.IndexSearcher searcher, org.apache.lucene.search.ScoreMode scoreMode, float boost) throws IOException
      Overrides:
      createWeight in class org.apache.lucene.search.Query
      Throws:
      IOException