org.apache.lucene.search.uhighlight

## Class PhraseHelper

- java.lang.Object
- - org.apache.lucene.search.uhighlight.PhraseHelper

    public class PhraseHelper
    extends Object

Helps the `FieldOffsetStrategy` with position sensitive queries (e.g. highlight phrases correctly). This is a stateful class holding information about the query, but it can (and is) re-used across highlighting documents. Despite this state, it's immutable after construction.

NOTE: This API is for internal purposes only and might change in incompatible ways in the next release.

### Field Summary

Fields
`static PhraseHelper` `NONE`

### Constructor Summary

Constructors
Constructor and Description
`PhraseHelper(Query query, String field, Predicate<String> fieldMatcher, Function<SpanQuery,Boolean> rewriteQueryPred, Function<Query,Collection<Query>> preExtractRewriteFunction, boolean ignoreQueriesNeedingRewrite)` Constructor.

### Method Summary

All Methods Instance Methods Concrete Methods
`void` `createOffsetsEnumsForSpans(LeafReader leafReader, int docId, List<OffsetsEnum> results)` Given the internal SpanQueries, produce a number of OffsetsEnum into the `results` param.
`BytesRef[]` `getAllPositionInsensitiveTerms()` Returns the terms that are position-insensitive (sorted).
`Set<SpanQuery>` `getSpanQueries()`
`boolean` `hasPositionSensitivity()` If there is no position sensitivity then use of the instance of this class can be ignored.
`boolean` `willRewrite()` Rewrite is needed for handling a `SpanMultiTermQueryWrapper` (MTQ / wildcards) or some custom things.

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

### Field Detail

#### NONE

    public static final PhraseHelper NONE

### Constructor Detail

#### PhraseHelper

    public PhraseHelper(Query query,
                        String field,
                        Predicate<String> fieldMatcher,
                        Function<SpanQuery,Boolean> rewriteQueryPred,
                        Function<Query,Collection<Query>> preExtractRewriteFunction,
                        boolean ignoreQueriesNeedingRewrite)

Constructor. `rewriteQueryPred` is an extension hook to override the default choice of `WeightedSpanTermExtractor.mustRewriteQuery(SpanQuery)`. By default unknown query types are rewritten, so use this to return `Boolean.FALSE` if you know the query doesn't need to be rewritten. Similarly, `preExtractRewriteFunction` is also an extension hook for extract to allow different queries to be set before the `WeightedSpanTermExtractor`'s extraction is invoked. `ignoreQueriesNeedingRewrite` effectively ignores any query clause that needs to be "rewritten", which is usually limited to just a `SpanMultiTermQueryWrapper` but could be other custom ones. `fieldMatcher` The field name predicate to use for extracting the query part that must be highlighted.

### Method Detail

#### getSpanQueries

    public Set<SpanQuery> getSpanQueries()

#### hasPositionSensitivity

    public boolean hasPositionSensitivity()

If there is no position sensitivity then use of the instance of this class can be ignored.

#### willRewrite

    public boolean willRewrite()

Rewrite is needed for handling a `SpanMultiTermQueryWrapper` (MTQ / wildcards) or some custom things. When true, the resulting term list will probably be different than what it was known to be initially.

#### getAllPositionInsensitiveTerms

    public BytesRef[] getAllPositionInsensitiveTerms()

Returns the terms that are position-insensitive (sorted).

#### createOffsetsEnumsForSpans

    public void createOffsetsEnumsForSpans(LeafReader leafReader,
                                           int docId,
                                           List<OffsetsEnum> results)
                                    throws IOException

Given the internal SpanQueries, produce a number of OffsetsEnum into the `results` param.

Throws:
  `IOException`