|
20 | 20 |
|
21 | 21 | import com.carrotsearch.randomizedtesting.generators.RandomPicks;
|
22 | 22 | import org.apache.lucene.search.join.ScoreMode;
|
23 |
| -import org.elasticsearch.Version; |
24 | 23 | import org.elasticsearch.action.index.IndexRequestBuilder;
|
25 | 24 | import org.elasticsearch.action.search.SearchRequestBuilder;
|
26 | 25 | import org.elasticsearch.action.search.SearchResponse;
|
@@ -2841,4 +2840,80 @@ public void testHighlightQueryRewriteDatesWithNow() throws Exception {
|
2841 | 2840 | equalTo("<x>hello</x> world"));
|
2842 | 2841 | }
|
2843 | 2842 | }
|
| 2843 | + |
| 2844 | + public void testWithNestedQuery() throws Exception { |
| 2845 | + String mapping = jsonBuilder().startObject().startObject("type").startObject("properties") |
| 2846 | + .startObject("text") |
| 2847 | + .field("type", "text") |
| 2848 | + .field("index_options", "offsets") |
| 2849 | + .field("term_vector", "with_positions_offsets") |
| 2850 | + .endObject() |
| 2851 | + .startObject("foo") |
| 2852 | + .field("type", "nested") |
| 2853 | + .startObject("properties") |
| 2854 | + .startObject("text") |
| 2855 | + .field("type", "text") |
| 2856 | + .endObject() |
| 2857 | + .endObject() |
| 2858 | + .endObject() |
| 2859 | + .endObject().endObject().endObject().string(); |
| 2860 | + prepareCreate("test").addMapping("type", mapping, XContentType.JSON).get(); |
| 2861 | + |
| 2862 | + client().prepareIndex("test", "type", "1").setSource(jsonBuilder().startObject() |
| 2863 | + .startArray("foo") |
| 2864 | + .startObject().field("text", "brown").endObject() |
| 2865 | + .startObject().field("text", "cow").endObject() |
| 2866 | + .endArray() |
| 2867 | + .field("text", "brown") |
| 2868 | + .endObject()).setRefreshPolicy(WriteRequest.RefreshPolicy.IMMEDIATE) |
| 2869 | + .get(); |
| 2870 | + |
| 2871 | + for (String type : new String[] {"unified", "plain"}) { |
| 2872 | + SearchResponse searchResponse = client().prepareSearch() |
| 2873 | + .setQuery(nestedQuery("foo", matchQuery("foo.text", "brown cow"), ScoreMode.None)) |
| 2874 | + .highlighter(new HighlightBuilder() |
| 2875 | + .field(new Field("foo.text").highlighterType(type))) |
| 2876 | + .get(); |
| 2877 | + assertHitCount(searchResponse, 1); |
| 2878 | + HighlightField field = searchResponse.getHits().getAt(0).getHighlightFields().get("foo.text"); |
| 2879 | + assertThat(field.getFragments().length, equalTo(2)); |
| 2880 | + assertThat(field.getFragments()[0].string(), equalTo("<em>brown</em>")); |
| 2881 | + assertThat(field.getFragments()[1].string(), equalTo("<em>cow</em>")); |
| 2882 | + |
| 2883 | + searchResponse = client().prepareSearch() |
| 2884 | + .setQuery(nestedQuery("foo", prefixQuery("foo.text", "bro"), ScoreMode.None)) |
| 2885 | + .highlighter(new HighlightBuilder() |
| 2886 | + .field(new Field("foo.text").highlighterType(type))) |
| 2887 | + .get(); |
| 2888 | + assertHitCount(searchResponse, 1); |
| 2889 | + field = searchResponse.getHits().getAt(0).getHighlightFields().get("foo.text"); |
| 2890 | + assertThat(field.getFragments().length, equalTo(1)); |
| 2891 | + assertThat(field.getFragments()[0].string(), equalTo("<em>brown</em>")); |
| 2892 | + |
| 2893 | + searchResponse = client().prepareSearch() |
| 2894 | + .setQuery(nestedQuery("foo", prefixQuery("foo.text", "bro"), ScoreMode.None)) |
| 2895 | + .highlighter(new HighlightBuilder() |
| 2896 | + .field(new Field("foo.text").highlighterType("plain"))) |
| 2897 | + .get(); |
| 2898 | + assertHitCount(searchResponse, 1); |
| 2899 | + field = searchResponse.getHits().getAt(0).getHighlightFields().get("foo.text"); |
| 2900 | + assertThat(field.getFragments().length, equalTo(1)); |
| 2901 | + assertThat(field.getFragments()[0].string(), equalTo("<em>brown</em>")); |
| 2902 | + } |
| 2903 | + |
| 2904 | + // For unified and fvh highlighters we just check that the nested query is correctly extracted |
| 2905 | + // but we highlight the root text field since nested documents cannot be highlighted with postings nor term vectors |
| 2906 | + // directly. |
| 2907 | + for (String type : ALL_TYPES) { |
| 2908 | + SearchResponse searchResponse = client().prepareSearch() |
| 2909 | + .setQuery(nestedQuery("foo", prefixQuery("foo.text", "bro"), ScoreMode.None)) |
| 2910 | + .highlighter(new HighlightBuilder() |
| 2911 | + .field(new Field("text").highlighterType(type).requireFieldMatch(false))) |
| 2912 | + .get(); |
| 2913 | + assertHitCount(searchResponse, 1); |
| 2914 | + HighlightField field = searchResponse.getHits().getAt(0).getHighlightFields().get("text"); |
| 2915 | + assertThat(field.getFragments().length, equalTo(1)); |
| 2916 | + assertThat(field.getFragments()[0].string(), equalTo("<em>brown</em>")); |
| 2917 | + } |
| 2918 | + } |
2844 | 2919 | }
|
0 commit comments