fix some highlighting encoder issues
This commit is contained in:
parent
c0f8223a6c
commit
d7943e8ebd
|
@ -57,9 +57,10 @@ import static org.elasticsearch.common.collect.Maps.*;
|
|||
*/
|
||||
public class HighlightPhase implements SearchHitPhase {
|
||||
|
||||
private Encoder encoder;
|
||||
private FragListBuilder fraglistbuilder;
|
||||
private FragmentsBuilder fragmentbuiler;
|
||||
public static class Encoders {
|
||||
public static Encoder DEFAULT = new DefaultEncoder();
|
||||
public static Encoder HTML = new SimpleHTMLEncoder();
|
||||
}
|
||||
|
||||
@Override public Map<String, ? extends SearchParseElement> parseElements() {
|
||||
return ImmutableMap.of("highlight", new HighlighterParseElement());
|
||||
|
@ -75,10 +76,12 @@ public class HighlightPhase implements SearchHitPhase {
|
|||
|
||||
Map<String, HighlightField> highlightFields = newHashMap();
|
||||
for (SearchContextHighlight.Field field : context.highlight().fields()) {
|
||||
if (field.encoder().equals("html"))
|
||||
encoder = new SimpleHTMLEncoder();
|
||||
else
|
||||
encoder = new DefaultEncoder();
|
||||
Encoder encoder;
|
||||
if (field.encoder().equals("html")) {
|
||||
encoder = Encoders.HTML;
|
||||
} else {
|
||||
encoder = Encoders.DEFAULT;
|
||||
}
|
||||
FieldMapper mapper = documentMapper.mappers().smartNameFieldMapper(field.field());
|
||||
if (mapper == null) {
|
||||
MapperService.SmartNameFieldMappers fullMapper = context.mapperService().smartName(field.field());
|
||||
|
@ -118,7 +121,6 @@ public class HighlightPhase implements SearchHitPhase {
|
|||
Formatter formatter = new SimpleHTMLFormatter(field.preTags()[0], field.postTags()[0]);
|
||||
|
||||
|
||||
|
||||
Highlighter highlighter = new Highlighter(formatter, encoder, queryScorer);
|
||||
highlighter.setTextFragmenter(fragmenter);
|
||||
|
||||
|
@ -188,7 +190,37 @@ public class HighlightPhase implements SearchHitPhase {
|
|||
highlightFields.put(highlightField.name(), highlightField);
|
||||
}
|
||||
} else {
|
||||
FastVectorHighlighter highlighter = buildHighlighter(context, mapper, field);
|
||||
FragListBuilder fragListBuilder;
|
||||
FragmentsBuilder fragmentsBuilder;
|
||||
if (field.numberOfFragments() == 0) {
|
||||
fragListBuilder = new SingleFragListBuilder();
|
||||
|
||||
if (mapper.stored()) {
|
||||
fragmentsBuilder = new SimpleFragmentsBuilder(field.preTags(), field.postTags());
|
||||
} else {
|
||||
fragmentsBuilder = new SourceSimpleFragmentsBuilder(mapper, context, field.preTags(), field.postTags());
|
||||
}
|
||||
} else {
|
||||
if (field.fragmentOffset() == -1)
|
||||
fragListBuilder = new SimpleFragListBuilder();
|
||||
else
|
||||
fragListBuilder = new MarginFragListBuilder(field.fragmentOffset());
|
||||
|
||||
if (field.scoreOrdered()) {
|
||||
if (mapper.stored()) {
|
||||
fragmentsBuilder = new ScoreOrderFragmentsBuilder(field.preTags(), field.postTags());
|
||||
} else {
|
||||
fragmentsBuilder = new SourceScoreOrderFragmentsBuilder(mapper, context, field.preTags(), field.postTags());
|
||||
}
|
||||
} else {
|
||||
if (mapper.stored()) {
|
||||
fragmentsBuilder = new SimpleFragmentsBuilder(field.preTags(), field.postTags());
|
||||
} else {
|
||||
fragmentsBuilder = new SourceSimpleFragmentsBuilder(mapper, context, field.preTags(), field.postTags());
|
||||
}
|
||||
}
|
||||
}
|
||||
FastVectorHighlighter highlighter = new FastVectorHighlighter(true, false, fragListBuilder, fragmentsBuilder);
|
||||
FieldQuery fieldQuery = buildFieldQuery(highlighter, context.query(), hitContext.reader(), field);
|
||||
|
||||
String[] fragments;
|
||||
|
@ -196,7 +228,7 @@ public class HighlightPhase implements SearchHitPhase {
|
|||
// a HACK to make highlighter do highlighting, even though its using the single frag list builder
|
||||
int numberOfFragments = field.numberOfFragments() == 0 ? 1 : field.numberOfFragments();
|
||||
fragments = highlighter.getBestFragments(fieldQuery, hitContext.reader(), hitContext.docId(), mapper.names().indexName(), field.fragmentCharSize(), numberOfFragments,
|
||||
this.fraglistbuilder, this.fragmentbuiler, field.preTags(), field.postTags(), encoder);
|
||||
fragListBuilder, fragmentsBuilder, field.preTags(), field.postTags(), encoder);
|
||||
} catch (IOException e) {
|
||||
throw new FetchPhaseExecutionException(context, "Failed to highlight field [" + field.field() + "]", e);
|
||||
}
|
||||
|
@ -219,41 +251,4 @@ public class HighlightPhase implements SearchHitPhase {
|
|||
CustomFieldQuery.highlightFilters.set(field.highlightFilter());
|
||||
return new CustomFieldQuery(query, highlighter);
|
||||
}
|
||||
|
||||
private FastVectorHighlighter buildHighlighter(SearchContext searchContext, FieldMapper fieldMapper, SearchContextHighlight.Field field) {
|
||||
FragListBuilder fragListBuilder;
|
||||
FragmentsBuilder fragmentsBuilder;
|
||||
if (field.numberOfFragments() == 0) {
|
||||
fragListBuilder = new SingleFragListBuilder();
|
||||
|
||||
if (fieldMapper.stored()) {
|
||||
fragmentsBuilder = new SimpleFragmentsBuilder(field.preTags(), field.postTags());
|
||||
} else {
|
||||
fragmentsBuilder = new SourceSimpleFragmentsBuilder(fieldMapper, searchContext, field.preTags(), field.postTags());
|
||||
}
|
||||
} else {
|
||||
if (field.fragmentOffset() == -1)
|
||||
fragListBuilder = new SimpleFragListBuilder();
|
||||
else
|
||||
fragListBuilder = new MarginFragListBuilder(field.fragmentOffset());
|
||||
|
||||
if (field.scoreOrdered()) {
|
||||
if (fieldMapper.stored()) {
|
||||
fragmentsBuilder = new ScoreOrderFragmentsBuilder(field.preTags(), field.postTags());
|
||||
} else {
|
||||
fragmentsBuilder = new SourceScoreOrderFragmentsBuilder(fieldMapper, searchContext, field.preTags(), field.postTags());
|
||||
}
|
||||
} else {
|
||||
if (fieldMapper.stored()) {
|
||||
fragmentsBuilder = new SimpleFragmentsBuilder(field.preTags(), field.postTags());
|
||||
} else {
|
||||
fragmentsBuilder = new SourceSimpleFragmentsBuilder(fieldMapper, searchContext, field.preTags(), field.postTags());
|
||||
}
|
||||
}
|
||||
}
|
||||
this.fraglistbuilder = fragListBuilder;
|
||||
this.fragmentbuiler = fragmentsBuilder;
|
||||
return new FastVectorHighlighter(true, false, fragListBuilder, fragmentsBuilder);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue