private static HighlightBuilder.Field createHighlighterField() { HighlightBuilder.Field field = new HighlightBuilder.Field(FIELD_NAME); field.highlighterType("fvh"); field.matchedFields( Stream.concat( Stream.of(FIELD_NAME), Arrays .stream(NAME_ANALYZERS) .map(a -> a.subField(FIELD_NAME))) .toArray(String[]::new)); return field; }
private static Optional<String> getHighlightedText(SearchHit hit) { return ofNullable(hit.getHighlightFields()) .flatMap(fields -> ofNullable(fields.get(FIELD_NAME))) .flatMap(field -> ofNullable(field.getFragments())) .flatMap(fragments -> stream(fragments).findFirst()) .map(Text::string); }
HighlightBuilder.Field field = new HighlightBuilder.Field(params[0].toString()); if (params.length == 1) { return field; switch (param.getKey()) { case "type": field.highlighterType((String) param.getValue()); break; case "boundary_chars": field.boundaryChars(fromArrayListToCharArray((ArrayList) param.getValue())); break; case "boundary_max_scan": field.boundaryMaxScan((Integer) param.getValue()); break; case "force_source": field.forceSource((Boolean) param.getValue()); break; case "fragmenter": field.fragmenter((String) param.getValue()); break; case "fragment_offset": field.fragmentOffset((Integer) param.getValue()); break; case "fragment_size": field.fragmentSize((Integer) param.getValue()); break; case "highlight_filter": field.highlightFilter((Boolean) param.getValue()); break;
private static TopHitsAggregationBuilder createSubAggregation(SuggestionQuery query) { return AggregationBuilders.topHits(DOCS_AGGREGATION_NAME) .highlighter(new HighlightBuilder() .encoder("html") .preTags("<mark>") .postTags("</mark>") .field(createHighlighterField())) .from(query.getSkip()) .size(query.getLimit()) .sort(new ScoreSortBuilder()) .sort(new FieldSortBuilder(ComponentIndexDefinition.FIELD_NAME)) .fetchSource(false); }
/** * Adds a field to be highlighted with a provided fragment size (in characters), and * a provided (maximum) number of fragments. * * @param name The field to highlight * @param fragmentSize The size of a fragment in characters * @param numberOfFragments The (maximum) number of fragments */ public HighlightBuilder field(String name, int fragmentSize, int numberOfFragments) { return field(new Field(name).fragmentSize(fragmentSize).numOfFragments(numberOfFragments)); }
protected void updateRequestWithHighlight(Select select, SearchRequestBuilder request) { boolean foundAnyHighlights = false; HighlightBuilder highlightBuilder = new HighlightBuilder(); for (Hint hint : select.getHints()) { if (hint.getType() == HintType.HIGHLIGHT) { HighlightBuilder.Field highlightField = parseHighlightField(hint.getParams()); if (highlightField != null) { foundAnyHighlights = true; highlightBuilder.field(highlightField); } } } if (foundAnyHighlights) { request.highlighter(highlightBuilder); } }
final HighlightBuilder highlightBuilder = new HighlightBuilder() .requireFieldMatch(false) .field("*") .fragmentSize(0) .numOfFragments(0); searchSourceBuilder.highlighter(highlightBuilder);
/** * Adds a field to be highlighted with a provided fragment size (in characters), and * default number of fragments of 5. * * @param name The field to highlight * @param fragmentSize The size of a fragment in characters */ public HighlightBuilder field(String name, int fragmentSize) { return field(new Field(name).fragmentSize(fragmentSize)); }
/** * A static factory method to construct new search highlights. */ public static HighlightBuilder highlight() { return new HighlightBuilder(); }
/** * The highlighted fragments. {@code null} if failed to highlight (for example, the field is not stored). */ public Text[] getFragments() { return fragments(); }
protected PassageFormatter getPassageFormatter(SearchContextHighlight.Field field, Encoder encoder) { CustomPassageFormatter passageFormatter = new CustomPassageFormatter(field.fieldOptions().preTags()[0], field.fieldOptions().postTags()[0], encoder); return passageFormatter; }
private Map<String, Highlighter> setupHighlighters(Settings settings, List<SearchPlugin> plugins) { NamedRegistry<Highlighter> highlighters = new NamedRegistry<>("highlighter"); highlighters.register("fvh", new FastVectorHighlighter(settings)); highlighters.register("plain", new PlainHighlighter()); highlighters.register("unified", new UnifiedHighlighter()); highlighters.extractAndRegister(plugins, SearchPlugin::getHighlighters); return unmodifiableMap(highlighters.getRegistry()); }
public static HighlightField readHighlightField(StreamInput in) throws IOException { HighlightField field = new HighlightField(); field.readFrom(in); return field; }
/** * The order of fragments per field. By default, ordered by the order in the * highlighted text. Can be {@code score}, which then it will be ordered * by score of the fragments, or {@code none}. */ public HB order(String order) { return order(Order.fromString(order)); }
@Override protected WeightedSpanTermExtractor newTermExtractor(String defaultField) { return defaultField == null ? new CustomWeightedSpanTermExtractor() : new CustomWeightedSpanTermExtractor(defaultField); }
/** * When using the highlighterType {@code fvh} this setting * controls which scanner to use for fragment boundaries, and defaults to "simple". */ @SuppressWarnings("unchecked") public HB boundaryScannerType(String boundaryScannerType) { this.boundaryScannerType = BoundaryScannerType.fromString(boundaryScannerType); return (HB) this; }
/** * The name of the field highlighted. */ public String getName() { return name(); }
/** * Adds a field to be highlighted with a provided fragment size (in characters), and * a provided (maximum) number of fragments. * * @param name The field to highlight * @param fragmentSize The size of a fragment in characters * @param numberOfFragments The (maximum) number of fragments * @param fragmentOffset The offset from the start of the fragment to the start of the highlight */ public HighlightBuilder field(String name, int fragmentSize, int numberOfFragments, int fragmentOffset) { return field(new Field(name).fragmentSize(fragmentSize).numOfFragments(numberOfFragments) .fragmentOffset(fragmentOffset)); }
HighlightBuilder highlightBuilder = searchQuery.getHighlightBuilder(); if (highlightBuilder == null) { highlightBuilder = new HighlightBuilder(); highlightBuilder.field(highlightField);