|
21 | 21 | import org.apache.lucene.search.join.ScoreMode;
|
22 | 22 | import org.elasticsearch.action.index.IndexRequestBuilder;
|
23 | 23 | import org.elasticsearch.action.search.SearchPhaseExecutionException;
|
| 24 | +import org.elasticsearch.action.search.SearchRequestBuilder; |
24 | 25 | import org.elasticsearch.action.search.SearchResponse;
|
25 | 26 | import org.elasticsearch.common.settings.Settings;
|
26 | 27 | import org.elasticsearch.common.xcontent.XContentBuilder;
|
27 | 28 | import org.elasticsearch.common.xcontent.XContentType;
|
| 29 | +import org.elasticsearch.index.query.InnerHitBuilder; |
| 30 | +import org.elasticsearch.rest.RestStatus; |
28 | 31 | import org.elasticsearch.search.aggregations.Aggregator.SubAggCollectionMode;
|
29 | 32 | import org.elasticsearch.search.aggregations.InternalAggregation;
|
30 | 33 | import org.elasticsearch.search.aggregations.bucket.filter.Filter;
|
|
46 | 49 | import static org.elasticsearch.cluster.metadata.IndexMetaData.SETTING_NUMBER_OF_REPLICAS;
|
47 | 50 | import static org.elasticsearch.cluster.metadata.IndexMetaData.SETTING_NUMBER_OF_SHARDS;
|
48 | 51 | import static org.elasticsearch.common.xcontent.XContentFactory.jsonBuilder;
|
| 52 | +import static org.elasticsearch.index.query.QueryBuilders.boolQuery; |
49 | 53 | import static org.elasticsearch.index.query.QueryBuilders.matchAllQuery;
|
50 | 54 | import static org.elasticsearch.index.query.QueryBuilders.nestedQuery;
|
51 | 55 | import static org.elasticsearch.index.query.QueryBuilders.termQuery;
|
|
57 | 61 | import static org.elasticsearch.search.aggregations.AggregationBuilders.sum;
|
58 | 62 | import static org.elasticsearch.search.aggregations.AggregationBuilders.terms;
|
59 | 63 | import static org.elasticsearch.test.hamcrest.ElasticsearchAssertions.assertAcked;
|
| 64 | +import static org.elasticsearch.test.hamcrest.ElasticsearchAssertions.assertFailures; |
60 | 65 | import static org.elasticsearch.test.hamcrest.ElasticsearchAssertions.assertHitCount;
|
61 | 66 | import static org.elasticsearch.test.hamcrest.ElasticsearchAssertions.assertNoFailures;
|
62 | 67 | import static org.elasticsearch.test.hamcrest.ElasticsearchAssertions.assertSearchResponse;
|
@@ -674,4 +679,42 @@ public void testFilterAggInsideNestedAgg() throws Exception {
|
674 | 679 | numStringParams = bucket.getAggregations().get("num_string_params");
|
675 | 680 | assertThat(numStringParams.getDocCount(), equalTo(0L));
|
676 | 681 | }
|
| 682 | + |
| 683 | + public void testExtractInnerHitBuildersWithDuplicateName() throws Exception { |
| 684 | + assertAcked( |
| 685 | + prepareCreate("idxduplicatehitnames") |
| 686 | + .setSettings(Settings.builder().put(SETTING_NUMBER_OF_SHARDS, 1).put(SETTING_NUMBER_OF_REPLICAS, 0)) |
| 687 | + .addMapping("product", "categories", "type=keyword", "name", "type=text", "property", "type=nested") |
| 688 | + ); |
| 689 | + ensureGreen("idxduplicatehitnames"); |
| 690 | + |
| 691 | + SearchRequestBuilder searchRequestBuilder = client() |
| 692 | + .prepareSearch("idxduplicatehitnames") |
| 693 | + .setQuery(boolQuery() |
| 694 | + .should(nestedQuery("property", termQuery("property.id", 1D), ScoreMode.None).innerHit(new InnerHitBuilder("ih1"))) |
| 695 | + .should(nestedQuery("property", termQuery("property.id", 1D), ScoreMode.None).innerHit(new InnerHitBuilder("ih2"))) |
| 696 | + .should(nestedQuery("property", termQuery("property.id", 1D), ScoreMode.None).innerHit(new InnerHitBuilder("ih1")))); |
| 697 | + |
| 698 | + assertFailures( |
| 699 | + searchRequestBuilder, |
| 700 | + RestStatus.BAD_REQUEST, |
| 701 | + containsString("innerHits already contains an entry for key [ih1]")); |
| 702 | + } |
| 703 | + |
| 704 | + public void testExtractInnerHitBuildersWithNullName() throws Exception { |
| 705 | + assertAcked( |
| 706 | + prepareCreate("idxnullhitnames") |
| 707 | + .setSettings(Settings.builder().put(SETTING_NUMBER_OF_SHARDS, 1).put(SETTING_NUMBER_OF_REPLICAS, 0)) |
| 708 | + .addMapping("product", "categories", "type=keyword", "name", "type=text", "property", "type=nested") |
| 709 | + ); |
| 710 | + ensureGreen("idxnullhitnames"); |
| 711 | + |
| 712 | + SearchResponse response = client().prepareSearch("idxnullhitnames") |
| 713 | + .setQuery(boolQuery() |
| 714 | + .should(nestedQuery("property", termQuery("property.id", 1D), ScoreMode.None).innerHit(new InnerHitBuilder())) |
| 715 | + .should(nestedQuery("property", termQuery("property.id", 1D), ScoreMode.None).innerHit(new InnerHitBuilder())) |
| 716 | + .should(nestedQuery("property", termQuery("property.id", 1D), ScoreMode.None).innerHit(new InnerHitBuilder())) |
| 717 | + ).get(); |
| 718 | + assertNoFailures(response); |
| 719 | + } |
677 | 720 | }
|
0 commit comments