Search in sources :

Example 16 with Field

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>"));
}
Also used : Field(org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder.Field) Matchers.containsString(org.hamcrest.Matchers.containsString) SearchResponse(org.elasticsearch.action.search.SearchResponse) ElasticsearchAssertions.assertSearchResponse(org.elasticsearch.test.hamcrest.ElasticsearchAssertions.assertSearchResponse)

Example 17 with Field

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>"));
}
Also used : Field(org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder.Field) SearchResponse(org.elasticsearch.action.search.SearchResponse) ElasticsearchAssertions.assertSearchResponse(org.elasticsearch.test.hamcrest.ElasticsearchAssertions.assertSearchResponse) Field(org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder.Field)

Example 18 with Field

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));
    }
}
Also used : Matchers.containsString(org.hamcrest.Matchers.containsString) SearchResponse(org.elasticsearch.action.search.SearchResponse) ElasticsearchAssertions.assertSearchResponse(org.elasticsearch.test.hamcrest.ElasticsearchAssertions.assertSearchResponse) Field(org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder.Field)

Example 19 with Field

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"));
    }
}
Also used : IndexRequestBuilder(org.elasticsearch.action.index.IndexRequestBuilder) Field(org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder.Field) GeoPoint(org.elasticsearch.common.geo.GeoPoint) SearchResponse(org.elasticsearch.action.search.SearchResponse) ElasticsearchAssertions.assertSearchResponse(org.elasticsearch.test.hamcrest.ElasticsearchAssertions.assertSearchResponse)

Example 20 with Field

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")));
    }
}
Also used : Field(org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder.Field) BoundaryScannerType(org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder.BoundaryScannerType) XContentType(org.elasticsearch.common.xcontent.XContentType) Matchers.containsString(org.hamcrest.Matchers.containsString) MultiMatchQueryBuilder(org.elasticsearch.index.query.MultiMatchQueryBuilder) XContentBuilder(org.elasticsearch.common.xcontent.XContentBuilder) GeoPoint(org.elasticsearch.common.geo.GeoPoint) SearchSourceBuilder(org.elasticsearch.search.builder.SearchSourceBuilder) SearchResponse(org.elasticsearch.action.search.SearchResponse) ElasticsearchAssertions.assertSearchResponse(org.elasticsearch.test.hamcrest.ElasticsearchAssertions.assertSearchResponse)

Aggregations

Field (org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder.Field)28 SearchResponse (org.elasticsearch.action.search.SearchResponse)24 ElasticsearchAssertions.assertSearchResponse (org.elasticsearch.test.hamcrest.ElasticsearchAssertions.assertSearchResponse)22 Matchers.containsString (org.hamcrest.Matchers.containsString)17 XContentBuilder (org.elasticsearch.common.xcontent.XContentBuilder)5 SearchSourceBuilder (org.elasticsearch.search.builder.SearchSourceBuilder)5 IdsQueryBuilder (org.elasticsearch.index.query.IdsQueryBuilder)3 MatchQueryBuilder (org.elasticsearch.index.query.MatchQueryBuilder)3 MultiMatchQueryBuilder (org.elasticsearch.index.query.MultiMatchQueryBuilder)3 FunctionScoreQueryBuilder (org.elasticsearch.index.query.functionscore.FunctionScoreQueryBuilder)3 SearchRequestBuilder (org.elasticsearch.action.search.SearchRequestBuilder)2 GeoPoint (org.elasticsearch.common.geo.GeoPoint)2 MatchAllQueryBuilder (org.elasticsearch.index.query.MatchAllQueryBuilder)2 QueryBuilder (org.elasticsearch.index.query.QueryBuilder)2 SearchHit (org.elasticsearch.search.SearchHit)2 HighlightBuilder (org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder)2 HighlightField (org.elasticsearch.search.fetch.subphase.highlight.HighlightField)2 TreeSet (java.util.TreeSet)1 Function (java.util.function.Function)1 Query (org.apache.lucene.search.Query)1