Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance. Project price only 1 $
You can buy this project and download/modify it how often you want.
package org.wikimedia.highlighter.cirrus.opensearch;
import static java.util.stream.Collectors.toCollection;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.TokenStream;
import org.apache.lucene.util.BytesRef;
import org.opensearch.common.util.BigArrays;
import org.opensearch.index.mapper.MappedFieldType;
import org.opensearch.index.mapper.TextSearchInfo;
import org.opensearch.search.fetch.subphase.highlight.FieldHighlightContext;
import org.opensearch.search.fetch.subphase.highlight.HighlightUtils;
import org.opensearch.search.fetch.subphase.highlight.SearchHighlightContext;
import org.wikimedia.highlighter.cirrus.opensearch.CirrusHighlighter.HighlightExecutionContext;
import org.wikimedia.highlighter.cirrus.lucene.hit.PostingsHitEnum;
import org.wikimedia.highlighter.cirrus.lucene.hit.TokenStreamHitEnum;
import org.wikimedia.highlighter.cirrus.lucene.hit.weight.BasicQueryWeigher;
import org.wikimedia.highlighter.cirrus.lucene.hit.weight.DefaultSimilarityTermWeigher;
import org.wikimedia.search.highlighter.cirrus.HitEnum;
import org.wikimedia.search.highlighter.cirrus.Segmenter;
import org.wikimedia.search.highlighter.cirrus.SourceExtracter;
import org.wikimedia.search.highlighter.cirrus.hit.ConcatHitEnum;
import org.wikimedia.search.highlighter.cirrus.hit.EmptyHitEnum;
import org.wikimedia.search.highlighter.cirrus.hit.PositionBoostingHitEnumWrapper;
import org.wikimedia.search.highlighter.cirrus.hit.ReplayingHitEnum.HitEnumAndLength;
import org.wikimedia.search.highlighter.cirrus.hit.TermWeigher;
import org.wikimedia.search.highlighter.cirrus.hit.WeightFilteredHitEnumWrapper;
import org.wikimedia.search.highlighter.cirrus.hit.weight.CachingTermWeigher;
import org.wikimedia.search.highlighter.cirrus.hit.weight.ConstantTermWeigher;
import org.wikimedia.search.highlighter.cirrus.snippet.MultiSegmenter;
import org.wikimedia.search.highlighter.cirrus.source.NonMergingMultiSourceExtracter;
import org.wikimedia.search.highlighter.cirrus.source.StringSourceExtracter;
@SuppressWarnings("checkstyle:classfanoutcomplexity") // to improve if we ever touch that code again
public class FieldWrapper {
private final HighlightExecutionContext executionContext;
private final FieldHighlightContext context;
private final BasicQueryWeigher weigher;
private List values;
/**
* If there is a TokenStream still open during the highlighting.
*/
private TokenStream tokenStream;
/**
* Position gap for the field. Only looked up if needed. < 0 means not looked up.
*/
private static final int POSITION_GAP_INIT = -1;
private int positionGap = POSITION_GAP_INIT;
/**
* Build a wrapper around the default field in the context.
*/
public FieldWrapper(HighlightExecutionContext executionContext, FieldHighlightContext context,
BasicQueryWeigher weigher) {
this.executionContext = executionContext;
this.context = context;
this.weigher = weigher;
}
/**
* Build a wrapper around fieldName which is not the default field in the
* context.
*/
public FieldWrapper(HighlightExecutionContext executionContext, FieldHighlightContext context,
BasicQueryWeigher weigher, String fieldName) {
assert !context.fieldName.equals(fieldName);
MappedFieldType fieldType = context.context.mapperService().fieldType(fieldName);
this.executionContext = executionContext;
this.context = new FieldHighlightContext(fieldName, context.field, fieldType, context.context, context.hitContext,
context.query, false, context.cache);
this.weigher = weigher;
}
/**
* Name of the wrapped field.
*/
public String fieldName() {
return context.fieldName;
}
@Override
public String toString() {
return context.fieldName;
}
/**
* Cleanup any resources we still have open.
*/
public void cleanup() throws IOException {
if (tokenStream != null) {
try {
tokenStream.end();
} finally {
tokenStream.close();
}
}
}
public List getFieldValues() throws IOException {
if (values == null) {
boolean forceSource = context.forceSource;
List