use of org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder.Field in project elasticsearch by elastic.
the class HighlighterSearchIT method testACopyFieldWithNestedQuery.
public void testACopyFieldWithNestedQuery() throws Exception {
String mapping = jsonBuilder().startObject().startObject("type").startObject("properties").startObject("foo").field("type", "nested").startObject("properties").startObject("text").field("type", "text").field("copy_to", "foo_text").endObject().endObject().endObject().startObject("foo_text").field("type", "text").field("term_vector", "with_positions_offsets").field("store", true).endObject().endObject().endObject().endObject().string();
prepareCreate("test").addMapping("type", mapping, XContentType.JSON).get();
client().prepareIndex("test", "type", "1").setSource(jsonBuilder().startObject().startArray("foo").startObject().field("text", "brown").endObject().startObject().field("text", "cow").endObject().endArray().endObject()).setRefreshPolicy(WriteRequest.RefreshPolicy.IMMEDIATE).get();
SearchResponse searchResponse = client().prepareSearch().setQuery(nestedQuery("foo", matchQuery("foo.text", "brown cow"), ScoreMode.None)).highlighter(new HighlightBuilder().field(new Field("foo_text").highlighterType("fvh")).requireFieldMatch(false)).get();
assertHitCount(searchResponse, 1);
HighlightField field = searchResponse.getHits().getAt(0).getHighlightFields().get("foo_text");
assertThat(field.getFragments().length, equalTo(2));
assertThat(field.getFragments()[0].string(), equalTo("<em>brown</em>"));
assertThat(field.getFragments()[1].string(), equalTo("<em>cow</em>"));
}
use of org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder.Field in project elasticsearch by elastic.
the class HighlighterSearchIT method testFastVectorHighlighterMultipleFields.
public void testFastVectorHighlighterMultipleFields() {
assertAcked(prepareCreate("test").addMapping("type1", "field1", "type=text,term_vector=with_positions_offsets", "field2", "type=text,term_vector=with_positions_offsets"));
ensureGreen();
index("test", "type1", "1", "field1", "The <b>quick<b> brown fox", "field2", "The <b>slow<b> brown fox");
refresh();
SearchResponse response = client().prepareSearch("test").setQuery(QueryBuilders.matchQuery("field1", "fox")).highlighter(new HighlightBuilder().field(new HighlightBuilder.Field("field1").preTags("<1>").postTags("</1>").requireFieldMatch(true)).field(new HighlightBuilder.Field("field2").preTags("<2>").postTags("</2>").requireFieldMatch(false))).get();
assertHighlight(response, 0, "field1", 0, 1, equalTo("The <b>quick<b> brown <1>fox</1>"));
assertHighlight(response, 0, "field2", 0, 1, equalTo("The <b>slow<b> brown <2>fox</2>"));
}
use of org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder.Field in project elasticsearch by elastic.
the class HighlighterSearchIT method testMissingStoredField.
public void testMissingStoredField() throws Exception {
assertAcked(prepareCreate("test").addMapping("type1", "highlight_field", "type=text,store=true"));
ensureGreen();
client().prepareIndex("test", "type1", "1").setSource(jsonBuilder().startObject().field("field", "highlight").endObject()).get();
refresh();
for (String type : UNIFIED_AND_NULL) {
// This query used to fail when the field to highlight was absent
SearchResponse response = client().prepareSearch("test").setQuery(QueryBuilders.matchQuery("field", "highlight").type(MatchQuery.Type.BOOLEAN)).highlighter(new HighlightBuilder().field(new HighlightBuilder.Field("highlight_field").fragmentSize(-1).numOfFragments(1).fragmenter("simple")).highlighterType(type)).get();
assertThat(response.getHits().getHits()[0].getHighlightFields().isEmpty(), equalTo(true));
}
}
use of org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder.Field in project elasticsearch by elastic.
the class HighlighterSearchIT method testDisableFastVectorHighlighter.
public void testDisableFastVectorHighlighter() throws Exception {
assertAcked(prepareCreate("test").addMapping("type1", "title", "type=text,store=true,term_vector=with_positions_offsets,analyzer=classic"));
ensureGreen();
IndexRequestBuilder[] indexRequestBuilders = new IndexRequestBuilder[5];
for (int i = 0; i < indexRequestBuilders.length; i++) {
indexRequestBuilders[i] = client().prepareIndex("test", "type1", Integer.toString(i)).setSource("title", "This is a test for the workaround for the fast vector highlighting SOLR-3724");
}
indexRandom(true, indexRequestBuilders);
SearchResponse search = client().prepareSearch().setQuery(matchPhraseQuery("title", "test for the workaround")).highlighter(new HighlightBuilder().field("title", 50, 1, 10)).get();
for (int i = 0; i < indexRequestBuilders.length; i++) {
// Because of SOLR-3724 nothing is highlighted when FVH is used
assertNotHighlighted(search, i, "title");
}
// Using plain highlighter instead of FVH
search = client().prepareSearch().setQuery(matchPhraseQuery("title", "test for the workaround")).highlighter(new HighlightBuilder().field("title", 50, 1, 10).highlighterType("plain")).get();
for (int i = 0; i < indexRequestBuilders.length; i++) {
assertHighlight(search, i, "title", 0, 1, equalTo("This is a <em>test</em> for the <em>workaround</em> for the fast vector highlighting SOLR-3724"));
}
// Using plain highlighter instead of FVH on the field level
search = client().prepareSearch().setQuery(matchPhraseQuery("title", "test for the workaround")).highlighter(new HighlightBuilder().field(new HighlightBuilder.Field("title").highlighterType("plain")).highlighterType("plain")).get();
for (int i = 0; i < indexRequestBuilders.length; i++) {
assertHighlight(search, i, "title", 0, 1, equalTo("This is a <em>test</em> for the <em>workaround</em> for the fast vector highlighting SOLR-3724"));
}
}
use of org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder.Field in project elasticsearch by elastic.
the class HighlighterSearchIT method testMultiMatchQueryHighlight.
public void testMultiMatchQueryHighlight() throws IOException {
String[] highlighterTypes = new String[] { "fvh", "plain", "postings", "unified" };
XContentBuilder mapping = XContentFactory.jsonBuilder().startObject().startObject("type1").startObject("properties").startObject("field1").field("type", "text").field("index_options", "offsets").field("term_vector", "with_positions_offsets").endObject().startObject("field2").field("type", "text").field("index_options", "offsets").field("term_vector", "with_positions_offsets").endObject().endObject().endObject().endObject();
assertAcked(prepareCreate("test").addMapping("type1", mapping));
ensureGreen();
client().prepareIndex("test", "type1").setSource("field1", "The quick brown fox jumps over", "field2", "The quick brown fox jumps over").get();
refresh();
final int iters = scaledRandomIntBetween(20, 30);
for (int i = 0; i < iters; i++) {
String highlighterType = rarely() ? null : RandomPicks.randomFrom(random(), highlighterTypes);
MultiMatchQueryBuilder.Type[] supportedQueryTypes;
if ("postings".equals(highlighterType)) {
/*
* phrase_prefix is not supported by postings highlighter, as it rewrites against an empty reader, the prefix will never
* match any term
*/
supportedQueryTypes = new MultiMatchQueryBuilder.Type[] { MultiMatchQueryBuilder.Type.BEST_FIELDS, MultiMatchQueryBuilder.Type.CROSS_FIELDS, MultiMatchQueryBuilder.Type.MOST_FIELDS, MultiMatchQueryBuilder.Type.PHRASE };
} else {
supportedQueryTypes = MultiMatchQueryBuilder.Type.values();
}
MultiMatchQueryBuilder.Type matchQueryType = RandomPicks.randomFrom(random(), supportedQueryTypes);
MultiMatchQueryBuilder multiMatchQueryBuilder = multiMatchQuery("the quick brown fox", "field1", "field2").type(matchQueryType);
SearchSourceBuilder source = searchSource().query(multiMatchQueryBuilder).highlighter(highlight().highlightQuery(randomBoolean() ? multiMatchQueryBuilder : null).highlighterType(highlighterType).field(new Field("field1").requireFieldMatch(true).preTags("<field1>").postTags("</field1>")));
logger.info("Running multi-match type: [{}] highlight with type: [{}]", matchQueryType, highlighterType);
SearchResponse searchResponse = client().search(searchRequest("test").source(source)).actionGet();
assertHitCount(searchResponse, 1L);
assertHighlight(searchResponse, 0, "field1", 0, anyOf(equalTo("<field1>The quick brown fox</field1> jumps over"), equalTo("<field1>The</field1> <field1>quick</field1> <field1>brown</field1> <field1>fox</field1> jumps over")));
}
}
Aggregations