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.elasticsearch.search.highlight;
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.index.FieldInfo;
import org.apache.lucene.util.BytesRef;
import org.elasticsearch.common.base.Function;
import org.elasticsearch.common.collect.Iterators;
import org.elasticsearch.common.util.BigArrays;
import org.elasticsearch.index.mapper.FieldMapper;
import org.elasticsearch.index.mapper.core.StringFieldMapper;
import org.elasticsearch.search.highlight.ExperimentalHighlighter.HighlightExecutionContext;
import org.elasticsearch.search.highlight.SearchContextHighlight.FieldOptions;
import org.wikimedia.highlighter.experimental.elasticsearch.BytesRefTermWeigherCache;
import org.wikimedia.highlighter.experimental.elasticsearch.SegmenterFactory;
import org.wikimedia.highlighter.experimental.lucene.hit.DocsAndPositionsHitEnum;
import org.wikimedia.highlighter.experimental.lucene.hit.TokenStreamHitEnum;
import org.wikimedia.highlighter.experimental.lucene.hit.weight.BasicQueryWeigher;
import org.wikimedia.highlighter.experimental.lucene.hit.weight.DefaultSimilarityTermWeigher;
import org.wikimedia.search.highlighter.experimental.HitEnum;
import org.wikimedia.search.highlighter.experimental.Segmenter;
import org.wikimedia.search.highlighter.experimental.SourceExtracter;
import org.wikimedia.search.highlighter.experimental.hit.ConcatHitEnum;
import org.wikimedia.search.highlighter.experimental.hit.EmptyHitEnum;
import org.wikimedia.search.highlighter.experimental.hit.PositionBoostingHitEnumWrapper;
import org.wikimedia.search.highlighter.experimental.hit.ReplayingHitEnum.HitEnumAndLength;
import org.wikimedia.search.highlighter.experimental.hit.TermWeigher;
import org.wikimedia.search.highlighter.experimental.hit.WeightFilteredHitEnumWrapper;
import org.wikimedia.search.highlighter.experimental.hit.weight.CachingTermWeigher;
import org.wikimedia.search.highlighter.experimental.hit.weight.ConstantTermWeigher;
import org.wikimedia.search.highlighter.experimental.snippet.MultiSegmenter;
import org.wikimedia.search.highlighter.experimental.source.NonMergingMultiSourceExtracter;
import org.wikimedia.search.highlighter.experimental.source.StringSourceExtracter;
public class FieldWrapper {
private final HighlightExecutionContext executionContext;
private final HighlighterContext 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 int positionGap = 1;
/**
* Build a wrapper around the default field in the context.
*/
public FieldWrapper(HighlightExecutionContext executionContext, HighlighterContext 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, HighlighterContext context,
BasicQueryWeigher weigher, String fieldName) {
assert !context.fieldName.equals(fieldName);
FieldMapper> mapper = context.context.smartNameFieldMapper(fieldName);
this.executionContext = executionContext;
this.context = new HighlighterContext(fieldName, context.field, mapper, context.context,
context.hitContext, context.query);
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) {
List