Class IndexOrDocValuesQuery
Weight.scorer(org.apache.lucene.index.LeafReaderContext) is costly to create since it usually needs to sort large lists of doc ids.
For instance, for a field that both indexed LongPoints and SortedNumericDocValuesFields with the same values, an efficient range query could be created by
doing:
String field; long minValue, maxValue; Query pointQuery = LongPoint.newRangeQuery(field, minValue, maxValue); Query dvQuery = SortedNumericDocValuesField.newSlowRangeQuery(field, minValue, maxValue); Query query = new IndexOrDocValuesQuery(pointQuery, dvQuery);The above query will be efficient as it will use points in the case that they perform better, ie. when we need a good lead iterator that will be almost entirely consumed; and doc values otherwise, ie. in the case that another part of the query is already leading iteration but we still need the ability to verify that some documents match.
Some field types that work well with IndexOrDocValuesQuery are IntField, LongField, FloatField, DoubleField, and
KeywordField. These fields provide both an indexed structure
and doc values.
NOTEThis query currently only works well with point range/exact queries and their equivalent doc values queries.
- WARNING: This API is experimental and might change in incompatible ways in the next release.
-
Constructor Summary
ConstructorsConstructorDescriptionIndexOrDocValuesQuery(Query indexQuery, Query dvQuery) Create anIndexOrDocValuesQuery. -
Method Summary
Modifier and TypeMethodDescriptioncreateWeight(IndexSearcher searcher, ScoreMode scoreMode, float boost) Expert: Constructs an appropriate Weight implementation for this query.booleanOverride and implement query instance equivalence properly in a subclass.Return the wrapped query that may be costly to initialize but has a good iterator.Return the wrapped query that may be slow at identifying all matching documents, but which is cheap to initialize and can efficiently verify that some documents match.inthashCode()Override and implement query hash code properly in a subclass.rewrite(IndexSearcher indexSearcher) Expert: called to re-write queries into primitive queries.Prints a query to a string, withfieldassumed to be the default field and omitted.voidvisit(QueryVisitor visitor) Recurse through the query tree, visiting any child queries.Methods inherited from class org.apache.lucene.search.Query
classHash, sameClassAs, toString
-
Constructor Details
-
IndexOrDocValuesQuery
Create anIndexOrDocValuesQuery. Both provided queries must match the same documents and give the same scores.- Parameters:
indexQuery- a query that has a good iterator but whose scorer may be costly to createdvQuery- a query whose scorer is cheap to create that can quickly check whether a given document matches
-
-
Method Details
-
getIndexQuery
Return the wrapped query that may be costly to initialize but has a good iterator. -
getRandomAccessQuery
Return the wrapped query that may be slow at identifying all matching documents, but which is cheap to initialize and can efficiently verify that some documents match. -
toString
Description copied from class:QueryPrints a query to a string, withfieldassumed to be the default field and omitted. -
equals
Description copied from class:QueryOverride and implement query instance equivalence properly in a subclass. This is required so thatQueryCacheworks properly.Typically a query will be equal to another only if it's an instance of the same class and its document-filtering properties are identical to those of the other instance. Utility methods are provided for certain repetitive code.
-
hashCode
public int hashCode()Description copied from class:QueryOverride and implement query hash code properly in a subclass. This is required so thatQueryCacheworks properly. -
rewrite
Description copied from class:QueryExpert: called to re-write queries into primitive queries. For example, a PrefixQuery will be rewritten into a BooleanQuery that consists of TermQuerys.Callers are expected to call
rewritemultiple times if necessary, until the rewritten query is the same as the original query.The rewrite process may be able to make use of IndexSearcher's executor and be executed in parallel if the executor is provided.
- Overrides:
rewritein classQuery- Throws:
IOException- See Also:
-
visit
Description copied from class:QueryRecurse through the query tree, visiting any child queries. -
createWeight
public Weight createWeight(IndexSearcher searcher, ScoreMode scoreMode, float boost) throws IOException Description copied from class:QueryExpert: Constructs an appropriate Weight implementation for this query.Only implemented by primitive queries, which re-write to themselves.
- Overrides:
createWeightin classQuery- Parameters:
scoreMode- How the produced scorers will be consumed.boost- The boost that is propagated by the parent queries.- Throws:
IOException
-