diff --git a/client/rest-high-level/src/main/java/org/elasticsearch/client/Request.java b/client/rest-high-level/src/main/java/org/elasticsearch/client/Request.java index c8f9725f95500..5e5e761faa9d8 100644 --- a/client/rest-high-level/src/main/java/org/elasticsearch/client/Request.java +++ b/client/rest-high-level/src/main/java/org/elasticsearch/client/Request.java @@ -136,7 +136,6 @@ static Request delete(DeleteRequest deleteRequest) { Params parameters = Params.builder(); parameters.withRouting(deleteRequest.routing()); - parameters.withParent(deleteRequest.parent()); parameters.withTimeout(deleteRequest.timeout()); parameters.withVersion(deleteRequest.version()); parameters.withVersionType(deleteRequest.versionType()); @@ -315,9 +314,6 @@ static Request bulk(BulkRequest bulkRequest) throws IOException { if (Strings.hasLength(request.routing())) { metadata.field("routing", request.routing()); } - if (Strings.hasLength(request.parent())) { - metadata.field("parent", request.parent()); - } if (request.version() != Versions.MATCH_ANY) { metadata.field("version", request.version()); } @@ -394,7 +390,6 @@ static Request get(GetRequest getRequest) { Params parameters = Params.builder(); parameters.withPreference(getRequest.preference()); parameters.withRouting(getRequest.routing()); - parameters.withParent(getRequest.parent()); parameters.withRefresh(getRequest.refresh()); parameters.withRealtime(getRequest.realtime()); parameters.withStoredFields(getRequest.storedFields()); @@ -422,7 +417,6 @@ static Request index(IndexRequest indexRequest) { Params parameters = Params.builder(); parameters.withRouting(indexRequest.routing()); - parameters.withParent(indexRequest.parent()); parameters.withTimeout(indexRequest.timeout()); parameters.withVersion(indexRequest.version()); parameters.withVersionType(indexRequest.versionType()); @@ -446,7 +440,6 @@ static Request update(UpdateRequest updateRequest) throws IOException { Params parameters = Params.builder(); parameters.withRouting(updateRequest.routing()); - parameters.withParent(updateRequest.parent()); parameters.withTimeout(updateRequest.timeout()); parameters.withRefreshPolicy(updateRequest.getRefreshPolicy()); parameters.withWaitForActiveShards(updateRequest.waitForActiveShards()); @@ -711,10 +704,6 @@ Params withMasterTimeout(TimeValue masterTimeout) { return putParam("master_timeout", masterTimeout); } - Params withParent(String parent) { - return putParam("parent", parent); - } - Params withPipeline(String pipeline) { return putParam("pipeline", pipeline); } diff --git a/client/rest-high-level/src/test/java/org/elasticsearch/client/CrudIT.java b/client/rest-high-level/src/test/java/org/elasticsearch/client/CrudIT.java index 352a6a5e61d1b..ee820871dbb3d 100644 --- a/client/rest-high-level/src/test/java/org/elasticsearch/client/CrudIT.java +++ b/client/rest-high-level/src/test/java/org/elasticsearch/client/CrudIT.java @@ -362,19 +362,6 @@ public void testIndex() throws IOException { "version conflict, current version [2] is different than the one provided [5]]", exception.getMessage()); assertEquals("index", exception.getMetadata("es.index").get(0)); } - { - ElasticsearchStatusException exception = expectThrows(ElasticsearchStatusException.class, () -> { - IndexRequest indexRequest = new IndexRequest("index", "type", "missing_parent"); - indexRequest.source(XContentBuilder.builder(xContentType.xContent()).startObject().field("field", "test").endObject()); - indexRequest.parent("missing"); - - execute(indexRequest, highLevelClient()::index, highLevelClient()::indexAsync); - }); - - assertEquals(RestStatus.BAD_REQUEST, exception.status()); - assertEquals("Elasticsearch exception [type=illegal_argument_exception, " + - "reason=can't specify parent if no parent field has been configured]", exception.getMessage()); - } { ElasticsearchStatusException exception = expectThrows(ElasticsearchStatusException.class, () -> { IndexRequest indexRequest = new IndexRequest("index", "type", "missing_pipeline"); @@ -456,22 +443,6 @@ public void testUpdate() throws IOException { assertEquals("Elasticsearch exception [type=version_conflict_engine_exception, reason=[type][id]: version conflict, " + "current version [2] is different than the one provided [1]]", exception.getMessage()); } - { - ElasticsearchStatusException exception = expectThrows(ElasticsearchStatusException.class, () -> { - UpdateRequest updateRequest = new UpdateRequest("index", "type", "id"); - updateRequest.doc(singletonMap("field", "updated"), randomFrom(XContentType.values())); - if (randomBoolean()) { - updateRequest.parent("missing"); - } else { - updateRequest.routing("missing"); - } - execute(updateRequest, highLevelClient()::update, highLevelClient()::updateAsync); - }); - - assertEquals(RestStatus.NOT_FOUND, exception.status()); - assertEquals("Elasticsearch exception [type=document_missing_exception, reason=[type][id]: document missing]", - exception.getMessage()); - } { IndexRequest indexRequest = new IndexRequest("index", "type", "with_script"); indexRequest.source(singletonMap("counter", 12)); diff --git a/client/rest-high-level/src/test/java/org/elasticsearch/client/RequestTests.java b/client/rest-high-level/src/test/java/org/elasticsearch/client/RequestTests.java index e560540236c2f..a8c50c3a3d9ca 100644 --- a/client/rest-high-level/src/test/java/org/elasticsearch/client/RequestTests.java +++ b/client/rest-high-level/src/test/java/org/elasticsearch/client/RequestTests.java @@ -209,9 +209,6 @@ public void testMultiGet() throws IOException { if (randomBoolean()) { item.routing(randomAlphaOfLength(4)); } - if (randomBoolean()) { - item.parent(randomAlphaOfLength(4)); - } if (randomBoolean()) { item.storedFields(generateRandomStringArray(16, 8, false)); } @@ -253,11 +250,6 @@ public void testDelete() { deleteRequest.routing(routing); expectedParams.put("routing", routing); } - if (randomBoolean()) { - String parent = randomAlphaOfLengthBetween(3, 10); - deleteRequest.parent(parent); - expectedParams.put("parent", parent); - } } Request request = Request.delete(deleteRequest); @@ -525,11 +517,6 @@ public void testIndex() throws IOException { indexRequest.routing(routing); expectedParams.put("routing", routing); } - if (randomBoolean()) { - String parent = randomAlphaOfLengthBetween(3, 10); - indexRequest.parent(parent); - expectedParams.put("parent", parent); - } if (randomBoolean()) { String pipeline = randomAlphaOfLengthBetween(3, 10); indexRequest.setPipeline(pipeline); @@ -732,11 +719,6 @@ public void testUpdate() throws IOException { updateRequest.routing(routing); expectedParams.put("routing", routing); } - if (randomBoolean()) { - String parent = randomAlphaOfLengthBetween(3, 10); - updateRequest.parent(parent); - expectedParams.put("parent", parent); - } if (randomBoolean()) { String timeout = randomTimeValue(); updateRequest.timeout(timeout); @@ -840,15 +822,9 @@ public void testBulk() throws IOException { if (randomBoolean()) { indexRequest.setPipeline(randomAlphaOfLength(5)); } - if (randomBoolean()) { - indexRequest.parent(randomAlphaOfLength(5)); - } } else if (opType == DocWriteRequest.OpType.CREATE) { IndexRequest createRequest = new IndexRequest(index, type, id).source(source, xContentType).create(true); docWriteRequest = createRequest; - if (randomBoolean()) { - createRequest.parent(randomAlphaOfLength(5)); - } } else if (opType == DocWriteRequest.OpType.UPDATE) { final UpdateRequest updateRequest = new UpdateRequest(index, type, id).doc(new IndexRequest().source(source, xContentType)); docWriteRequest = updateRequest; @@ -858,9 +834,6 @@ public void testBulk() throws IOException { if (randomBoolean()) { randomizeFetchSourceContextParams(updateRequest::fetchSource, new HashMap<>()); } - if (randomBoolean()) { - updateRequest.parent(randomAlphaOfLength(5)); - } } else if (opType == DocWriteRequest.OpType.DELETE) { docWriteRequest = new DeleteRequest(index, type, id); } else { @@ -902,7 +875,6 @@ public void testBulk() throws IOException { assertEquals(originalRequest.type(), parsedRequest.type()); assertEquals(originalRequest.id(), parsedRequest.id()); assertEquals(originalRequest.routing(), parsedRequest.routing()); - assertEquals(originalRequest.parent(), parsedRequest.parent()); assertEquals(originalRequest.version(), parsedRequest.version()); assertEquals(originalRequest.versionType(), parsedRequest.versionType()); diff --git a/client/rest-high-level/src/test/java/org/elasticsearch/client/documentation/CRUDDocumentationIT.java b/client/rest-high-level/src/test/java/org/elasticsearch/client/documentation/CRUDDocumentationIT.java index 09a3fbd4d16a8..0a17040b8c141 100644 --- a/client/rest-high-level/src/test/java/org/elasticsearch/client/documentation/CRUDDocumentationIT.java +++ b/client/rest-high-level/src/test/java/org/elasticsearch/client/documentation/CRUDDocumentationIT.java @@ -186,9 +186,6 @@ public void testIndex() throws Exception { // tag::index-request-routing request.routing("routing"); // <1> // end::index-request-routing - // tag::index-request-parent - request.parent("parent"); // <1> - // end::index-request-parent // tag::index-request-timeout request.timeout(TimeValue.timeValueSeconds(1)); // <1> request.timeout("1s"); // <2> @@ -475,9 +472,6 @@ public void testUpdate() throws Exception { // tag::update-request-routing request.routing("routing"); // <1> // end::update-request-routing - // tag::update-request-parent - request.parent("parent"); // <1> - // end::update-request-parent // tag::update-request-timeout request.timeout(TimeValue.timeValueSeconds(1)); // <1> request.timeout("1s"); // <2> @@ -583,9 +577,6 @@ public void testDelete() throws Exception { // tag::delete-request-routing request.routing("routing"); // <1> // end::delete-request-routing - // tag::delete-request-parent - request.parent("parent"); // <1> - // end::delete-request-parent // tag::delete-request-timeout request.timeout(TimeValue.timeValueMinutes(2)); // <1> request.timeout("2m"); // <2> @@ -869,9 +860,6 @@ public void testGet() throws Exception { //tag::get-request-routing request.routing("routing"); // <1> //end::get-request-routing - //tag::get-request-parent - request.parent("parent"); // <1> - //end::get-request-parent //tag::get-request-preference request.preference("preference"); // <1> //end::get-request-preference @@ -1122,8 +1110,6 @@ public void testMultiGet() throws Exception { // tag::multi-get-request-item-extras request.add(new MultiGetRequest.Item("index", "type", "with_routing") .routing("some_routing")); // <1> - request.add(new MultiGetRequest.Item("index", "type", "with_parent") - .parent("some_parent")); // <2> request.add(new MultiGetRequest.Item("index", "type", "with_version") .versionType(VersionType.EXTERNAL) // <3> .version(10123L)); // <4> diff --git a/client/rest-high-level/src/test/java/org/elasticsearch/client/documentation/SearchDocumentationIT.java b/client/rest-high-level/src/test/java/org/elasticsearch/client/documentation/SearchDocumentationIT.java index 96d962c3ac553..bd1cf48f14195 100644 --- a/client/rest-high-level/src/test/java/org/elasticsearch/client/documentation/SearchDocumentationIT.java +++ b/client/rest-high-level/src/test/java/org/elasticsearch/client/documentation/SearchDocumentationIT.java @@ -131,7 +131,7 @@ public void testSearch() throws Exception { // tag::search-source-sorting sourceBuilder.sort(new ScoreSortBuilder().order(SortOrder.DESC)); // <1> - sourceBuilder.sort(new FieldSortBuilder("_uid").order(SortOrder.ASC)); // <2> + sourceBuilder.sort(new FieldSortBuilder("_id").order(SortOrder.ASC)); // <2> // end::search-source-sorting // tag::search-source-filtering-off diff --git a/docs/java-rest/high-level/document/delete.asciidoc b/docs/java-rest/high-level/document/delete.asciidoc index da252fa224f8d..5d263c894c663 100644 --- a/docs/java-rest/high-level/document/delete.asciidoc +++ b/docs/java-rest/high-level/document/delete.asciidoc @@ -23,12 +23,6 @@ include-tagged::{doc-tests}/CRUDDocumentationIT.java[delete-request-routing] -------------------------------------------------- <1> Routing value -["source","java",subs="attributes,callouts,macros"] --------------------------------------------------- -include-tagged::{doc-tests}/CRUDDocumentationIT.java[delete-request-parent] --------------------------------------------------- -<1> Parent value - ["source","java",subs="attributes,callouts,macros"] -------------------------------------------------- include-tagged::{doc-tests}/CRUDDocumentationIT.java[delete-request-timeout] diff --git a/docs/java-rest/high-level/document/get.asciidoc b/docs/java-rest/high-level/document/get.asciidoc index 9d04e138eea1e..504b22a8e6dd7 100644 --- a/docs/java-rest/high-level/document/get.asciidoc +++ b/docs/java-rest/high-level/document/get.asciidoc @@ -51,12 +51,6 @@ include-tagged::{doc-tests}/CRUDDocumentationIT.java[get-request-routing] -------------------------------------------------- <1> Routing value -["source","java",subs="attributes,callouts,macros"] --------------------------------------------------- -include-tagged::{doc-tests}/CRUDDocumentationIT.java[get-request-parent] --------------------------------------------------- -<1> Parent value - ["source","java",subs="attributes,callouts,macros"] -------------------------------------------------- include-tagged::{doc-tests}/CRUDDocumentationIT.java[get-request-preference] diff --git a/docs/java-rest/high-level/document/index.asciidoc b/docs/java-rest/high-level/document/index.asciidoc index f673a1799094f..b64e19d1d33eb 100644 --- a/docs/java-rest/high-level/document/index.asciidoc +++ b/docs/java-rest/high-level/document/index.asciidoc @@ -49,12 +49,6 @@ include-tagged::{doc-tests}/CRUDDocumentationIT.java[index-request-routing] -------------------------------------------------- <1> Routing value -["source","java",subs="attributes,callouts,macros"] --------------------------------------------------- -include-tagged::{doc-tests}/CRUDDocumentationIT.java[index-request-parent] --------------------------------------------------- -<1> Parent value - ["source","java",subs="attributes,callouts,macros"] -------------------------------------------------- include-tagged::{doc-tests}/CRUDDocumentationIT.java[index-request-timeout] diff --git a/docs/java-rest/high-level/document/update.asciidoc b/docs/java-rest/high-level/document/update.asciidoc index 70483454e0043..1c780093115d8 100644 --- a/docs/java-rest/high-level/document/update.asciidoc +++ b/docs/java-rest/high-level/document/update.asciidoc @@ -93,12 +93,6 @@ include-tagged::{doc-tests}/CRUDDocumentationIT.java[update-request-routing] -------------------------------------------------- <1> Routing value -["source","java",subs="attributes,callouts,macros"] --------------------------------------------------- -include-tagged::{doc-tests}/CRUDDocumentationIT.java[update-request-parent] --------------------------------------------------- -<1> Parent value - ["source","java",subs="attributes,callouts,macros"] -------------------------------------------------- include-tagged::{doc-tests}/CRUDDocumentationIT.java[update-request-timeout] diff --git a/docs/reference/docs/delete-by-query.asciidoc b/docs/reference/docs/delete-by-query.asciidoc index db2ff3eeb6e3c..1ca0f35e49924 100644 --- a/docs/reference/docs/delete-by-query.asciidoc +++ b/docs/reference/docs/delete-by-query.asciidoc @@ -492,7 +492,7 @@ Which results in a sensible `total` like this one: ==== Automatic slicing You can also let delete-by-query automatically parallelize using -<> to slice on `_uid`. Use `slices` to specify the number of +<> to slice on `_id`. Use `slices` to specify the number of slices to use: [source,js] diff --git a/docs/reference/docs/update-by-query.asciidoc b/docs/reference/docs/update-by-query.asciidoc index 527a007c5f1a9..5f28443cf9ba6 100644 --- a/docs/reference/docs/update-by-query.asciidoc +++ b/docs/reference/docs/update-by-query.asciidoc @@ -531,7 +531,7 @@ Which results in a sensible `total` like this one: ==== Automatic slicing You can also let update-by-query automatically parallelize using -<> to slice on `_uid`. Use `slices` to specify the number of +<> to slice on `_id`. Use `slices` to specify the number of slices to use: [source,js] diff --git a/docs/reference/how-to/recipes/scoring.asciidoc b/docs/reference/how-to/recipes/scoring.asciidoc index f9973385c7163..09c0e585765d6 100644 --- a/docs/reference/how-to/recipes/scoring.asciidoc +++ b/docs/reference/how-to/recipes/scoring.asciidoc @@ -35,9 +35,9 @@ consistent across queries. This work around has another benefit: when two documents have the same score, they will be sorted by their internal Lucene doc id (which is unrelated to the -`_id` or `_uid`) by default. However these doc ids could be different across -copies of the same shard. So by always hitting the same shard, we would get -more consistent ordering of documents that have the same scores. +`_id`) by default. However these doc ids could be different across copies of +the same shard. So by always hitting the same shard, we would get more +consistent ordering of documents that have the same scores. [float] ==== Relevancy looks wrong diff --git a/docs/reference/mapping/fields.asciidoc b/docs/reference/mapping/fields.asciidoc index dd88910607269..9d660b1aeae9b 100644 --- a/docs/reference/mapping/fields.asciidoc +++ b/docs/reference/mapping/fields.asciidoc @@ -13,10 +13,6 @@ can be customised when a mapping type is created. The index to which the document belongs. -<>:: - - A composite field consisting of the `_type` and the `_id`. - <>:: The document's <>. diff --git a/docs/reference/mapping/fields/id-field.asciidoc b/docs/reference/mapping/fields/id-field.asciidoc index c46ca28af0602..0f4ed15196962 100644 --- a/docs/reference/mapping/fields/id-field.asciidoc +++ b/docs/reference/mapping/fields/id-field.asciidoc @@ -5,10 +5,6 @@ Each document has an `_id` that uniquely identifies it, which is indexed so that documents can be looked up either with the <> or the <>. -NOTE: This was not the case with pre-6.0 indices due to the fact that they -supported multiple types, so the `_type` and `_id` were merged into a composite -primary key called `_uid`. - The value of the `_id` field is accessible in certain queries (`term`, `terms`, `match`, `query_string`, `simple_query_string`). diff --git a/docs/reference/mapping/fields/uid-field.asciidoc b/docs/reference/mapping/fields/uid-field.asciidoc deleted file mode 100644 index 2ca3b69a5ae61..0000000000000 --- a/docs/reference/mapping/fields/uid-field.asciidoc +++ /dev/null @@ -1,69 +0,0 @@ -[[mapping-uid-field]] -=== `_uid` field - -deprecated[6.0.0, Now that types have been removed, documents are uniquely identified by their `_id` and the `_uid` field has only been kept as a view over the `_id` field for backward compatibility.] - -Each document indexed is associated with a <> (see -<>) and an <>. These values are -combined as `{type}#{id}` and indexed as the `_uid` field. - -The value of the `_uid` field is accessible in queries, aggregations, scripts, -and when sorting: - -[source,js] --------------------------- -# Example documents -PUT my_index/_doc/1 -{ - "text": "Document with ID 1" -} - -PUT my_index/_doc/2?refresh=true -{ - "text": "Document with ID 2" -} --------------------------- -// CONSOLE - -[source,js] --------------------------- -GET my_index/_search -{ - "query": { - "terms": { - "_uid": [ "_doc#1", "_doc#2" ] <1> - } - }, - "aggs": { - "UIDs": { - "terms": { - "field": "_uid", <2> - "size": 10 - } - } - }, - "sort": [ - { - "_uid": { <3> - "order": "desc" - } - } - ], - "script_fields": { - "UID": { - "script": { - "lang": "painless", - "source": "doc['_uid']" <4> - } - } - } -} --------------------------- -// CONSOLE -// TEST[continued] -// TEST[warning:Fielddata access on the _uid field is deprecated, use _id instead] - -<1> Querying on the `_uid` field (also see the <>) -<2> Aggregating on the `_uid` field -<3> Sorting on the `_uid` field -<4> Accessing the `_uid` field in scripts diff --git a/docs/reference/migration/migrate_7_0/mappings.asciidoc b/docs/reference/migration/migrate_7_0/mappings.asciidoc index b0ab90546c3a8..c56a0ae9b6422 100644 --- a/docs/reference/migration/migrate_7_0/mappings.asciidoc +++ b/docs/reference/migration/migrate_7_0/mappings.asciidoc @@ -5,6 +5,12 @@ The `_all` field deprecated in 6 have now been removed. +==== The `_uid` meta field is removed + +This field used to index a composite key formed of the `_type` and the `_id`. +Now that indices cannot have multiple types, this has been removed in favour +of `_id`. + ==== The `_default_` mapping is no longer allowed The `_default_` mapping has been deprecated in 6.0 and is now no longer allowed diff --git a/docs/reference/query-dsl/ids-query.asciidoc b/docs/reference/query-dsl/ids-query.asciidoc index 5eb52a5dda5a7..55adcb8f94cf8 100644 --- a/docs/reference/query-dsl/ids-query.asciidoc +++ b/docs/reference/query-dsl/ids-query.asciidoc @@ -2,7 +2,7 @@ === Ids Query Filters documents that only have the provided ids. Note, this query -uses the <> field. +uses the <> field. [source,js] -------------------------------------------------- diff --git a/docs/reference/search/request/scroll.asciidoc b/docs/reference/search/request/scroll.asciidoc index b1166eae9f9e6..be725aaf362f5 100644 --- a/docs/reference/search/request/scroll.asciidoc +++ b/docs/reference/search/request/scroll.asciidoc @@ -225,9 +225,9 @@ GET /twitter/_search?scroll=1m The result from the first request returned documents that belong to the first slice (id: 0) and the result from the second request returned documents that belong to the second slice. Since the maximum number of slices is set to 2 the union of the results of the two requests is equivalent to the results of a scroll query without slicing. -By default the splitting is done on the shards first and then locally on each shard using the _uid field +By default the splitting is done on the shards first and then locally on each shard using the _id field with the following formula: -`slice(doc) = floorMod(hashCode(doc._uid), max)` +`slice(doc) = floorMod(hashCode(doc._id), max)` For instance if the number of shards is equal to 2 and the user requested 4 slices then the slices 0 and 2 are assigned to the first shard and the slices 1 and 3 are assigned to the second shard. diff --git a/docs/reference/search/validate.asciidoc b/docs/reference/search/validate.asciidoc index 27b09ad407ab6..2c0c8821355a7 100644 --- a/docs/reference/search/validate.asciidoc +++ b/docs/reference/search/validate.asciidoc @@ -180,7 +180,7 @@ Response: { "index": "twitter", "valid": true, - "explanation": "((user:terminator^3.71334 plot:future^2.763601 plot:human^2.8415773 plot:sarah^3.4193945 plot:kyle^3.8244398 plot:cyborg^3.9177752 plot:connor^4.040236 plot:reese^4.7133346 ... )~6) -ConstantScore(_uid:tweet#2)) #(ConstantScore(_type:tweet))^0.0" + "explanation": "((user:terminator^3.71334 plot:future^2.763601 plot:human^2.8415773 plot:sarah^3.4193945 plot:kyle^3.8244398 plot:cyborg^3.9177752 plot:connor^4.040236 plot:reese^4.7133346 ... )~6) -ConstantScore(_id:2)) #(ConstantScore(_type:tweet))^0.0" } ] } diff --git a/modules/ingest-common/src/test/java/org/elasticsearch/ingest/common/AppendProcessorTests.java b/modules/ingest-common/src/test/java/org/elasticsearch/ingest/common/AppendProcessorTests.java index 66cddd43e6583..5dedd72be72bc 100644 --- a/modules/ingest-common/src/test/java/org/elasticsearch/ingest/common/AppendProcessorTests.java +++ b/modules/ingest-common/src/test/java/org/elasticsearch/ingest/common/AppendProcessorTests.java @@ -127,7 +127,7 @@ public void testConvertScalarToList() throws Exception { public void testAppendMetadataExceptVersion() throws Exception { // here any metadata field value becomes a list, which won't make sense in most of the cases, // but support for append is streamlined like for set so we test it - MetaData randomMetaData = randomFrom(MetaData.INDEX, MetaData.TYPE, MetaData.ID, MetaData.ROUTING, MetaData.PARENT); + MetaData randomMetaData = randomFrom(MetaData.INDEX, MetaData.TYPE, MetaData.ID, MetaData.ROUTING); List values = new ArrayList<>(); Processor appendProcessor; if (randomBoolean()) { diff --git a/modules/ingest-common/src/test/java/org/elasticsearch/ingest/common/DateIndexNameProcessorTests.java b/modules/ingest-common/src/test/java/org/elasticsearch/ingest/common/DateIndexNameProcessorTests.java index d052ce0cd44c3..eba37dc742169 100644 --- a/modules/ingest-common/src/test/java/org/elasticsearch/ingest/common/DateIndexNameProcessorTests.java +++ b/modules/ingest-common/src/test/java/org/elasticsearch/ingest/common/DateIndexNameProcessorTests.java @@ -38,7 +38,7 @@ public void testJodaPattern() throws Exception { "events-", "y", "yyyyMMdd" ); - IngestDocument document = new IngestDocument("_index", "_type", "_id", null, null, null, null, + IngestDocument document = new IngestDocument("_index", "_type", "_id", null, null, null, Collections.singletonMap("_field", "2016-04-25T12:24:20.101Z")); processor.execute(document); assertThat(document.getSourceAndMetadata().get("_index"), equalTo("")); @@ -48,7 +48,7 @@ public void testTAI64N()throws Exception { Function function = DateFormat.Tai64n.getFunction(null, DateTimeZone.UTC, null); DateIndexNameProcessor dateProcessor = new DateIndexNameProcessor("_tag", "_field", Collections.singletonList(function), DateTimeZone.UTC, "events-", "m", "yyyyMMdd"); - IngestDocument document = new IngestDocument("_index", "_type", "_id", null, null, null, null, + IngestDocument document = new IngestDocument("_index", "_type", "_id", null, null, null, Collections.singletonMap("_field", (randomBoolean() ? "@" : "") + "4000000050d506482dbdf024")); dateProcessor.execute(document); assertThat(document.getSourceAndMetadata().get("_index"), equalTo("")); @@ -58,12 +58,12 @@ public void testUnixMs()throws Exception { Function function = DateFormat.UnixMs.getFunction(null, DateTimeZone.UTC, null); DateIndexNameProcessor dateProcessor = new DateIndexNameProcessor("_tag", "_field", Collections.singletonList(function), DateTimeZone.UTC, "events-", "m", "yyyyMMdd"); - IngestDocument document = new IngestDocument("_index", "_type", "_id", null, null, null, null, + IngestDocument document = new IngestDocument("_index", "_type", "_id", null, null, null, Collections.singletonMap("_field", "1000500")); dateProcessor.execute(document); assertThat(document.getSourceAndMetadata().get("_index"), equalTo("")); - document = new IngestDocument("_index", "_type", "_id", null, null, null, null, + document = new IngestDocument("_index", "_type", "_id", null, null, null, Collections.singletonMap("_field", 1000500L)); dateProcessor.execute(document); assertThat(document.getSourceAndMetadata().get("_index"), equalTo("")); @@ -73,7 +73,7 @@ public void testUnix()throws Exception { Function function = DateFormat.Unix.getFunction(null, DateTimeZone.UTC, null); DateIndexNameProcessor dateProcessor = new DateIndexNameProcessor("_tag", "_field", Collections.singletonList(function), DateTimeZone.UTC, "events-", "m", "yyyyMMdd"); - IngestDocument document = new IngestDocument("_index", "_type", "_id", null, null, null, null, + IngestDocument document = new IngestDocument("_index", "_type", "_id", null, null, null, Collections.singletonMap("_field", "1000.5")); dateProcessor.execute(document); assertThat(document.getSourceAndMetadata().get("_index"), equalTo("")); diff --git a/modules/ingest-common/src/test/java/org/elasticsearch/ingest/common/ForEachProcessorTests.java b/modules/ingest-common/src/test/java/org/elasticsearch/ingest/common/ForEachProcessorTests.java index 95c25bedb6280..07573a780a17a 100644 --- a/modules/ingest-common/src/test/java/org/elasticsearch/ingest/common/ForEachProcessorTests.java +++ b/modules/ingest-common/src/test/java/org/elasticsearch/ingest/common/ForEachProcessorTests.java @@ -45,7 +45,7 @@ public void testExecute() throws Exception { values.add("bar"); values.add("baz"); IngestDocument ingestDocument = new IngestDocument( - "_index", "_type", "_id", null, null, null, null, Collections.singletonMap("values", values) + "_index", "_type", "_id", null, null, null, Collections.singletonMap("values", values) ); ForEachProcessor processor = new ForEachProcessor( @@ -61,7 +61,7 @@ public void testExecute() throws Exception { public void testExecuteWithFailure() throws Exception { IngestDocument ingestDocument = new IngestDocument( - "_index", "_type", "_id", null, null, null, null, Collections.singletonMap("values", Arrays.asList("a", "b", "c")) + "_index", "_type", "_id", null, null, null, Collections.singletonMap("values", Arrays.asList("a", "b", "c")) ); TestProcessor testProcessor = new TestProcessor(id -> { @@ -101,7 +101,7 @@ public void testMetaDataAvailable() throws Exception { values.add(new HashMap<>()); values.add(new HashMap<>()); IngestDocument ingestDocument = new IngestDocument( - "_index", "_type", "_id", null, null, null, null, Collections.singletonMap("values", values) + "_index", "_type", "_id", null, null, null, Collections.singletonMap("values", values) ); TestProcessor innerProcessor = new TestProcessor(id -> { @@ -132,7 +132,7 @@ public void testRestOfTheDocumentIsAvailable() throws Exception { document.put("values", values); document.put("flat_values", new ArrayList<>()); document.put("other", "value"); - IngestDocument ingestDocument = new IngestDocument("_index", "_type", "_id", null, null, null, null, document); + IngestDocument ingestDocument = new IngestDocument("_index", "_type", "_id", null, null, null, document); ForEachProcessor processor = new ForEachProcessor( "_tag", "values", new SetProcessor("_tag", @@ -171,7 +171,7 @@ public String getTag() { values.add(""); } IngestDocument ingestDocument = new IngestDocument( - "_index", "_type", "_id", null, null, null, null, Collections.singletonMap("values", values) + "_index", "_type", "_id", null, null, null, Collections.singletonMap("values", values) ); ForEachProcessor processor = new ForEachProcessor("_tag", "values", innerProcessor); @@ -190,7 +190,7 @@ public void testModifyFieldsOutsideArray() throws Exception { values.add(1); values.add(null); IngestDocument ingestDocument = new IngestDocument( - "_index", "_type", "_id", null, null, null, null, Collections.singletonMap("values", values) + "_index", "_type", "_id", null, null, null, Collections.singletonMap("values", values) ); TemplateScript.Factory template = new TestTemplateService.MockTemplateScript.Factory("errors"); @@ -220,7 +220,7 @@ public void testScalarValueAllowsUnderscoreValueFieldToRemainAccessible() throws source.put("_value", "new_value"); source.put("values", values); IngestDocument ingestDocument = new IngestDocument( - "_index", "_type", "_id", null, null, null, null, source + "_index", "_type", "_id", null, null, null, source ); TestProcessor processor = new TestProcessor(doc -> doc.setFieldValue("_ingest._value", @@ -251,7 +251,7 @@ public void testNestedForEach() throws Exception { values.add(value); IngestDocument ingestDocument = new IngestDocument( - "_index", "_type", "_id", null, null, null, null, Collections.singletonMap("values1", values) + "_index", "_type", "_id", null, null, null, Collections.singletonMap("values1", values) ); TestProcessor testProcessor = new TestProcessor( diff --git a/modules/ingest-common/src/test/java/org/elasticsearch/ingest/common/SetProcessorTests.java b/modules/ingest-common/src/test/java/org/elasticsearch/ingest/common/SetProcessorTests.java index 6fec977e6c268..5212ea2172c63 100644 --- a/modules/ingest-common/src/test/java/org/elasticsearch/ingest/common/SetProcessorTests.java +++ b/modules/ingest-common/src/test/java/org/elasticsearch/ingest/common/SetProcessorTests.java @@ -102,7 +102,7 @@ public void testSetExistingNullFieldWithOverrideDisabled() throws Exception { } public void testSetMetadataExceptVersion() throws Exception { - MetaData randomMetaData = randomFrom(MetaData.INDEX, MetaData.TYPE, MetaData.ID, MetaData.ROUTING, MetaData.PARENT); + MetaData randomMetaData = randomFrom(MetaData.INDEX, MetaData.TYPE, MetaData.ID, MetaData.ROUTING); Processor processor = createSetProcessor(randomMetaData.getFieldName(), "_value", true); IngestDocument ingestDocument = RandomDocumentPicks.randomIngestDocument(random()); processor.execute(ingestDocument); diff --git a/modules/lang-expression/src/test/java/org/elasticsearch/script/expression/MoreExpressionTests.java b/modules/lang-expression/src/test/java/org/elasticsearch/script/expression/MoreExpressionTests.java index 9a91fccf4ad30..f4095b3f68ada 100644 --- a/modules/lang-expression/src/test/java/org/elasticsearch/script/expression/MoreExpressionTests.java +++ b/modules/lang-expression/src/test/java/org/elasticsearch/script/expression/MoreExpressionTests.java @@ -82,7 +82,7 @@ private SearchRequestBuilder buildRequest(String script, Object... params) { SearchRequestBuilder req = client().prepareSearch().setIndices("test"); req.setQuery(QueryBuilders.matchAllQuery()) - .addSort(SortBuilders.fieldSort("_uid") + .addSort(SortBuilders.fieldSort("_id") .order(SortOrder.ASC)) .addScriptField("foo", new Script(ScriptType.INLINE, "expression", script, paramsMap)); return req; diff --git a/modules/mapper-extras/src/main/java/org/elasticsearch/index/mapper/ScaledFloatFieldMapper.java b/modules/mapper-extras/src/main/java/org/elasticsearch/index/mapper/ScaledFloatFieldMapper.java index 5770c91cfdb7e..07ee5b5dc6243 100644 --- a/modules/mapper-extras/src/main/java/org/elasticsearch/index/mapper/ScaledFloatFieldMapper.java +++ b/modules/mapper-extras/src/main/java/org/elasticsearch/index/mapper/ScaledFloatFieldMapper.java @@ -39,6 +39,7 @@ import org.elasticsearch.common.xcontent.XContentBuilder; import org.elasticsearch.common.xcontent.XContentParser; import org.elasticsearch.common.xcontent.XContentParser.Token; +import org.elasticsearch.common.xcontent.support.XContentMapValues; import org.elasticsearch.index.Index; import org.elasticsearch.index.IndexSettings; import org.elasticsearch.index.fielddata.AtomicNumericFieldData; @@ -157,10 +158,10 @@ public Mapper.Builder parse(String name, Map node, builder.nullValue(ScaledFloatFieldMapper.parse(propNode)); iterator.remove(); } else if (propName.equals("ignore_malformed")) { - builder.ignoreMalformed(TypeParsers.nodeBooleanValue(name, "ignore_malformed", propNode, parserContext)); + builder.ignoreMalformed(XContentMapValues.nodeBooleanValue(propNode, name + ".ignore_malformed")); iterator.remove(); } else if (propName.equals("coerce")) { - builder.coerce(TypeParsers.nodeBooleanValue(name, "coerce", propNode, parserContext)); + builder.coerce(XContentMapValues.nodeBooleanValue(propNode, name + ".coerce")); iterator.remove(); } else if (propName.equals("scaling_factor")) { builder.scalingFactor(ScaledFloatFieldMapper.parse(propNode)); diff --git a/modules/parent-join/src/main/java/org/elasticsearch/join/aggregations/ChildrenAggregationBuilder.java b/modules/parent-join/src/main/java/org/elasticsearch/join/aggregations/ChildrenAggregationBuilder.java index a14a7a35c85ec..7f22acff2fc2f 100644 --- a/modules/parent-join/src/main/java/org/elasticsearch/join/aggregations/ChildrenAggregationBuilder.java +++ b/modules/parent-join/src/main/java/org/elasticsearch/join/aggregations/ChildrenAggregationBuilder.java @@ -28,7 +28,6 @@ import org.elasticsearch.index.fielddata.plain.SortedSetDVOrdinalsIndexFieldData; import org.elasticsearch.index.mapper.DocumentMapper; import org.elasticsearch.index.mapper.MappedFieldType; -import org.elasticsearch.index.mapper.ParentFieldMapper; import org.elasticsearch.join.mapper.ParentIdFieldMapper; import org.elasticsearch.join.mapper.ParentJoinFieldMapper; import org.elasticsearch.search.aggregations.AggregationBuilder; @@ -109,11 +108,7 @@ protected void innerWriteTo(StreamOutput out) throws IOException { @Override protected ValuesSourceConfig resolveConfig(SearchContext context) { ValuesSourceConfig config = new ValuesSourceConfig<>(ValuesSourceType.BYTES); - if (context.mapperService().getIndexSettings().isSingleType()) { - joinFieldResolveConfig(context, config); - } else { - parentFieldResolveConfig(context, config); - } + joinFieldResolveConfig(context, config); return config; } @@ -131,30 +126,6 @@ private void joinFieldResolveConfig(SearchContext context, ValuesSourceConfig config) { - DocumentMapper childDocMapper = context.mapperService().documentMapper(childType); - if (childDocMapper != null) { - ParentFieldMapper parentFieldMapper = childDocMapper.parentFieldMapper(); - if (!parentFieldMapper.active()) { - throw new IllegalArgumentException("[children] no [_parent] field not configured that points to a parent type"); - } - String parentType = parentFieldMapper.type(); - DocumentMapper parentDocMapper = context.mapperService().documentMapper(parentType); - if (parentDocMapper != null) { - parentFilter = parentDocMapper.typeFilter(context.getQueryShardContext()); - childFilter = childDocMapper.typeFilter(context.getQueryShardContext()); - MappedFieldType parentFieldType = parentDocMapper.parentFieldMapper().getParentJoinFieldType(); - final SortedSetDVOrdinalsIndexFieldData fieldData = context.getForField(parentFieldType); - config.fieldContext(new FieldContext(parentFieldType.name(), fieldData, - parentFieldType)); - } else { - config.unmapped(true); - } - } else { - config.unmapped(true); - } - } - @Override protected XContentBuilder doXContentBody(XContentBuilder builder, Params params) throws IOException { builder.field(ParentToChildrenAggregator.TYPE_FIELD.getPreferredName(), childType); diff --git a/modules/parent-join/src/main/java/org/elasticsearch/join/mapper/ParentJoinFieldMapper.java b/modules/parent-join/src/main/java/org/elasticsearch/join/mapper/ParentJoinFieldMapper.java index d3164ae6a12da..3e6f8eac8148b 100644 --- a/modules/parent-join/src/main/java/org/elasticsearch/join/mapper/ParentJoinFieldMapper.java +++ b/modules/parent-join/src/main/java/org/elasticsearch/join/mapper/ParentJoinFieldMapper.java @@ -96,10 +96,6 @@ private static void checkIndexCompatibility(IndexSettings settings, String name) throw new IllegalStateException("cannot create join field [" + name + "] " + "for the partitioned index " + "[" + settings.getIndex().getName() + "]"); } - if (settings.isSingleType() == false) { - throw new IllegalStateException("cannot create join field [" + name + "] " + - "on multi-types index [" + settings.getIndex().getName() + "]"); - } } private static void checkObjectOrNested(ContentPath path, String name) { diff --git a/modules/parent-join/src/main/java/org/elasticsearch/join/query/HasChildQueryBuilder.java b/modules/parent-join/src/main/java/org/elasticsearch/join/query/HasChildQueryBuilder.java index 0577aa01ebd8f..ebfeb5ab01931 100644 --- a/modules/parent-join/src/main/java/org/elasticsearch/join/query/HasChildQueryBuilder.java +++ b/modules/parent-join/src/main/java/org/elasticsearch/join/query/HasChildQueryBuilder.java @@ -37,9 +37,7 @@ import org.elasticsearch.common.xcontent.XContentParser; import org.elasticsearch.index.fielddata.IndexOrdinalsFieldData; import org.elasticsearch.index.fielddata.plain.SortedSetDVOrdinalsIndexFieldData; -import org.elasticsearch.index.mapper.DocumentMapper; import org.elasticsearch.index.mapper.MappedFieldType; -import org.elasticsearch.index.mapper.ParentFieldMapper; import org.elasticsearch.index.query.AbstractQueryBuilder; import org.elasticsearch.index.query.InnerHitBuilder; import org.elasticsearch.index.query.InnerHitContextBuilder; @@ -306,14 +304,6 @@ public String getWriteableName() { @Override protected Query doToQuery(QueryShardContext context) throws IOException { - if (context.getIndexSettings().isSingleType()) { - return joinFieldDoToQuery(context); - } else { - return parentFieldDoToQuery(context); - } - } - - private Query joinFieldDoToQuery(QueryShardContext context) throws IOException { ParentJoinFieldMapper joinFieldMapper = ParentJoinFieldMapper.getMapper(context.getMapperService()); if (joinFieldMapper == null) { if (ignoreUnmapped) { @@ -342,44 +332,6 @@ private Query joinFieldDoToQuery(QueryShardContext context) throws IOException { } } - private Query parentFieldDoToQuery(QueryShardContext context) throws IOException { - Query innerQuery; - final String[] previousTypes = context.getTypes(); - context.setTypes(type); - try { - innerQuery = query.toQuery(context); - } finally { - context.setTypes(previousTypes); - } - DocumentMapper childDocMapper = context.getMapperService().documentMapper(type); - if (childDocMapper == null) { - if (ignoreUnmapped) { - return new MatchNoDocsQuery(); - } else { - throw new QueryShardException(context, "[" + NAME + "] no mapping found for type [" + type + "]"); - } - } - ParentFieldMapper parentFieldMapper = childDocMapper.parentFieldMapper(); - if (parentFieldMapper.active() == false) { - throw new QueryShardException(context, "[" + NAME + "] _parent field has no parent type configured"); - } - String parentType = parentFieldMapper.type(); - DocumentMapper parentDocMapper = context.getMapperService().documentMapper(parentType); - if (parentDocMapper == null) { - throw new QueryShardException(context, - "[" + NAME + "] Type [" + type + "] points to a non existent parent type [" + parentType + "]"); - } - - // wrap the query with type query - innerQuery = Queries.filtered(innerQuery, childDocMapper.typeFilter(context)); - - String joinField = ParentFieldMapper.joinField(parentType); - final MappedFieldType parentFieldType = parentDocMapper.parentFieldMapper().getParentJoinFieldType(); - final SortedSetDVOrdinalsIndexFieldData fieldData = context.getForField(parentFieldType); - return new LateParsingQuery(parentDocMapper.typeFilter(context), innerQuery, minChildren(), maxChildren(), - joinField, scoreMode, fieldData, context.getSearchSimilarity()); - } - /** * A query that rewrites into another query using * {@link JoinUtil#createJoinQuery(String, Query, Query, IndexSearcher, ScoreMode, OrdinalMap, int, int)} diff --git a/modules/parent-join/src/main/java/org/elasticsearch/join/query/HasParentQueryBuilder.java b/modules/parent-join/src/main/java/org/elasticsearch/join/query/HasParentQueryBuilder.java index 5e2dd4206f2f7..aca5f4a56d393 100644 --- a/modules/parent-join/src/main/java/org/elasticsearch/join/query/HasParentQueryBuilder.java +++ b/modules/parent-join/src/main/java/org/elasticsearch/join/query/HasParentQueryBuilder.java @@ -18,8 +18,6 @@ */ package org.elasticsearch.join.query; -import org.apache.lucene.search.BooleanClause; -import org.apache.lucene.search.BooleanQuery; import org.apache.lucene.search.MatchNoDocsQuery; import org.apache.lucene.search.Query; import org.apache.lucene.search.join.ScoreMode; @@ -32,9 +30,7 @@ import org.elasticsearch.common.xcontent.XContentBuilder; import org.elasticsearch.common.xcontent.XContentParser; import org.elasticsearch.index.fielddata.plain.SortedSetDVOrdinalsIndexFieldData; -import org.elasticsearch.index.mapper.DocumentMapper; import org.elasticsearch.index.mapper.MappedFieldType; -import org.elasticsearch.index.mapper.ParentFieldMapper; import org.elasticsearch.index.query.AbstractQueryBuilder; import org.elasticsearch.index.query.InnerHitBuilder; import org.elasticsearch.index.query.InnerHitContextBuilder; @@ -47,10 +43,8 @@ import java.io.IOException; import java.util.HashMap; -import java.util.HashSet; import java.util.Map; import java.util.Objects; -import java.util.Set; /** * Builder for the 'has_parent' query. @@ -173,14 +167,6 @@ public boolean ignoreUnmapped() { @Override protected Query doToQuery(QueryShardContext context) throws IOException { - if (context.getIndexSettings().isSingleType()) { - return joinFieldDoToQuery(context); - } else { - return parentFieldDoToQuery(context); - } - } - - private Query joinFieldDoToQuery(QueryShardContext context) throws IOException { ParentJoinFieldMapper joinFieldMapper = ParentJoinFieldMapper.getMapper(context.getMapperService()); if (joinFieldMapper == null) { if (ignoreUnmapped) { @@ -210,65 +196,6 @@ private Query joinFieldDoToQuery(QueryShardContext context) throws IOException { } } - private Query parentFieldDoToQuery(QueryShardContext context) throws IOException { - Query innerQuery; - String[] previousTypes = context.getTypes(); - context.setTypes(type); - try { - innerQuery = query.toQuery(context); - } finally { - context.setTypes(previousTypes); - } - - DocumentMapper parentDocMapper = context.documentMapper(type); - if (parentDocMapper == null) { - if (ignoreUnmapped) { - return new MatchNoDocsQuery(); - } else { - throw new QueryShardException(context, - "[" + NAME + "] query configured 'parent_type' [" + type + "] is not a valid type"); - } - } - - Set childTypes = new HashSet<>(); - for (DocumentMapper documentMapper : context.getMapperService().docMappers(false)) { - ParentFieldMapper parentFieldMapper = documentMapper.parentFieldMapper(); - if (parentFieldMapper.active() && type.equals(parentFieldMapper.type())) { - childTypes.add(documentMapper.type()); - } - } - if (childTypes.isEmpty()) { - throw new QueryShardException(context, "[" + NAME + "] no child types found for type [" + type + "]"); - } - - Query childrenQuery; - if (childTypes.size() == 1) { - DocumentMapper documentMapper = context.getMapperService().documentMapper(childTypes.iterator().next()); - childrenQuery = documentMapper.typeFilter(context); - } else { - BooleanQuery.Builder childrenFilter = new BooleanQuery.Builder(); - for (String childrenTypeStr : childTypes) { - DocumentMapper documentMapper = context.getMapperService().documentMapper(childrenTypeStr); - childrenFilter.add(documentMapper.typeFilter(context), BooleanClause.Occur.SHOULD); - } - childrenQuery = childrenFilter.build(); - } - - // wrap the query with type query - innerQuery = Queries.filtered(innerQuery, parentDocMapper.typeFilter(context)); - - final MappedFieldType parentType = parentDocMapper.parentFieldMapper().getParentJoinFieldType(); - final SortedSetDVOrdinalsIndexFieldData fieldData = context.getForField(parentType); - return new HasChildQueryBuilder.LateParsingQuery(childrenQuery, - innerQuery, - HasChildQueryBuilder.DEFAULT_MIN_CHILDREN, - HasChildQueryBuilder.DEFAULT_MAX_CHILDREN, - ParentFieldMapper.joinField(type), - score ? ScoreMode.Max : ScoreMode.None, - fieldData, - context.getSearchSimilarity()); - } - @Override protected void doXContent(XContentBuilder builder, Params params) throws IOException { builder.startObject(NAME); diff --git a/modules/parent-join/src/main/java/org/elasticsearch/join/query/ParentChildInnerHitContextBuilder.java b/modules/parent-join/src/main/java/org/elasticsearch/join/query/ParentChildInnerHitContextBuilder.java index b2c09b5cbdbe4..6593c7efb9fab 100644 --- a/modules/parent-join/src/main/java/org/elasticsearch/join/query/ParentChildInnerHitContextBuilder.java +++ b/modules/parent-join/src/main/java/org/elasticsearch/join/query/ParentChildInnerHitContextBuilder.java @@ -21,13 +21,9 @@ import org.apache.lucene.index.LeafReaderContext; import org.apache.lucene.index.ReaderUtil; import org.apache.lucene.index.SortedDocValues; -import org.apache.lucene.index.Term; import org.apache.lucene.search.BooleanClause; import org.apache.lucene.search.BooleanQuery; -import org.apache.lucene.search.DocValuesTermsQuery; -import org.apache.lucene.search.MatchNoDocsQuery; import org.apache.lucene.search.Query; -import org.apache.lucene.search.TermQuery; import org.apache.lucene.search.TopDocs; import org.apache.lucene.search.TopDocsCollector; import org.apache.lucene.search.TopFieldCollector; @@ -36,12 +32,8 @@ import org.apache.lucene.search.Weight; import org.apache.lucene.util.BytesRef; import org.elasticsearch.ExceptionsHelper; -import org.elasticsearch.common.document.DocumentField; import org.elasticsearch.common.lucene.Lucene; -import org.elasticsearch.index.mapper.DocumentMapper; import org.elasticsearch.index.mapper.IdFieldMapper; -import org.elasticsearch.index.mapper.MapperService; -import org.elasticsearch.index.mapper.ParentFieldMapper; import org.elasticsearch.index.query.InnerHitBuilder; import org.elasticsearch.index.query.InnerHitContextBuilder; import org.elasticsearch.index.query.QueryBuilder; @@ -70,15 +62,7 @@ class ParentChildInnerHitContextBuilder extends InnerHitContextBuilder { } @Override - protected void doBuild(SearchContext parentSearchContext, InnerHitsContext innerHitsContext) throws IOException { - if (parentSearchContext.mapperService().getIndexSettings().isSingleType()) { - handleJoinFieldInnerHits(parentSearchContext, innerHitsContext); - } else { - handleParentFieldInnerHits(parentSearchContext, innerHitsContext); - } - } - - private void handleJoinFieldInnerHits(SearchContext context, InnerHitsContext innerHitsContext) throws IOException { + protected void doBuild(SearchContext context, InnerHitsContext innerHitsContext) throws IOException { QueryShardContext queryShardContext = context.getQueryShardContext(); ParentJoinFieldMapper joinFieldMapper = ParentJoinFieldMapper.getMapper(context.mapperService()); if (joinFieldMapper != null) { @@ -94,24 +78,6 @@ private void handleJoinFieldInnerHits(SearchContext context, InnerHitsContext in } } - private void handleParentFieldInnerHits(SearchContext context, InnerHitsContext innerHitsContext) throws IOException { - QueryShardContext queryShardContext = context.getQueryShardContext(); - DocumentMapper documentMapper = queryShardContext.documentMapper(typeName); - if (documentMapper == null) { - if (innerHitBuilder.isIgnoreUnmapped() == false) { - throw new IllegalStateException("[" + query.getName() + "] no mapping found for type [" + typeName + "]"); - } else { - return; - } - } - String name = innerHitBuilder.getName() != null ? innerHitBuilder.getName() : documentMapper.type(); - ParentChildInnerHitSubContext parentChildInnerHits = new ParentChildInnerHitSubContext( - name, context, queryShardContext.getMapperService(), documentMapper - ); - setupInnerHitsContext(queryShardContext, parentChildInnerHits); - innerHitsContext.addInnerHitDefinition(parentChildInnerHits); - } - static final class JoinFieldInnerHitSubContext extends InnerHitsContext.InnerHitSubContext { private final String typeName; private final boolean fetchChildInnerHits; @@ -206,85 +172,4 @@ private String getSortedDocValue(String field, SearchContext context, int docId) } - static final class ParentChildInnerHitSubContext extends InnerHitsContext.InnerHitSubContext { - private final MapperService mapperService; - private final DocumentMapper documentMapper; - - ParentChildInnerHitSubContext(String name, SearchContext context, MapperService mapperService, DocumentMapper documentMapper) { - super(name, context); - this.mapperService = mapperService; - this.documentMapper = documentMapper; - } - - @Override - public TopDocs[] topDocs(SearchHit[] hits) throws IOException { - Weight innerHitQueryWeight = createInnerHitQueryWeight(); - TopDocs[] result = new TopDocs[hits.length]; - for (int i = 0; i < hits.length; i++) { - SearchHit hit = hits[i]; - final Query hitQuery; - if (isParentHit(hit)) { - String field = ParentFieldMapper.joinField(hit.getType()); - hitQuery = new DocValuesTermsQuery(field, hit.getId()); - } else if (isChildHit(hit)) { - DocumentMapper hitDocumentMapper = mapperService.documentMapper(hit.getType()); - final String parentType = hitDocumentMapper.parentFieldMapper().type(); - DocumentField parentField = hit.field(ParentFieldMapper.NAME); - if (parentField == null) { - throw new IllegalStateException("All children must have a _parent"); - } - Term uidTerm = context.mapperService().createUidTerm(parentType, parentField.getValue()); - if (uidTerm == null) { - hitQuery = new MatchNoDocsQuery("Missing type: " + parentType); - } else { - hitQuery = new TermQuery(uidTerm); - } - } else { - result[i] = Lucene.EMPTY_TOP_DOCS; - continue; - } - - BooleanQuery q = new BooleanQuery.Builder() - // Only include docs that have the current hit as parent - .add(hitQuery, BooleanClause.Occur.FILTER) - // Only include docs that have this inner hits type - .add(documentMapper.typeFilter(context.getQueryShardContext()), BooleanClause.Occur.FILTER) - .build(); - Weight weight = context.searcher().createNormalizedWeight(q, false); - if (size() == 0) { - TotalHitCountCollector totalHitCountCollector = new TotalHitCountCollector(); - for (LeafReaderContext ctx : context.searcher().getIndexReader().leaves()) { - intersect(weight, innerHitQueryWeight, totalHitCountCollector, ctx); - } - result[i] = new TopDocs(totalHitCountCollector.getTotalHits(), Lucene.EMPTY_SCORE_DOCS, 0); - } else { - int topN = Math.min(from() + size(), context.searcher().getIndexReader().maxDoc()); - TopDocsCollector topDocsCollector; - if (sort() != null) { - topDocsCollector = TopFieldCollector.create(sort().sort, topN, true, trackScores(), trackScores(), true); - } else { - topDocsCollector = TopScoreDocCollector.create(topN); - } - try { - for (LeafReaderContext ctx : context.searcher().getIndexReader().leaves()) { - intersect(weight, innerHitQueryWeight, topDocsCollector, ctx); - } - } finally { - clearReleasables(Lifetime.COLLECTION); - } - result[i] = topDocsCollector.topDocs(from(), size()); - } - } - return result; - } - - private boolean isParentHit(SearchHit hit) { - return hit.getType().equals(documentMapper.parentFieldMapper().type()); - } - - private boolean isChildHit(SearchHit hit) { - DocumentMapper hitDocumentMapper = mapperService.documentMapper(hit.getType()); - return documentMapper.type().equals(hitDocumentMapper.parentFieldMapper().type()); - } - } } diff --git a/modules/parent-join/src/main/java/org/elasticsearch/join/query/ParentIdQueryBuilder.java b/modules/parent-join/src/main/java/org/elasticsearch/join/query/ParentIdQueryBuilder.java index 25a380e566a42..bc8820c597790 100644 --- a/modules/parent-join/src/main/java/org/elasticsearch/join/query/ParentIdQueryBuilder.java +++ b/modules/parent-join/src/main/java/org/elasticsearch/join/query/ParentIdQueryBuilder.java @@ -19,22 +19,16 @@ package org.elasticsearch.join.query; -import org.apache.lucene.index.Term; import org.apache.lucene.search.BooleanClause; import org.apache.lucene.search.BooleanQuery; -import org.apache.lucene.search.DocValuesTermsQuery; import org.apache.lucene.search.MatchNoDocsQuery; import org.apache.lucene.search.Query; -import org.apache.lucene.search.TermQuery; import org.elasticsearch.common.ParseField; import org.elasticsearch.common.ParsingException; import org.elasticsearch.common.io.stream.StreamInput; import org.elasticsearch.common.io.stream.StreamOutput; import org.elasticsearch.common.xcontent.XContentBuilder; import org.elasticsearch.common.xcontent.XContentParser; -import org.elasticsearch.index.mapper.DocumentMapper; -import org.elasticsearch.index.mapper.ParentFieldMapper; -import org.elasticsearch.index.mapper.TypeFieldMapper; import org.elasticsearch.index.query.AbstractQueryBuilder; import org.elasticsearch.index.query.QueryShardContext; import org.elasticsearch.index.query.QueryShardException; @@ -159,11 +153,6 @@ public static ParentIdQueryBuilder fromXContent(XContentParser parser) throws IO @Override protected Query doToQuery(QueryShardContext context) throws IOException { - if (context.getIndexSettings().isSingleType() == false) { - // BWC for indices with multiple types - return doToQueryBWC(context); - } - ParentJoinFieldMapper joinFieldMapper = ParentJoinFieldMapper.getMapper(context.getMapperService()); if (joinFieldMapper == null) { if (ignoreUnmapped) { @@ -188,32 +177,6 @@ protected Query doToQuery(QueryShardContext context) throws IOException { .build(); } - /** - * Creates parent_id query from a {@link ParentFieldMapper} - * Only used for BWC with multi-types indices - */ - private Query doToQueryBWC(QueryShardContext context) throws IOException { - DocumentMapper childDocMapper = context.getMapperService().documentMapper(type); - if (childDocMapper == null) { - if (ignoreUnmapped) { - return new MatchNoDocsQuery(); - } else { - throw new QueryShardException(context, "[" + NAME + "] no mapping found for type [" + type + "]"); - } - } - ParentFieldMapper parentFieldMapper = childDocMapper.parentFieldMapper(); - if (parentFieldMapper.active() == false) { - throw new QueryShardException(context, "[" + NAME + "] _parent field has no parent type configured"); - } - String fieldName = ParentFieldMapper.joinField(parentFieldMapper.type()); - - return new BooleanQuery.Builder() - .add(new DocValuesTermsQuery(fieldName, id), BooleanClause.Occur.MUST) - // Need to take child type into account, otherwise a child doc of different type with the same id could match - .add(new TermQuery(new Term(TypeFieldMapper.NAME, type)), BooleanClause.Occur.FILTER) - .build(); - } - @Override protected boolean doEquals(ParentIdQueryBuilder that) { return Objects.equals(type, that.type) diff --git a/modules/parent-join/src/test/java/org/elasticsearch/join/aggregations/ChildrenIT.java b/modules/parent-join/src/test/java/org/elasticsearch/join/aggregations/ChildrenIT.java index 12bb2f700e394..869019ac0ffce 100644 --- a/modules/parent-join/src/test/java/org/elasticsearch/join/aggregations/ChildrenIT.java +++ b/modules/parent-join/src/test/java/org/elasticsearch/join/aggregations/ChildrenIT.java @@ -19,7 +19,6 @@ package org.elasticsearch.join.aggregations; import org.apache.lucene.search.join.ScoreMode; -import org.elasticsearch.Version; import org.elasticsearch.action.index.IndexRequestBuilder; import org.elasticsearch.action.search.SearchResponse; import org.elasticsearch.action.update.UpdateResponse; @@ -68,20 +67,12 @@ public class ChildrenIT extends ParentChildTestCase { @Before public void setupCluster() throws Exception { categoryToControl.clear(); - if (legacy()) { - assertAcked( - prepareCreate("test") - .addMapping("article", "category", "type=keyword") - .addMapping("comment", "_parent", "type=article", "commenter", "type=keyword") - ); - } else { - assertAcked( - prepareCreate("test") - .addMapping("doc", - addFieldMappings(buildParentJoinFieldMappingFromSimplifiedDef("join_field", true, "article", "comment"), - "commenter", "keyword", "category", "keyword")) - ); - } + assertAcked( + prepareCreate("test") + .addMapping("doc", + addFieldMappings(buildParentJoinFieldMappingFromSimplifiedDef("join_field", true, "article", "comment"), + "commenter", "keyword", "category", "keyword")) + ); List requests = new ArrayList<>(); String[] uniqueCategories = new String[randomIntBetween(1, 25)]; @@ -189,7 +180,7 @@ public void testParentWithMultipleBuckets() throws Exception { .setQuery(matchQuery("randomized", false)) .addAggregation( terms("category").field("category").size(10000).subAggregation( - children("to_comment", "comment").subAggregation(topHits("top_comments").sort("_uid", SortOrder.ASC)) + children("to_comment", "comment").subAggregation(topHits("top_comments").sort("_id", SortOrder.ASC)) ) ).get(); assertSearchResponse(searchResponse); @@ -244,20 +235,12 @@ public void testParentWithMultipleBuckets() throws Exception { public void testWithDeletes() throws Exception { String indexName = "xyz"; - if (legacy()) { - assertAcked( - prepareCreate(indexName) - .addMapping("parent") - .addMapping("child", "_parent", "type=parent", "count", "type=long") - ); - } else { - assertAcked( - prepareCreate(indexName) - .addMapping("doc", - addFieldMappings(buildParentJoinFieldMappingFromSimplifiedDef("join_field", true, "parent", "child"), - "name", "keyword")) - ); - } + assertAcked( + prepareCreate(indexName) + .addMapping("doc", + addFieldMappings(buildParentJoinFieldMappingFromSimplifiedDef("join_field", true, "parent", "child"), + "name", "keyword")) + ); List requests = new ArrayList<>(); requests.add(createIndexRequest(indexName, "parent", "1", null)); @@ -286,19 +269,11 @@ public void testWithDeletes() throws Exception { * the updates cause that. */ UpdateResponse updateResponse; - if (legacy()) { - updateResponse = client().prepareUpdate(indexName, "child", idToUpdate) - .setParent("1") - .setDoc(Requests.INDEX_CONTENT_TYPE, "count", 1) - .setDetectNoop(false) - .get(); - } else { - updateResponse = client().prepareUpdate(indexName, "doc", idToUpdate) - .setRouting("1") - .setDoc(Requests.INDEX_CONTENT_TYPE, "count", 1) - .setDetectNoop(false) - .get(); - } + updateResponse = client().prepareUpdate(indexName, "doc", idToUpdate) + .setRouting("1") + .setDoc(Requests.INDEX_CONTENT_TYPE, "count", 1) + .setDetectNoop(false) + .get(); assertThat(updateResponse.getVersion(), greaterThan(1L)); refresh(); } @@ -320,26 +295,15 @@ public void testPostCollection() throws Exception { String indexName = "prodcatalog"; String masterType = "masterprod"; String childType = "variantsku"; - if (legacy()) { - assertAcked( - prepareCreate(indexName) - .setSettings(Settings.builder().put(IndexMetaData.SETTING_NUMBER_OF_SHARDS, 1) - .put(IndexMetaData.SETTING_NUMBER_OF_REPLICAS, 0) - .put("index.version.created", Version.V_5_6_0)) // multi type - .addMapping(masterType, "brand", "type=text", "name", "type=keyword", "material", "type=text") - .addMapping(childType, "_parent", "type=masterprod", "color", "type=keyword", "size", "type=keyword") - ); - } else { - assertAcked( - prepareCreate(indexName) - .setSettings(Settings.builder().put(IndexMetaData.SETTING_NUMBER_OF_SHARDS, 1) - .put(IndexMetaData.SETTING_NUMBER_OF_REPLICAS, 0)) - .addMapping("doc", - addFieldMappings(buildParentJoinFieldMappingFromSimplifiedDef("join_field", true, - masterType, childType), - "brand", "text", "name", "keyword", "material", "text", "color", "keyword", "size", "keyword")) - ); - } + assertAcked( + prepareCreate(indexName) + .setSettings(Settings.builder().put(IndexMetaData.SETTING_NUMBER_OF_SHARDS, 1) + .put(IndexMetaData.SETTING_NUMBER_OF_REPLICAS, 0)) + .addMapping("doc", + addFieldMappings(buildParentJoinFieldMappingFromSimplifiedDef("join_field", true, + masterType, childType), + "brand", "text", "name", "keyword", "material", "text", "color", "keyword", "size", "keyword")) + ); List requests = new ArrayList<>(); requests.add(createIndexRequest(indexName, masterType, "1", null, "brand", "Levis", "name", @@ -396,25 +360,13 @@ public void testHierarchicalChildrenAggs() { String grandParentType = "continent"; String parentType = "country"; String childType = "city"; - if (legacy()) { - assertAcked( - prepareCreate(indexName) - .setSettings(Settings.builder() - .put("index.version.created", Version.V_5_6_0) // multi type - ).addMapping(grandParentType, "name", "type=keyword") - .addMapping(parentType, "_parent", "type=" + grandParentType) - .addMapping(childType, "_parent", "type=" + parentType) - - ); - } else { - assertAcked( - prepareCreate(indexName) - .addMapping("doc", - addFieldMappings(buildParentJoinFieldMappingFromSimplifiedDef("join_field", true, - grandParentType, parentType, parentType, childType), - "name", "keyword")) - ); - } + assertAcked( + prepareCreate(indexName) + .addMapping("doc", + addFieldMappings(buildParentJoinFieldMappingFromSimplifiedDef("join_field", true, + grandParentType, parentType, parentType, childType), + "name", "keyword")) + ); createIndexRequest(indexName, grandParentType, "1", null, "name", "europe").get(); createIndexRequest(indexName, parentType, "2", "1", "name", "belgium").get(); @@ -451,21 +403,13 @@ public void testPostCollectAllLeafReaders() throws Exception { // Before we only evaluated segments that yielded matches in 'towns' and 'parent_names' aggs, which caused // us to miss to evaluate child docs in segments we didn't have parent matches for. - if (legacy()) { - assertAcked( - prepareCreate("index") - .addMapping("parentType", "name", "type=keyword", "town", "type=keyword") - .addMapping("childType", "_parent", "type=parentType", "name", "type=keyword", "age", "type=integer") - ); - } else { - assertAcked( - prepareCreate("index") - .addMapping("doc", - addFieldMappings(buildParentJoinFieldMappingFromSimplifiedDef("join_field", true, - "parentType", "childType"), - "name", "keyword", "town", "keyword", "age", "integer")) - ); - } + assertAcked( + prepareCreate("index") + .addMapping("doc", + addFieldMappings(buildParentJoinFieldMappingFromSimplifiedDef("join_field", true, + "parentType", "childType"), + "name", "keyword", "town", "keyword", "age", "integer")) + ); List requests = new ArrayList<>(); requests.add(createIndexRequest("index", "parentType", "1", null, "name", "Bob", "town", "Memphis")); requests.add(createIndexRequest("index", "parentType", "2", null, "name", "Alice", "town", "Chicago")); diff --git a/modules/parent-join/src/test/java/org/elasticsearch/join/aggregations/LegacyChildrenIT.java b/modules/parent-join/src/test/java/org/elasticsearch/join/aggregations/LegacyChildrenIT.java deleted file mode 100644 index ecf4d06f325e8..0000000000000 --- a/modules/parent-join/src/test/java/org/elasticsearch/join/aggregations/LegacyChildrenIT.java +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Licensed to Elasticsearch under one or more contributor - * license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright - * ownership. Elasticsearch licenses this file to you under - * the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.elasticsearch.join.aggregations; - -public class LegacyChildrenIT extends ChildrenIT { - - @Override - protected boolean legacy() { - return true; - } -} diff --git a/modules/parent-join/src/test/java/org/elasticsearch/join/aggregations/ParentToChildrenAggregatorTests.java b/modules/parent-join/src/test/java/org/elasticsearch/join/aggregations/ParentToChildrenAggregatorTests.java index e60c1a58bc617..d6557256ce002 100644 --- a/modules/parent-join/src/test/java/org/elasticsearch/join/aggregations/ParentToChildrenAggregatorTests.java +++ b/modules/parent-join/src/test/java/org/elasticsearch/join/aggregations/ParentToChildrenAggregatorTests.java @@ -39,12 +39,12 @@ import org.elasticsearch.common.settings.Settings; import org.elasticsearch.index.Index; import org.elasticsearch.index.mapper.ContentPath; +import org.elasticsearch.index.mapper.IdFieldMapper; import org.elasticsearch.index.mapper.MappedFieldType; import org.elasticsearch.index.mapper.Mapper; import org.elasticsearch.index.mapper.MapperService; import org.elasticsearch.index.mapper.NumberFieldMapper; import org.elasticsearch.index.mapper.Uid; -import org.elasticsearch.index.mapper.UidFieldMapper; import org.elasticsearch.index.shard.ShardId; import org.elasticsearch.join.mapper.MetaJoinFieldMapper; import org.elasticsearch.join.mapper.ParentJoinFieldMapper; @@ -109,7 +109,7 @@ public void testParentChild() throws IOException { }); for (String parent : expectedParentChildRelations.keySet()) { - testCase(new TermInSetQuery(UidFieldMapper.NAME, new BytesRef(Uid.createUid(PARENT_TYPE, parent))), indexSearcher, child -> { + testCase(new TermInSetQuery(IdFieldMapper.NAME, Uid.encodeId(parent)), indexSearcher, child -> { assertEquals((long) expectedParentChildRelations.get(parent).v1(), child.getDocCount()); assertEquals(expectedParentChildRelations.get(parent).v2(), ((InternalMin) child.getAggregations().get("in_child")).getValue(), Double.MIN_VALUE); @@ -139,7 +139,7 @@ private static Map> setupIndex(RandomIndexWriter private static List createParentDocument(String id) { return Arrays.asList( - new StringField(UidFieldMapper.NAME, Uid.createUid(PARENT_TYPE, id), Field.Store.NO), + new StringField(IdFieldMapper.NAME, Uid.encodeId(id), Field.Store.NO), new StringField("join_field", PARENT_TYPE, Field.Store.NO), createJoinField(PARENT_TYPE, id) ); @@ -147,7 +147,7 @@ private static List createParentDocument(String id) { private static List createChildDocument(String childId, String parentId, int value) { return Arrays.asList( - new StringField(UidFieldMapper.NAME, Uid.createUid(CHILD_TYPE, childId), Field.Store.NO), + new StringField(IdFieldMapper.NAME, Uid.encodeId(childId), Field.Store.NO), new StringField("join_field", CHILD_TYPE, Field.Store.NO), createJoinField(PARENT_TYPE, parentId), new SortedNumericDocValuesField("number", value) diff --git a/modules/parent-join/src/test/java/org/elasticsearch/join/query/ChildQuerySearchIT.java b/modules/parent-join/src/test/java/org/elasticsearch/join/query/ChildQuerySearchIT.java index 180c1ec9b1388..247d8aa7b2480 100644 --- a/modules/parent-join/src/test/java/org/elasticsearch/join/query/ChildQuerySearchIT.java +++ b/modules/parent-join/src/test/java/org/elasticsearch/join/query/ChildQuerySearchIT.java @@ -69,7 +69,6 @@ import static org.elasticsearch.index.query.QueryBuilders.prefixQuery; import static org.elasticsearch.index.query.QueryBuilders.queryStringQuery; import static org.elasticsearch.index.query.QueryBuilders.termQuery; -import static org.elasticsearch.index.query.QueryBuilders.termsQuery; import static org.elasticsearch.index.query.functionscore.ScoreFunctionBuilders.fieldValueFactorFunction; import static org.elasticsearch.index.query.functionscore.ScoreFunctionBuilders.weightFactorFunction; import static org.elasticsearch.join.query.JoinQueryBuilders.hasChildQuery; @@ -88,23 +87,10 @@ public class ChildQuerySearchIT extends ParentChildTestCase { - public void testSelfReferentialIsForbidden() { - IllegalArgumentException e = expectThrows(IllegalArgumentException.class, () -> - prepareCreate("test").addMapping("type", "_parent", "type=type").get()); - assertThat(e.getMessage(), equalTo("The [_parent.type] option can't point to the same type")); - } - public void testMultiLevelChild() throws Exception { - if (legacy()) { - assertAcked(prepareCreate("test") - .addMapping("parent") - .addMapping("child", "_parent", "type=parent") - .addMapping("grandchild", "_parent", "type=child")); - } else { - assertAcked(prepareCreate("test") - .addMapping("doc", buildParentJoinFieldMappingFromSimplifiedDef("join_field", true, - "parent", "child", "child", "grandchild"))); - } + assertAcked(prepareCreate("test") + .addMapping("doc", buildParentJoinFieldMappingFromSimplifiedDef("join_field", true, + "parent", "child", "child", "grandchild"))); ensureGreen(); createIndexRequest("test", "parent", "p1", null, "p_field", "p_value1").get(); @@ -159,14 +145,8 @@ public void testMultiLevelChild() throws Exception { // see #2744 public void test2744() throws IOException { - if (legacy()) { - assertAcked(prepareCreate("test") - .addMapping("foo") - .addMapping("test", "_parent", "type=foo")); - } else { - assertAcked(prepareCreate("test") - .addMapping("doc", buildParentJoinFieldMappingFromSimplifiedDef("join_field", true, "foo", "test"))); - } + assertAcked(prepareCreate("test") + .addMapping("doc", buildParentJoinFieldMappingFromSimplifiedDef("join_field", true, "foo", "test"))); ensureGreen(); // index simple data @@ -183,14 +163,8 @@ public void test2744() throws IOException { } public void testSimpleChildQuery() throws Exception { - if (legacy()) { - assertAcked(prepareCreate("test") - .addMapping("parent") - .addMapping("child", "_parent", "type=parent")); - } else { - assertAcked(prepareCreate("test") - .addMapping("doc", buildParentJoinFieldMappingFromSimplifiedDef("join_field", true, "parent", "child"))); - } + assertAcked(prepareCreate("test") + .addMapping("doc", buildParentJoinFieldMappingFromSimplifiedDef("join_field", true, "parent", "child"))); ensureGreen(); // index simple data @@ -204,57 +178,26 @@ public void testSimpleChildQuery() throws Exception { // TEST FETCHING _parent from child SearchResponse searchResponse; - if (legacy()) { - searchResponse = client().prepareSearch("test") - .setQuery(idsQuery("child").addIds("c1")).storedFields("_parent").get(); - assertNoFailures(searchResponse); - assertThat(searchResponse.getHits().getTotalHits(), equalTo(1L)); - assertThat(searchResponse.getHits().getAt(0).getId(), equalTo("c1")); - assertThat(searchResponse.getHits().getAt(0).field("_parent").getValue(), equalTo("p1")); - } else { - searchResponse = client().prepareSearch("test") - .setQuery(idsQuery("doc").addIds("c1")).get(); - assertNoFailures(searchResponse); - assertThat(searchResponse.getHits().getTotalHits(), equalTo(1L)); - assertThat(searchResponse.getHits().getAt(0).getId(), equalTo("c1")); - assertThat(extractValue("join_field.name", searchResponse.getHits().getAt(0).getSourceAsMap()), equalTo("child")); - assertThat(extractValue("join_field.parent", searchResponse.getHits().getAt(0).getSourceAsMap()), equalTo("p1")); - } + searchResponse = client().prepareSearch("test") + .setQuery(idsQuery("doc").addIds("c1")).get(); + assertNoFailures(searchResponse); + assertThat(searchResponse.getHits().getTotalHits(), equalTo(1L)); + assertThat(searchResponse.getHits().getAt(0).getId(), equalTo("c1")); + assertThat(extractValue("join_field.name", searchResponse.getHits().getAt(0).getSourceAsMap()), equalTo("child")); + assertThat(extractValue("join_field.parent", searchResponse.getHits().getAt(0).getSourceAsMap()), equalTo("p1")); // TEST matching on parent - if (legacy()) { - searchResponse = client().prepareSearch("test").setQuery(termQuery("_parent#parent", "p1")).storedFields("_parent").get(); - assertNoFailures(searchResponse); - assertThat(searchResponse.getHits().getTotalHits(), equalTo(2L)); - assertThat(searchResponse.getHits().getAt(0).getId(), anyOf(equalTo("c1"), equalTo("c2"))); - assertThat(searchResponse.getHits().getAt(0).field("_parent").getValue(), equalTo("p1")); - assertThat(searchResponse.getHits().getAt(1).getId(), anyOf(equalTo("c1"), equalTo("c2"))); - assertThat(searchResponse.getHits().getAt(1).field("_parent").getValue(), equalTo("p1")); - } else { - searchResponse = client().prepareSearch("test") - .setQuery(boolQuery().filter(termQuery("join_field#parent", "p1")).filter(termQuery("join_field", "child"))) - .get(); - assertNoFailures(searchResponse); - assertThat(searchResponse.getHits().getTotalHits(), equalTo(2L)); - assertThat(searchResponse.getHits().getAt(0).getId(), anyOf(equalTo("c1"), equalTo("c2"))); - assertThat(extractValue("join_field.name", searchResponse.getHits().getAt(0).getSourceAsMap()), equalTo("child")); - assertThat(extractValue("join_field.parent", searchResponse.getHits().getAt(0).getSourceAsMap()), equalTo("p1")); - assertThat(searchResponse.getHits().getAt(1).getId(), anyOf(equalTo("c1"), equalTo("c2"))); - assertThat(extractValue("join_field.name", searchResponse.getHits().getAt(1).getSourceAsMap()), equalTo("child")); - assertThat(extractValue("join_field.parent", searchResponse.getHits().getAt(1).getSourceAsMap()), equalTo("p1")); - } - - if (legacy()) { - searchResponse = client().prepareSearch("test").setQuery(queryStringQuery("_parent#parent:p1")).storedFields("_parent").get(); - assertNoFailures(searchResponse); - assertThat(searchResponse.getHits().getTotalHits(), equalTo(2L)); - assertThat(searchResponse.getHits().getAt(0).getId(), anyOf(equalTo("c1"), equalTo("c2"))); - assertThat(searchResponse.getHits().getAt(0).field("_parent").getValue(), equalTo("p1")); - assertThat(searchResponse.getHits().getAt(1).getId(), anyOf(equalTo("c1"), equalTo("c2"))); - assertThat(searchResponse.getHits().getAt(1).field("_parent").getValue(), equalTo("p1")); - } else { - // doesn't make sense for join field, because query string & term query om this field have no special logic. - } + searchResponse = client().prepareSearch("test") + .setQuery(boolQuery().filter(termQuery("join_field#parent", "p1")).filter(termQuery("join_field", "child"))) + .get(); + assertNoFailures(searchResponse); + assertThat(searchResponse.getHits().getTotalHits(), equalTo(2L)); + assertThat(searchResponse.getHits().getAt(0).getId(), anyOf(equalTo("c1"), equalTo("c2"))); + assertThat(extractValue("join_field.name", searchResponse.getHits().getAt(0).getSourceAsMap()), equalTo("child")); + assertThat(extractValue("join_field.parent", searchResponse.getHits().getAt(0).getSourceAsMap()), equalTo("p1")); + assertThat(searchResponse.getHits().getAt(1).getId(), anyOf(equalTo("c1"), equalTo("c2"))); + assertThat(extractValue("join_field.name", searchResponse.getHits().getAt(1).getSourceAsMap()), equalTo("child")); + assertThat(extractValue("join_field.parent", searchResponse.getHits().getAt(1).getSourceAsMap()), equalTo("p1")); // HAS CHILD searchResponse = client().prepareSearch("test").setQuery(randomHasChild("child", "c_field", "yellow")) @@ -290,14 +233,8 @@ public void testSimpleChildQuery() throws Exception { // Issue #3290 public void testCachingBugWithFqueryFilter() throws Exception { - if (legacy()) { - assertAcked(prepareCreate("test") - .addMapping("parent") - .addMapping("child", "_parent", "type=parent")); - } else { - assertAcked(prepareCreate("test") - .addMapping("doc", buildParentJoinFieldMappingFromSimplifiedDef("join_field", true, "parent", "child"))); - } + assertAcked(prepareCreate("test") + .addMapping("doc", buildParentJoinFieldMappingFromSimplifiedDef("join_field", true, "parent", "child"))); ensureGreen(); List builders = new ArrayList<>(); // index simple data @@ -334,14 +271,8 @@ public void testCachingBugWithFqueryFilter() throws Exception { } public void testHasParentFilter() throws Exception { - if (legacy()) { - assertAcked(prepareCreate("test") - .addMapping("parent") - .addMapping("child", "_parent", "type=parent")); - } else { - assertAcked(prepareCreate("test") - .addMapping("doc", buildParentJoinFieldMappingFromSimplifiedDef("join_field", true, "parent", "child"))); - } + assertAcked(prepareCreate("test") + .addMapping("doc", buildParentJoinFieldMappingFromSimplifiedDef("join_field", true, "parent", "child"))); ensureGreen(); Map> parentToChildren = new HashMap<>(); // Childless parent @@ -388,14 +319,8 @@ public void testHasParentFilter() throws Exception { } public void testSimpleChildQueryWithFlush() throws Exception { - if (legacy()) { - assertAcked(prepareCreate("test") - .addMapping("parent") - .addMapping("child", "_parent", "type=parent")); - } else { - assertAcked(prepareCreate("test") - .addMapping("doc", buildParentJoinFieldMappingFromSimplifiedDef("join_field", true, "parent", "child"))); - } + assertAcked(prepareCreate("test") + .addMapping("doc", buildParentJoinFieldMappingFromSimplifiedDef("join_field", true, "parent", "child"))); ensureGreen(); // index simple data with flushes, so we have many segments @@ -462,16 +387,10 @@ public void testSimpleChildQueryWithFlush() throws Exception { } public void testScopedFacet() throws Exception { - if (legacy()) { - assertAcked(prepareCreate("test") - .addMapping("parent") - .addMapping("child", "_parent", "type=parent", "c_field", "type=keyword")); - } else { - assertAcked(prepareCreate("test") - .addMapping("doc", - addFieldMappings(buildParentJoinFieldMappingFromSimplifiedDef("join_field", true, "parent", "child"), - "c_field", "keyword"))); - } + assertAcked(prepareCreate("test") + .addMapping("doc", + addFieldMappings(buildParentJoinFieldMappingFromSimplifiedDef("join_field", true, "parent", "child"), + "c_field", "keyword"))); ensureGreen(); // index simple data @@ -508,14 +427,8 @@ public void testScopedFacet() throws Exception { } public void testDeletedParent() throws Exception { - if (legacy()) { - assertAcked(prepareCreate("test") - .addMapping("parent") - .addMapping("child", "_parent", "type=parent")); - } else { - assertAcked(prepareCreate("test") - .addMapping("doc", buildParentJoinFieldMappingFromSimplifiedDef("join_field", true, "parent", "child"))); - } + assertAcked(prepareCreate("test") + .addMapping("doc", buildParentJoinFieldMappingFromSimplifiedDef("join_field", true, "parent", "child"))); ensureGreen(); // index simple data createIndexRequest("test", "parent", "p1", null, "p_field", "p_value1").get(); @@ -548,14 +461,8 @@ public void testDeletedParent() throws Exception { } public void testDfsSearchType() throws Exception { - if (legacy()) { - assertAcked(prepareCreate("test") - .addMapping("parent") - .addMapping("child", "_parent", "type=parent")); - } else { - assertAcked(prepareCreate("test") - .addMapping("doc", buildParentJoinFieldMappingFromSimplifiedDef("join_field", true, "parent", "child"))); - } + assertAcked(prepareCreate("test") + .addMapping("doc", buildParentJoinFieldMappingFromSimplifiedDef("join_field", true, "parent", "child"))); ensureGreen(); // index simple data @@ -581,20 +488,14 @@ public void testDfsSearchType() throws Exception { } public void testHasChildAndHasParentFailWhenSomeSegmentsDontContainAnyParentOrChildDocs() throws Exception { - if (legacy()) { - assertAcked(prepareCreate("test") - .addMapping("parent") - .addMapping("child", "_parent", "type=parent")); - } else { - assertAcked(prepareCreate("test") - .addMapping("doc", buildParentJoinFieldMappingFromSimplifiedDef("join_field", true, "parent", "child"))); - } + assertAcked(prepareCreate("test") + .addMapping("doc", buildParentJoinFieldMappingFromSimplifiedDef("join_field", true, "parent", "child"))); ensureGreen(); createIndexRequest("test", "parent", "1", null, "p_field", 1).get(); createIndexRequest("test", "child", "2", "1", "c_field", 1).get(); - client().prepareIndex("test", legacy() ? "type1" : "doc", "3").setSource("p_field", 1).get(); + client().prepareIndex("test", "doc", "3").setSource("p_field", 1).get(); refresh(); SearchResponse searchResponse = client().prepareSearch("test") @@ -609,14 +510,8 @@ public void testHasChildAndHasParentFailWhenSomeSegmentsDontContainAnyParentOrCh } public void testCountApiUsage() throws Exception { - if (legacy()) { - assertAcked(prepareCreate("test") - .addMapping("parent") - .addMapping("child", "_parent", "type=parent")); - } else { - assertAcked(prepareCreate("test") - .addMapping("doc", buildParentJoinFieldMappingFromSimplifiedDef("join_field", true, "parent", "child"))); - } + assertAcked(prepareCreate("test") + .addMapping("doc", buildParentJoinFieldMappingFromSimplifiedDef("join_field", true, "parent", "child"))); ensureGreen(); String parentId = "p1"; @@ -646,14 +541,8 @@ public void testCountApiUsage() throws Exception { } public void testExplainUsage() throws Exception { - if (legacy()) { - assertAcked(prepareCreate("test") - .addMapping("parent") - .addMapping("child", "_parent", "type=parent")); - } else { - assertAcked(prepareCreate("test") - .addMapping("doc", buildParentJoinFieldMappingFromSimplifiedDef("join_field", true, "parent", "child"))); - } + assertAcked(prepareCreate("test") + .addMapping("doc", buildParentJoinFieldMappingFromSimplifiedDef("join_field", true, "parent", "child"))); ensureGreen(); String parentId = "p1"; @@ -675,7 +564,7 @@ public void testExplainUsage() throws Exception { assertHitCount(searchResponse, 1L); assertThat(searchResponse.getHits().getAt(0).getExplanation().getDescription(), containsString("join value p1")); - ExplainResponse explainResponse = client().prepareExplain("test", legacy() ? "parent" : "doc", parentId) + ExplainResponse explainResponse = client().prepareExplain("test", "doc", parentId) .setQuery(hasChildQuery("child", termQuery("c_field", "1"), ScoreMode.Max)) .get(); assertThat(explainResponse.isExists(), equalTo(true)); @@ -716,23 +605,16 @@ List createDocBuilders() { } public void testScoreForParentChildQueriesWithFunctionScore() throws Exception { - if (legacy()) { - assertAcked(prepareCreate("test") - .addMapping("parent") - .addMapping("child", "_parent", "type=parent") - .addMapping("child1", "_parent", "type=parent")); - } else { - assertAcked(prepareCreate("test") - .addMapping("doc", jsonBuilder().startObject().startObject("doc").startObject("properties") - .startObject("join_field") - .field("type", "join") - .startObject("relations") - .field("parent", new String[] {"child", "child1"}) - .endObject() + assertAcked(prepareCreate("test") + .addMapping("doc", jsonBuilder().startObject().startObject("doc").startObject("properties") + .startObject("join_field") + .field("type", "join") + .startObject("relations") + .field("parent", new String[] {"child", "child1"}) .endObject() - .endObject().endObject().endObject() - )); - } + .endObject() + .endObject().endObject().endObject() + )); ensureGreen(); indexRandom(true, createDocBuilders().toArray(new IndexRequestBuilder[0])); @@ -816,14 +698,8 @@ public void testScoreForParentChildQueriesWithFunctionScore() throws Exception { // Issue #2536 public void testParentChildQueriesCanHandleNoRelevantTypesInIndex() throws Exception { - if (legacy()) { - assertAcked(prepareCreate("test") - .addMapping("parent") - .addMapping("child", "_parent", "type=parent")); - } else { - assertAcked(prepareCreate("test") - .addMapping("doc", buildParentJoinFieldMappingFromSimplifiedDef("join_field", true, "parent", "child"))); - } + assertAcked(prepareCreate("test") + .addMapping("doc", buildParentJoinFieldMappingFromSimplifiedDef("join_field", true, "parent", "child"))); ensureGreen(); SearchResponse response = client().prepareSearch("test") @@ -831,13 +707,8 @@ public void testParentChildQueriesCanHandleNoRelevantTypesInIndex() throws Excep assertNoFailures(response); assertThat(response.getHits().getTotalHits(), equalTo(0L)); - if (legacy()) { - client().prepareIndex("test", "child1").setSource(jsonBuilder().startObject().field("text", "value").endObject()) - .setRefreshPolicy(RefreshPolicy.IMMEDIATE).get(); - } else { - client().prepareIndex("test", "doc").setSource(jsonBuilder().startObject().field("text", "value").endObject()) - .setRefreshPolicy(RefreshPolicy.IMMEDIATE).get(); - } + client().prepareIndex("test", "doc").setSource(jsonBuilder().startObject().field("text", "value").endObject()) + .setRefreshPolicy(RefreshPolicy.IMMEDIATE).get(); response = client().prepareSearch("test") .setQuery(hasChildQuery("child", matchQuery("text", "value"), ScoreMode.None)).get(); @@ -861,25 +732,15 @@ public void testParentChildQueriesCanHandleNoRelevantTypesInIndex() throws Excep } public void testHasChildAndHasParentFilter_withFilter() throws Exception { - if (legacy()) { - assertAcked(prepareCreate("test") - .addMapping("parent") - .addMapping("child", "_parent", "type=parent")); - } else { - assertAcked(prepareCreate("test") - .addMapping("doc", buildParentJoinFieldMappingFromSimplifiedDef("join_field", true, "parent", "child"))); - } + assertAcked(prepareCreate("test") + .addMapping("doc", buildParentJoinFieldMappingFromSimplifiedDef("join_field", true, "parent", "child"))); ensureGreen(); createIndexRequest("test", "parent", "1", null, "p_field", 1).get(); createIndexRequest("test", "child", "2", "1", "c_field", 1).get(); client().admin().indices().prepareFlush("test").get(); - if (legacy()) { - client().prepareIndex("test", "type1", "3").setSource("p_field", 2).get(); - } else { - client().prepareIndex("test", "doc", "3").setSource("p_field", 2).get(); - } + client().prepareIndex("test", "doc", "3").setSource("p_field", 2).get(); refresh(); SearchResponse searchResponse = client().prepareSearch("test") @@ -898,14 +759,8 @@ public void testHasChildAndHasParentFilter_withFilter() throws Exception { } public void testHasChildInnerHitsHighlighting() throws Exception { - if (legacy()) { - assertAcked(prepareCreate("test") - .addMapping("parent") - .addMapping("child", "_parent", "type=parent")); - } else { - assertAcked(prepareCreate("test") - .addMapping("doc", buildParentJoinFieldMappingFromSimplifiedDef("join_field", true, "parent", "child"))); - } + assertAcked(prepareCreate("test") + .addMapping("doc", buildParentJoinFieldMappingFromSimplifiedDef("join_field", true, "parent", "child"))); ensureGreen(); createIndexRequest("test", "parent", "1", null, "p_field", 1).get(); @@ -928,14 +783,8 @@ public void testHasChildInnerHitsHighlighting() throws Exception { } public void testHasChildAndHasParentWrappedInAQueryFilter() throws Exception { - if (legacy()) { - assertAcked(prepareCreate("test") - .addMapping("parent") - .addMapping("child", "_parent", "type=parent")); - } else { - assertAcked(prepareCreate("test") - .addMapping("doc", buildParentJoinFieldMappingFromSimplifiedDef("join_field", true, "parent", "child"))); - } + assertAcked(prepareCreate("test") + .addMapping("doc", buildParentJoinFieldMappingFromSimplifiedDef("join_field", true, "parent", "child"))); ensureGreen(); // query filter in case for p/c shouldn't execute per segment, but rather @@ -966,15 +815,9 @@ public void testHasChildAndHasParentWrappedInAQueryFilter() throws Exception { } public void testSimpleQueryRewrite() throws Exception { - if (legacy()) { - assertAcked(prepareCreate("test") - .addMapping("parent", "p_field", "type=keyword") - .addMapping("child", "_parent", "type=parent", "c_field", "type=keyword")); - } else { - assertAcked(prepareCreate("test") - .addMapping("doc", addFieldMappings(buildParentJoinFieldMappingFromSimplifiedDef("join_field", true, "parent", "child"), - "c_field", "keyword", "p_field", "keyword"))); - } + assertAcked(prepareCreate("test") + .addMapping("doc", addFieldMappings(buildParentJoinFieldMappingFromSimplifiedDef("join_field", true, "parent", "child"), + "c_field", "keyword", "p_field", "keyword"))); ensureGreen(); // index simple data @@ -1020,14 +863,8 @@ public void testSimpleQueryRewrite() throws Exception { // Issue #3144 public void testReIndexingParentAndChildDocuments() throws Exception { - if (legacy()) { - assertAcked(prepareCreate("test") - .addMapping("parent") - .addMapping("child", "_parent", "type=parent")); - } else { - assertAcked(prepareCreate("test") - .addMapping("doc", buildParentJoinFieldMappingFromSimplifiedDef("join_field", true, "parent", "child"))); - } + assertAcked(prepareCreate("test") + .addMapping("doc", buildParentJoinFieldMappingFromSimplifiedDef("join_field", true, "parent", "child"))); ensureGreen(); // index simple data @@ -1087,14 +924,8 @@ public void testReIndexingParentAndChildDocuments() throws Exception { // Issue #3203 public void testHasChildQueryWithMinimumScore() throws Exception { - if (legacy()) { - assertAcked(prepareCreate("test") - .addMapping("parent") - .addMapping("child", "_parent", "type=parent")); - } else { - assertAcked(prepareCreate("test") - .addMapping("doc", buildParentJoinFieldMappingFromSimplifiedDef("join_field", true, "parent", "child"))); - } + assertAcked(prepareCreate("test") + .addMapping("doc", buildParentJoinFieldMappingFromSimplifiedDef("join_field", true, "parent", "child"))); ensureGreen(); // index simple data @@ -1117,90 +948,42 @@ public void testHasChildQueryWithMinimumScore() throws Exception { } public void testParentFieldQuery() throws Exception { - if (legacy()) { - assertAcked(prepareCreate("test") - .setSettings(Settings.builder() - .put(indexSettings()) - .put("index.refresh_interval", -1) - ) - .addMapping("parent") - .addMapping("child", "_parent", "type=parent")); - } else { - assertAcked(prepareCreate("test") - .setSettings(Settings.builder().put("index.refresh_interval", -1)) - .addMapping("doc", buildParentJoinFieldMappingFromSimplifiedDef("join_field", true, "parent", "child"))); - } + assertAcked(prepareCreate("test") + .setSettings(Settings.builder().put("index.refresh_interval", -1)) + .addMapping("doc", buildParentJoinFieldMappingFromSimplifiedDef("join_field", true, "parent", "child"))); ensureGreen(); - SearchResponse response; - if (legacy()){ - response = client().prepareSearch("test").setQuery(termQuery("_parent#parent:p1", "p1")) - .get(); - } else { - response = client().prepareSearch("test") - .setQuery(boolQuery().filter(termQuery("join_field#parent", "p1")).filter(termQuery("join_field", "child"))) - .get(); - } + SearchResponse response = client().prepareSearch("test") + .setQuery(boolQuery().filter(termQuery("join_field#parent", "p1")).filter(termQuery("join_field", "child"))) + .get(); assertHitCount(response, 0L); createIndexRequest("test", "child", "c1", "p1").get(); refresh(); - if (legacy()){ - response = client().prepareSearch("test").setQuery(termQuery("_parent#parent", "p1")) - .get(); - } else { - response = client().prepareSearch("test") - .setQuery(boolQuery().filter(termQuery("join_field#parent", "p1")).filter(termQuery("join_field", "child"))) - .get(); - } + response = client().prepareSearch("test") + .setQuery(boolQuery().filter(termQuery("join_field#parent", "p1")).filter(termQuery("join_field", "child"))) + .get(); assertHitCount(response, 1L); - if (legacy()) { - response = client().prepareSearch("test").setQuery(queryStringQuery("_parent#parent:p1")).get(); - assertHitCount(response, 1L); - } - createIndexRequest("test", "child", "c2", "p2").get(); refresh(); - if (legacy()) { - response = client().prepareSearch("test").setQuery(termsQuery("_parent#parent", "p1", "p2")).get(); - assertHitCount(response, 2L); - } - if (legacy()) { - response = client().prepareSearch("test") - .setQuery(boolQuery() - .should(termQuery("_parent#parent", "p1")) - .should(termQuery("_parent#parent", "p2")) - ).get(); - } else { - response = client().prepareSearch("test") - .setQuery(boolQuery() - .should(boolQuery().filter(termQuery("join_field#parent", "p1")).filter(termQuery("join_field", "child"))) - .should(boolQuery().filter(termQuery("join_field#parent", "p2")).filter(termQuery("join_field", "child"))) - ).get(); - } + response = client().prepareSearch("test") + .setQuery(boolQuery() + .should(boolQuery().filter(termQuery("join_field#parent", "p1")).filter(termQuery("join_field", "child"))) + .should(boolQuery().filter(termQuery("join_field#parent", "p2")).filter(termQuery("join_field", "child"))) + ).get(); assertHitCount(response, 2L); } public void testParentIdQuery() throws Exception { - if (legacy()) { - assertAcked(prepareCreate("test") - .setSettings(Settings.builder() - .put(indexSettings()) - .put("index.refresh_interval", -1) - ) - .addMapping("parent") - .addMapping("child", "_parent", "type=parent")); - } else { - assertAcked(prepareCreate("test") - .setSettings(Settings.builder() - .put(indexSettings()) - .put("index.refresh_interval", -1) - ) - .addMapping("doc", buildParentJoinFieldMappingFromSimplifiedDef("join_field", true, "parent", "child"))); - } + assertAcked(prepareCreate("test") + .setSettings(Settings.builder() + .put(indexSettings()) + .put("index.refresh_interval", -1) + ) + .addMapping("doc", buildParentJoinFieldMappingFromSimplifiedDef("join_field", true, "parent", "child"))); ensureGreen(); createIndexRequest("test", "child", "c1", "p1").get(); @@ -1221,14 +1004,8 @@ public void testParentIdQuery() throws Exception { } public void testHasChildNotBeingCached() throws IOException { - if (legacy()) { - assertAcked(prepareCreate("test") - .addMapping("parent") - .addMapping("child", "_parent", "type=parent")); - } else { - assertAcked(prepareCreate("test") - .addMapping("doc", buildParentJoinFieldMappingFromSimplifiedDef("join_field", true, "parent", "child"))); - } + assertAcked(prepareCreate("test") + .addMapping("doc", buildParentJoinFieldMappingFromSimplifiedDef("join_field", true, "parent", "child"))); ensureGreen(); // index simple data @@ -1288,25 +1065,17 @@ private QueryBuilder randomHasParent(String type, String field, String value) { // Issue #3818 public void testHasChildQueryOnlyReturnsSingleChildType() throws Exception { - if (legacy()) { - assertAcked(prepareCreate("grandissue") - .addMapping("grandparent", "name", "type=text") - .addMapping("parent", "_parent", "type=grandparent") - .addMapping("child_type_one", "_parent", "type=parent") - .addMapping("child_type_two", "_parent", "type=parent")); - } else { - assertAcked(prepareCreate("grandissue") - .addMapping("doc", jsonBuilder().startObject().startObject("doc").startObject("properties") - .startObject("join_field") - .field("type", "join") - .startObject("relations") - .field("grandparent", "parent") - .field("parent", new String[] {"child_type_one", "child_type_two"}) - .endObject() + assertAcked(prepareCreate("grandissue") + .addMapping("doc", jsonBuilder().startObject().startObject("doc").startObject("properties") + .startObject("join_field") + .field("type", "join") + .startObject("relations") + .field("grandparent", "parent") + .field("parent", new String[] {"child_type_one", "child_type_two"}) .endObject() - .endObject().endObject().endObject() - )); - } + .endObject() + .endObject().endObject().endObject() + )); createIndexRequest("grandissue", "grandparent", "1", null, "name", "Grandpa").get(); createIndexRequest("grandissue", "parent", "2", "1", "name", "Dana").get(); @@ -1350,16 +1119,10 @@ public void testHasChildQueryOnlyReturnsSingleChildType() throws Exception { } public void testHasChildQueryWithNestedInnerObjects() throws Exception { - if (legacy()) { - assertAcked(prepareCreate("test") - .addMapping("parent", "objects", "type=nested") - .addMapping("child", "_parent", "type=parent")); - } else { - assertAcked(prepareCreate("test") - .addMapping("doc", - addFieldMappings(buildParentJoinFieldMappingFromSimplifiedDef("join_field", true, "parent", "child"), - "objects", "nested"))); - } + assertAcked(prepareCreate("test") + .addMapping("doc", + addFieldMappings(buildParentJoinFieldMappingFromSimplifiedDef("join_field", true, "parent", "child"), + "objects", "nested"))); ensureGreen(); createIndexRequest("test", "parent", "p1", null, jsonBuilder().startObject().field("p_field", "1").startArray("objects") @@ -1398,14 +1161,8 @@ public void testHasChildQueryWithNestedInnerObjects() throws Exception { } public void testNamedFilters() throws Exception { - if (legacy()) { - assertAcked(prepareCreate("test") - .addMapping("parent") - .addMapping("child", "_parent", "type=parent")); - } else { - assertAcked(prepareCreate("test") - .addMapping("doc", buildParentJoinFieldMappingFromSimplifiedDef("join_field", true, "parent", "child"))); - } + assertAcked(prepareCreate("test") + .addMapping("doc", buildParentJoinFieldMappingFromSimplifiedDef("join_field", true, "parent", "child"))); ensureGreen(); String parentId = "p1"; @@ -1450,7 +1207,7 @@ public void testParentChildQueriesNoParentType() throws Exception { ensureGreen(); String parentId = "p1"; - client().prepareIndex("test", legacy() ? "parent" : "doc", parentId).setSource("p_field", "1").get(); + client().prepareIndex("test", "doc", parentId).setSource("p_field", "1").get(); refresh(); try { @@ -1500,19 +1257,9 @@ public void testParentChildQueriesNoParentType() throws Exception { } public void testParentChildCaching() throws Exception { - if (legacy()) { - assertAcked(prepareCreate("test") - .setSettings(Settings.builder() - .put(indexSettings()) - .put("index.refresh_interval", -1) - ) - .addMapping("parent") - .addMapping("child", "_parent", "type=parent")); - } else { - assertAcked(prepareCreate("test") - .setSettings(Settings.builder().put("index.refresh_interval", -1)) - .addMapping("doc", buildParentJoinFieldMappingFromSimplifiedDef("join_field", true, "parent", "child"))); - } + assertAcked(prepareCreate("test") + .setSettings(Settings.builder().put("index.refresh_interval", -1)) + .addMapping("doc", buildParentJoinFieldMappingFromSimplifiedDef("join_field", true, "parent", "child"))); ensureGreen(); // index simple data @@ -1553,14 +1300,8 @@ public void testParentChildCaching() throws Exception { } public void testParentChildQueriesViaScrollApi() throws Exception { - if (legacy()) { - assertAcked(prepareCreate("test") - .addMapping("parent") - .addMapping("child", "_parent", "type=parent")); - } else { - assertAcked(prepareCreate("test") - .addMapping("doc", buildParentJoinFieldMappingFromSimplifiedDef("join_field", true, "parent", "child"))); - } + assertAcked(prepareCreate("test") + .addMapping("doc", buildParentJoinFieldMappingFromSimplifiedDef("join_field", true, "parent", "child"))); ensureGreen(); for (int i = 0; i < 10; i++) { createIndexRequest("test", "parent", "p" + i, null).get(); @@ -1600,44 +1341,6 @@ public void testParentChildQueriesViaScrollApi() throws Exception { } } - public void testTypeIsAppliedInHasParentInnerQuery() throws Exception { - if (legacy()) { - assertAcked(prepareCreate("test") - .addMapping("parent") - .addMapping("child", "_parent", "type=parent")); - } else { - assertAcked(prepareCreate("test") - .addMapping("doc", buildParentJoinFieldMappingFromSimplifiedDef("join_field", true, "parent", "child"))); - } - ensureGreen(); - - List indexRequests = new ArrayList<>(); - indexRequests.add(createIndexRequest("test", "parent", "p1", null, "field1", "a")); - indexRequests.add(createIndexRequest("test", "child", "c1", "p1")); - indexRequests.add(createIndexRequest("test", "child", "c2", "p1")); - indexRandom(true, indexRequests); - - SearchResponse searchResponse = client().prepareSearch("test") - .setQuery(constantScoreQuery(hasParentQuery("parent", boolQuery().mustNot(termQuery("field1", "a")), false))) - .get(); - assertHitCount(searchResponse, 0L); - - searchResponse = client().prepareSearch("test") - .setQuery(hasParentQuery("parent", constantScoreQuery(boolQuery().mustNot(termQuery("field1", "a"))), false)) - .get(); - assertHitCount(searchResponse, 0L); - - searchResponse = client().prepareSearch("test") - .setQuery(constantScoreQuery(hasParentQuery("parent", termQuery("field1", "a"), false))) - .get(); - assertHitCount(searchResponse, 2L); - - searchResponse = client().prepareSearch("test") - .setQuery(hasParentQuery("parent", constantScoreQuery(termQuery("field1", "a")), false)) - .get(); - assertHitCount(searchResponse, 2L); - } - private List createMinMaxDocBuilders() { List indexBuilders = new ArrayList<>(); // Parent 1 and its children @@ -1685,14 +1388,8 @@ private SearchResponse minMaxQuery(ScoreMode scoreMode, int minChildren, Integer } public void testMinMaxChildren() throws Exception { - if (legacy()) { - assertAcked(prepareCreate("test") - .addMapping("parent", "id", "type=long") - .addMapping("child", "_parent", "type=parent")); - } else { - assertAcked(prepareCreate("test") - .addMapping("doc", buildParentJoinFieldMappingFromSimplifiedDef("join_field", true, "parent", "child"))); - } + assertAcked(prepareCreate("test") + .addMapping("doc", buildParentJoinFieldMappingFromSimplifiedDef("join_field", true, "parent", "child"))); ensureGreen(); indexRandom(true, createMinMaxDocBuilders().toArray(new IndexRequestBuilder[0])); @@ -2004,13 +1701,8 @@ public void testMinMaxChildren() throws Exception { } public void testHasParentInnerQueryType() { - if (legacy()) { - assertAcked(prepareCreate("test") - .addMapping("parent-type").addMapping("child-type", "_parent", "type=parent-type")); - } else { - assertAcked(prepareCreate("test") - .addMapping("doc", buildParentJoinFieldMappingFromSimplifiedDef("join_field", true, "parent-type", "child-type"))); - } + assertAcked(prepareCreate("test") + .addMapping("doc", buildParentJoinFieldMappingFromSimplifiedDef("join_field", true, "parent-type", "child-type"))); createIndexRequest("test", "child-type", "child-id", "parent-id").get(); createIndexRequest("test", "parent-type", "parent-id", null).get(); refresh(); @@ -2026,28 +1718,21 @@ public void testHasParentInnerQueryType() { } public void testHighlightersIgnoreParentChild() throws IOException { - if (legacy()) { - assertAcked(prepareCreate("test") - .addMapping("parent-type", "searchText", "type=text,term_vector=with_positions_offsets,index_options=offsets") - .addMapping("child-type", "_parent", "type=parent-type", "searchText", - "type=text,term_vector=with_positions_offsets,index_options=offsets")); - } else { - assertAcked(prepareCreate("test") - .addMapping("doc", jsonBuilder().startObject().startObject("properties") - .startObject("join_field") - .field("type", "join") - .startObject("relations") - .field("parent-type", "child-type") - .endObject() - .endObject() - .startObject("searchText") - .field("type", "text") - .field("term_vector", "with_positions_offsets") - .field("index_options", "offsets") + assertAcked(prepareCreate("test") + .addMapping("doc", jsonBuilder().startObject().startObject("properties") + .startObject("join_field") + .field("type", "join") + .startObject("relations") + .field("parent-type", "child-type") .endObject() - .endObject().endObject() - )); - } + .endObject() + .startObject("searchText") + .field("type", "text") + .field("term_vector", "with_positions_offsets") + .field("index_options", "offsets") + .endObject() + .endObject().endObject() + )); createIndexRequest("test", "parent-type", "parent-id", null, "searchText", "quick brown fox").get(); createIndexRequest("test", "child-type", "child-id", "parent-id", "searchText", "quick brown fox").get(); refresh(); @@ -2082,15 +1767,8 @@ public void testHighlightersIgnoreParentChild() throws IOException { } public void testAliasesFilterWithHasChildQuery() throws Exception { - if (legacy()) { - assertAcked(prepareCreate("my-index") - .addMapping("parent") - .addMapping("child", "_parent", "type=parent") - ); - } else { - assertAcked(prepareCreate("my-index") - .addMapping("doc", buildParentJoinFieldMappingFromSimplifiedDef("join_field", true, "parent", "child"))); - } + assertAcked(prepareCreate("my-index") + .addMapping("doc", buildParentJoinFieldMappingFromSimplifiedDef("join_field", true, "parent", "child"))); createIndexRequest("my-index", "parent", "1", null).get(); createIndexRequest("my-index", "child", "2", "1").get(); refresh(); diff --git a/modules/parent-join/src/test/java/org/elasticsearch/join/query/InnerHitsIT.java b/modules/parent-join/src/test/java/org/elasticsearch/join/query/InnerHitsIT.java index 6efd5256e5422..57415d47f6e7f 100644 --- a/modules/parent-join/src/test/java/org/elasticsearch/join/query/InnerHitsIT.java +++ b/modules/parent-join/src/test/java/org/elasticsearch/join/query/InnerHitsIT.java @@ -86,30 +86,23 @@ protected Map, Object>> pluginScripts() { } public void testSimpleParentChild() throws Exception { - if (legacy()) { - assertAcked(prepareCreate("articles") - .addMapping("article", "title", "type=text") - .addMapping("comment", "_parent", "type=article", "message", "type=text,fielddata=true") - ); - } else { - assertAcked(prepareCreate("articles") - .addMapping("doc", jsonBuilder().startObject().startObject("doc").startObject("properties") - .startObject("join_field") - .field("type", "join") - .startObject("relations") - .field("article", "comment") - .endObject() + assertAcked(prepareCreate("articles") + .addMapping("doc", jsonBuilder().startObject().startObject("doc").startObject("properties") + .startObject("join_field") + .field("type", "join") + .startObject("relations") + .field("article", "comment") .endObject() - .startObject("title") - .field("type", "text") - .endObject() - .startObject("message") - .field("type", "text") - .field("fielddata", true) - .endObject() - .endObject().endObject().endObject() - )); - } + .endObject() + .startObject("title") + .field("type", "text") + .endObject() + .startObject("message") + .field("type", "text") + .field("fielddata", true) + .endObject() + .endObject().endObject().endObject() + )); List requests = new ArrayList<>(); requests.add(createIndexRequest("articles", "article", "p1", null, "title", "quick brown fox")); @@ -136,9 +129,9 @@ public void testSimpleParentChild() throws Exception { assertThat(innerHits.getTotalHits(), equalTo(2L)); assertThat(innerHits.getAt(0).getId(), equalTo("c1")); - assertThat(innerHits.getAt(0).getType(), equalTo(legacy() ? "comment" : "doc")); + assertThat(innerHits.getAt(0).getType(), equalTo("doc")); assertThat(innerHits.getAt(1).getId(), equalTo("c2")); - assertThat(innerHits.getAt(1).getType(), equalTo(legacy() ? "comment" : "doc")); + assertThat(innerHits.getAt(1).getType(), equalTo("doc")); response = client().prepareSearch("articles") .setQuery(hasChildQuery("comment", matchQuery("message", "elephant"), ScoreMode.None) @@ -153,11 +146,11 @@ public void testSimpleParentChild() throws Exception { assertThat(innerHits.getTotalHits(), equalTo(3L)); assertThat(innerHits.getAt(0).getId(), equalTo("c4")); - assertThat(innerHits.getAt(0).getType(), equalTo(legacy() ? "comment" : "doc")); + assertThat(innerHits.getAt(0).getType(), equalTo("doc")); assertThat(innerHits.getAt(1).getId(), equalTo("c5")); - assertThat(innerHits.getAt(1).getType(), equalTo(legacy() ? "comment" : "doc")); + assertThat(innerHits.getAt(1).getType(), equalTo("doc")); assertThat(innerHits.getAt(2).getId(), equalTo("c6")); - assertThat(innerHits.getAt(2).getType(), equalTo(legacy() ? "comment" : "doc")); + assertThat(innerHits.getAt(2).getType(), equalTo("doc")); response = client().prepareSearch("articles") .setQuery( @@ -179,24 +172,16 @@ public void testSimpleParentChild() throws Exception { } public void testRandomParentChild() throws Exception { - if (legacy()) { - assertAcked(prepareCreate("idx") - .addMapping("parent") - .addMapping("child1", "_parent", "type=parent") - .addMapping("child2", "_parent", "type=parent") - ); - } else { - assertAcked(prepareCreate("idx") - .addMapping("doc", jsonBuilder().startObject().startObject("doc").startObject("properties") - .startObject("join_field") - .field("type", "join") - .startObject("relations") - .field("parent", new String[] {"child1", "child2"}) - .endObject() + assertAcked(prepareCreate("idx") + .addMapping("doc", jsonBuilder().startObject().startObject("doc").startObject("properties") + .startObject("join_field") + .field("type", "join") + .startObject("relations") + .field("parent", new String[] {"child1", "child2"}) .endObject() - .endObject().endObject().endObject() - )); - } + .endObject() + .endObject().endObject().endObject() + )); int numDocs = scaledRandomIntBetween(5, 50); List requestBuilders = new ArrayList<>(); @@ -225,13 +210,13 @@ public void testRandomParentChild() throws Exception { BoolQueryBuilder boolQuery = new BoolQueryBuilder(); boolQuery.should(constantScoreQuery(hasChildQuery("child1", matchAllQuery(), ScoreMode.None) .innerHit(new InnerHitBuilder().setName("a") - .addSort(new FieldSortBuilder("_uid").order(SortOrder.ASC)).setSize(size)))); + .addSort(new FieldSortBuilder("_id").order(SortOrder.ASC)).setSize(size)))); boolQuery.should(constantScoreQuery(hasChildQuery("child2", matchAllQuery(), ScoreMode.None) .innerHit(new InnerHitBuilder().setName("b") - .addSort(new FieldSortBuilder("_uid").order(SortOrder.ASC)).setSize(size)))); + .addSort(new FieldSortBuilder("_id").order(SortOrder.ASC)).setSize(size)))); SearchResponse searchResponse = client().prepareSearch("idx") .setSize(numDocs) - .addSort("_uid", SortOrder.ASC) + .addSort("_id", SortOrder.ASC) .setQuery(boolQuery) .get(); @@ -243,7 +228,7 @@ public void testRandomParentChild() throws Exception { int offset2 = 0; for (int parent = 0; parent < numDocs; parent++) { SearchHit searchHit = searchResponse.getHits().getAt(parent); - assertThat(searchHit.getType(), equalTo(legacy() ? "parent" : "doc")); + assertThat(searchHit.getType(), equalTo("doc")); assertThat(searchHit.getId(), equalTo(String.format(Locale.ENGLISH, "p_%03d", parent))); assertThat(searchHit.getShard(), notNullValue()); @@ -251,7 +236,7 @@ public void testRandomParentChild() throws Exception { assertThat(inner.getTotalHits(), equalTo((long) child1InnerObjects[parent])); for (int child = 0; child < child1InnerObjects[parent] && child < size; child++) { SearchHit innerHit = inner.getAt(child); - assertThat(innerHit.getType(), equalTo(legacy() ? "child1" : "doc")); + assertThat(innerHit.getType(), equalTo("doc")); String childId = String.format(Locale.ENGLISH, "c1_%04d", offset1 + child); assertThat(innerHit.getId(), equalTo(childId)); assertThat(innerHit.getNestedIdentity(), nullValue()); @@ -262,7 +247,7 @@ public void testRandomParentChild() throws Exception { assertThat(inner.getTotalHits(), equalTo((long) child2InnerObjects[parent])); for (int child = 0; child < child2InnerObjects[parent] && child < size; child++) { SearchHit innerHit = inner.getAt(child); - assertThat(innerHit.getType(), equalTo(legacy() ? "child2" : "doc")); + assertThat(innerHit.getType(), equalTo("doc")); String childId = String.format(Locale.ENGLISH, "c2_%04d", offset2 + child); assertThat(innerHit.getId(), equalTo(childId)); assertThat(innerHit.getNestedIdentity(), nullValue()); @@ -272,16 +257,9 @@ public void testRandomParentChild() throws Exception { } public void testInnerHitsOnHasParent() throws Exception { - if (legacy()) { - assertAcked(prepareCreate("stack") - .addMapping("question", "body", "type=text") - .addMapping("answer", "_parent", "type=question", "body", "type=text") - ); - } else { - assertAcked(prepareCreate("stack") - .addMapping("doc", addFieldMappings(buildParentJoinFieldMappingFromSimplifiedDef("join_field", true, "question", "answer"), - "body", "text"))); - } + assertAcked(prepareCreate("stack") + .addMapping("doc", addFieldMappings(buildParentJoinFieldMappingFromSimplifiedDef("join_field", true, "question", "answer"), + "body", "text"))); List requests = new ArrayList<>(); requests.add(createIndexRequest("stack", "question", "1", null, "body", "I'm using HTTPS + Basic authentication " + "to protect a resource. How can I throttle authentication attempts to protect against brute force attacks?")); @@ -293,7 +271,7 @@ public void testInnerHitsOnHasParent() throws Exception { indexRandom(true, requests); SearchResponse response = client().prepareSearch("stack") - .addSort("_uid", SortOrder.ASC) + .addSort("_id", SortOrder.ASC) .setQuery( boolQuery() .must(matchQuery("body", "fail2ban")) @@ -304,32 +282,24 @@ public void testInnerHitsOnHasParent() throws Exception { SearchHit searchHit = response.getHits().getAt(0); assertThat(searchHit.getId(), equalTo("3")); - assertThat(searchHit.getType(), equalTo(legacy() ? "answer" : "doc")); + assertThat(searchHit.getType(), equalTo("doc")); assertThat(searchHit.getInnerHits().get("question").getTotalHits(), equalTo(1L)); - assertThat(searchHit.getInnerHits().get("question").getAt(0).getType(), equalTo(legacy() ? "question" : "doc")); + assertThat(searchHit.getInnerHits().get("question").getAt(0).getType(), equalTo("doc")); assertThat(searchHit.getInnerHits().get("question").getAt(0).getId(), equalTo("1")); searchHit = response.getHits().getAt(1); assertThat(searchHit.getId(), equalTo("4")); - assertThat(searchHit.getType(), equalTo(legacy() ? "answer" : "doc")); + assertThat(searchHit.getType(), equalTo("doc")); assertThat(searchHit.getInnerHits().get("question").getTotalHits(), equalTo(1L)); - assertThat(searchHit.getInnerHits().get("question").getAt(0).getType(), equalTo(legacy() ? "question" : "doc")); + assertThat(searchHit.getInnerHits().get("question").getAt(0).getType(), equalTo("doc")); assertThat(searchHit.getInnerHits().get("question").getAt(0).getId(), equalTo("2")); } public void testParentChildMultipleLayers() throws Exception { - if (legacy()) { - assertAcked(prepareCreate("articles") - .addMapping("article", "title", "type=text") - .addMapping("comment", "_parent", "type=article", "message", "type=text") - .addMapping("remark", "_parent", "type=comment", "message", "type=text") - ); - } else { - assertAcked(prepareCreate("articles") - .addMapping("doc", - addFieldMappings(buildParentJoinFieldMappingFromSimplifiedDef("join_field", true, - "article", "comment", "comment", "remark"), "title", "text", "message", "text"))); - } + assertAcked(prepareCreate("articles") + .addMapping("doc", + addFieldMappings(buildParentJoinFieldMappingFromSimplifiedDef("join_field", true, + "article", "comment", "comment", "remark"), "title", "text", "message", "text"))); List requests = new ArrayList<>(); requests.add(createIndexRequest("articles", "article", "1", null, "title", "quick brown fox")); @@ -354,12 +324,12 @@ public void testParentChildMultipleLayers() throws Exception { SearchHits innerHits = response.getHits().getAt(0).getInnerHits().get("comment"); assertThat(innerHits.getTotalHits(), equalTo(1L)); assertThat(innerHits.getAt(0).getId(), equalTo("3")); - assertThat(innerHits.getAt(0).getType(), equalTo(legacy() ? "comment" : "doc")); + assertThat(innerHits.getAt(0).getType(), equalTo("doc")); innerHits = innerHits.getAt(0).getInnerHits().get("remark"); assertThat(innerHits.getTotalHits(), equalTo(1L)); assertThat(innerHits.getAt(0).getId(), equalTo("5")); - assertThat(innerHits.getAt(0).getType(), equalTo(legacy() ? "remark" : "doc")); + assertThat(innerHits.getAt(0).getType(), equalTo("doc")); response = client().prepareSearch("articles") .setQuery(hasChildQuery("comment", @@ -375,29 +345,18 @@ public void testParentChildMultipleLayers() throws Exception { innerHits = response.getHits().getAt(0).getInnerHits().get("comment"); assertThat(innerHits.getTotalHits(), equalTo(1L)); assertThat(innerHits.getAt(0).getId(), equalTo("4")); - assertThat(innerHits.getAt(0).getType(), equalTo(legacy() ? "comment" : "doc")); + assertThat(innerHits.getAt(0).getType(), equalTo("doc")); innerHits = innerHits.getAt(0).getInnerHits().get("remark"); assertThat(innerHits.getTotalHits(), equalTo(1L)); assertThat(innerHits.getAt(0).getId(), equalTo("6")); - assertThat(innerHits.getAt(0).getType(), equalTo(legacy() ? "remark" : "doc")); + assertThat(innerHits.getAt(0).getType(), equalTo("doc")); } public void testRoyals() throws Exception { - if (legacy()) { - assertAcked( - prepareCreate("royals") - .addMapping("king") - .addMapping("prince", "_parent", "type=king") - .addMapping("duke", "_parent", "type=prince") - .addMapping("earl", "_parent", "type=duke") - .addMapping("baron", "_parent", "type=earl") - ); - } else { - assertAcked(prepareCreate("royals") - .addMapping("doc", buildParentJoinFieldMappingFromSimplifiedDef("join_field", true, - "king", "prince", "prince", "duke", "duke", "earl", "earl", "baron"))); - } + assertAcked(prepareCreate("royals") + .addMapping("doc", buildParentJoinFieldMappingFromSimplifiedDef("join_field", true, + "king", "prince", "prince", "duke", "duke", "earl", "earl", "baron"))); List requests = new ArrayList<>(); requests.add(createIndexRequest("royals", "king", "king", null)); @@ -423,7 +382,7 @@ public void testRoyals() throws Exception { hasChildQuery("baron", matchAllQuery(), ScoreMode.None) .innerHit(new InnerHitBuilder().setName("barons")), ScoreMode.None).innerHit(new InnerHitBuilder() - .addSort(SortBuilders.fieldSort("_uid").order(SortOrder.ASC)) + .addSort(SortBuilders.fieldSort("_id").order(SortOrder.ASC)) .setName("earls") .setSize(4)) ) @@ -464,13 +423,8 @@ public void testRoyals() throws Exception { } public void testMatchesQueriesParentChildInnerHits() throws Exception { - if (legacy()) { - assertAcked(prepareCreate("index") - .addMapping("child", "_parent", "type=parent")); - } else { - assertAcked(prepareCreate("index") - .addMapping("doc", buildParentJoinFieldMappingFromSimplifiedDef("join_field", true, "parent", "child"))); - } + assertAcked(prepareCreate("index") + .addMapping("doc", buildParentJoinFieldMappingFromSimplifiedDef("join_field", true, "parent", "child"))); List requests = new ArrayList<>(); requests.add(createIndexRequest("index", "parent", "1", null)); requests.add(createIndexRequest("index", "child", "3", "1", "field", "value1")); @@ -482,7 +436,7 @@ public void testMatchesQueriesParentChildInnerHits() throws Exception { SearchResponse response = client().prepareSearch("index") .setQuery(hasChildQuery("child", matchQuery("field", "value1").queryName("_name1"), ScoreMode.None) .innerHit(new InnerHitBuilder())) - .addSort("_uid", SortOrder.ASC) + .addSort("_id", SortOrder.ASC) .get(); assertHitCount(response, 2); assertThat(response.getHits().getAt(0).getId(), equalTo("1")); @@ -499,7 +453,7 @@ public void testMatchesQueriesParentChildInnerHits() throws Exception { .innerHit(new InnerHitBuilder()); response = client().prepareSearch("index") .setQuery(query) - .addSort("_uid", SortOrder.ASC) + .addSort("_id", SortOrder.ASC) .get(); assertHitCount(response, 1); assertThat(response.getHits().getAt(0).getId(), equalTo("1")); @@ -509,12 +463,8 @@ public void testMatchesQueriesParentChildInnerHits() throws Exception { } public void testUseMaxDocInsteadOfSize() throws Exception { - if (legacy()) { - assertAcked(prepareCreate("index1").addMapping("child", "_parent", "type=parent")); - } else { - assertAcked(prepareCreate("index1") - .addMapping("doc", buildParentJoinFieldMappingFromSimplifiedDef("join_field", true, "parent", "child"))); - } + assertAcked(prepareCreate("index1") + .addMapping("doc", buildParentJoinFieldMappingFromSimplifiedDef("join_field", true, "parent", "child"))); client().admin().indices().prepareUpdateSettings("index1") .setSettings(Collections.singletonMap(IndexSettings.MAX_INNER_RESULT_WINDOW_SETTING.getKey(), ArrayUtil.MAX_ARRAY_LENGTH)) .get(); @@ -533,14 +483,9 @@ public void testUseMaxDocInsteadOfSize() throws Exception { } public void testNestedInnerHitWrappedInParentChildInnerhit() throws Exception { - if (legacy()) { - assertAcked(prepareCreate("test") - .addMapping("child_type", "_parent", "type=parent_type", "nested_type", "type=nested")); - } else { - assertAcked(prepareCreate("test") - .addMapping("doc", addFieldMappings(buildParentJoinFieldMappingFromSimplifiedDef("join_field", true, - "parent_type", "child_type"), "nested_type", "nested"))); - } + assertAcked(prepareCreate("test") + .addMapping("doc", addFieldMappings(buildParentJoinFieldMappingFromSimplifiedDef("join_field", true, + "parent_type", "child_type"), "nested_type", "nested"))); createIndexRequest("test", "parent_type", "1", null, "key", "value").get(); createIndexRequest("test", "child_type", "2", "1", "nested_type", Collections.singletonMap("key", "value")).get(); refresh(); @@ -551,28 +496,17 @@ public void testNestedInnerHitWrappedInParentChildInnerhit() throws Exception { .get(); assertHitCount(response, 1); SearchHit hit = response.getHits().getAt(0); - if (legacy()) { - assertThat(hit.getInnerHits().get("child_type").getAt(0).field("_parent").getValue(), equalTo("1")); - } else { - String parentId = (String) extractValue("join_field.parent", hit.getInnerHits().get("child_type").getAt(0).getSourceAsMap()); - assertThat(parentId, equalTo("1")); - } + String parentId = (String) extractValue("join_field.parent", hit.getInnerHits().get("child_type").getAt(0).getSourceAsMap()); + assertThat(parentId, equalTo("1")); assertThat(hit.getInnerHits().get("child_type").getAt(0).getInnerHits().get("nested_type").getAt(0).field("_parent"), nullValue()); } public void testInnerHitsWithIgnoreUnmapped() throws Exception { - if (legacy()) { - assertAcked(prepareCreate("index1") - .addMapping("parent_type", "nested_type", "type=nested") - .addMapping("child_type", "_parent", "type=parent_type") - ); - } else { - assertAcked(prepareCreate("index1") - .addMapping("doc", addFieldMappings( - buildParentJoinFieldMappingFromSimplifiedDef("join_field", true, "parent_type", "child_type"), - "nested_type", "nested")) - ); - } + assertAcked(prepareCreate("index1") + .addMapping("doc", addFieldMappings( + buildParentJoinFieldMappingFromSimplifiedDef("join_field", true, "parent_type", "child_type"), + "nested_type", "nested")) + ); assertAcked(prepareCreate("index2")); createIndexRequest("index1", "parent_type", "1", null, "nested_type", Collections.singletonMap("key", "value")).get(); createIndexRequest("index1", "child_type", "2", "1").get(); @@ -592,18 +526,11 @@ public void testInnerHitsWithIgnoreUnmapped() throws Exception { } public void testTooHighResultWindow() throws Exception { - if (legacy()) { - assertAcked(prepareCreate("index1") - .addMapping("parent_type", "nested_type", "type=nested") - .addMapping("child_type", "_parent", "type=parent_type") - ); - } else { - assertAcked(prepareCreate("index1") - .addMapping("doc", addFieldMappings( - buildParentJoinFieldMappingFromSimplifiedDef("join_field", true, "parent_type", "child_type"), - "nested_type", "nested")) - ); - } + assertAcked(prepareCreate("index1") + .addMapping("doc", addFieldMappings( + buildParentJoinFieldMappingFromSimplifiedDef("join_field", true, "parent_type", "child_type"), + "nested_type", "nested")) + ); createIndexRequest("index1", "parent_type", "1", null, "nested_type", Collections.singletonMap("key", "value")).get(); createIndexRequest("index1", "child_type", "2", "1").get(); refresh(); diff --git a/modules/parent-join/src/test/java/org/elasticsearch/join/query/LegacyChildQuerySearchIT.java b/modules/parent-join/src/test/java/org/elasticsearch/join/query/LegacyChildQuerySearchIT.java deleted file mode 100644 index c13a1d76732fc..0000000000000 --- a/modules/parent-join/src/test/java/org/elasticsearch/join/query/LegacyChildQuerySearchIT.java +++ /dev/null @@ -1,308 +0,0 @@ -/* - * Licensed to Elasticsearch under one or more contributor - * license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright - * ownership. Elasticsearch licenses this file to you under - * the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.elasticsearch.join.query; - -import org.apache.lucene.search.join.ScoreMode; -import org.elasticsearch.action.admin.indices.mapping.get.GetMappingsResponse; -import org.elasticsearch.action.admin.indices.mapping.put.PutMappingResponse; -import org.elasticsearch.action.bulk.BulkRequestBuilder; -import org.elasticsearch.action.bulk.BulkResponse; -import org.elasticsearch.action.search.SearchPhaseExecutionException; -import org.elasticsearch.action.search.SearchResponse; -import org.elasticsearch.common.xcontent.XContentType; -import org.elasticsearch.index.query.QueryBuilders; -import org.elasticsearch.search.builder.SearchSourceBuilder; - -import java.io.IOException; -import java.nio.charset.StandardCharsets; -import java.util.Map; - -import static org.elasticsearch.common.xcontent.XContentFactory.jsonBuilder; -import static org.elasticsearch.index.query.QueryBuilders.matchAllQuery; -import static org.elasticsearch.index.query.QueryBuilders.multiMatchQuery; -import static org.elasticsearch.join.query.JoinQueryBuilders.hasChildQuery; -import static org.elasticsearch.join.query.JoinQueryBuilders.hasParentQuery; -import static org.elasticsearch.test.hamcrest.ElasticsearchAssertions.assertAcked; -import static org.elasticsearch.test.hamcrest.ElasticsearchAssertions.assertHitCount; -import static org.elasticsearch.test.hamcrest.ElasticsearchAssertions.assertNoFailures; -import static org.elasticsearch.test.hamcrest.ElasticsearchAssertions.assertSearchHits; -import static org.hamcrest.Matchers.containsString; -import static org.hamcrest.Matchers.equalTo; -import static org.hamcrest.Matchers.greaterThanOrEqualTo; -import static org.hamcrest.Matchers.notNullValue; - -public class LegacyChildQuerySearchIT extends ChildQuerySearchIT { - - @Override - protected boolean legacy() { - return true; - } - - public void testIndexChildDocWithNoParentMapping() throws IOException { - assertAcked(prepareCreate("test") - .addMapping("parent") - .addMapping("child1")); - ensureGreen(); - - client().prepareIndex("test", "parent", "p1").setSource("p_field", "p_value1").get(); - try { - client().prepareIndex("test", "child1", "c1").setParent("p1").setSource("c_field", "blue").get(); - fail(); - } catch (IllegalArgumentException e) { - assertThat(e.toString(), containsString("can't specify parent if no parent field has been configured")); - } - try { - client().prepareIndex("test", "child2", "c2").setParent("p1").setSource("c_field", "blue").get(); - fail(); - } catch (IllegalArgumentException e) { - assertThat(e.toString(), containsString("can't specify parent if no parent field has been configured")); - } - - refresh(); - } - - public void testAddingParentToExistingMapping() throws IOException { - createIndex("test"); - ensureGreen(); - - PutMappingResponse putMappingResponse = client().admin().indices() - .preparePutMapping("test").setType("child").setSource("number", "type=integer") - .get(); - assertThat(putMappingResponse.isAcknowledged(), equalTo(true)); - - GetMappingsResponse getMappingsResponse = client().admin().indices().prepareGetMappings("test").get(); - Map mapping = getMappingsResponse.getMappings().get("test").get("child").getSourceAsMap(); - assertThat(mapping.size(), greaterThanOrEqualTo(1)); // there are potentially some meta fields configured randomly - assertThat(mapping.get("properties"), notNullValue()); - - try { - // Adding _parent metadata field to existing mapping is prohibited: - client().admin().indices().preparePutMapping("test").setType("child").setSource(jsonBuilder().startObject().startObject("child") - .startObject("_parent").field("type", "parent").endObject() - .endObject().endObject()).get(); - fail(); - } catch (IllegalArgumentException e) { - assertThat(e.toString(), containsString("The _parent field's type option can't be changed: [null]->[parent]")); - } - } - - // Issue #5783 - public void testQueryBeforeChildType() throws Exception { - assertAcked(prepareCreate("test") - .addMapping("features") - .addMapping("posts", "_parent", "type=features") - .addMapping("specials")); - ensureGreen(); - - client().prepareIndex("test", "features", "1").setSource("field", "foo").get(); - client().prepareIndex("test", "posts", "1").setParent("1").setSource("field", "bar").get(); - refresh(); - - SearchResponse resp; - resp = client().prepareSearch("test") - .setSource(new SearchSourceBuilder().query(hasChildQuery("posts", - QueryBuilders.matchQuery("field", "bar"), ScoreMode.None))) - .get(); - assertHitCount(resp, 1L); - } - - // Issue #6256 - public void testParentFieldInMultiMatchField() throws Exception { - assertAcked(prepareCreate("test") - .addMapping("type1") - .addMapping("type2", "_parent", "type=type1") - ); - ensureGreen(); - - client().prepareIndex("test", "type2", "1").setParent("1").setSource("field", "value").get(); - refresh(); - - SearchResponse response = client().prepareSearch("test") - .setQuery(multiMatchQuery("1", "_parent#type1")) - .get(); - - assertThat(response.getHits().getTotalHits(), equalTo(1L)); - assertThat(response.getHits().getAt(0).getId(), equalTo("1")); - } - - public void testParentFieldToNonExistingType() { - assertAcked(prepareCreate("test") - .addMapping("parent").addMapping("child", "_parent", "type=parent2")); - client().prepareIndex("test", "parent", "1").setSource("{}", XContentType.JSON).get(); - client().prepareIndex("test", "child", "1").setParent("1").setSource("{}", XContentType.JSON).get(); - refresh(); - - try { - client().prepareSearch("test") - .setQuery(hasChildQuery("child", matchAllQuery(), ScoreMode.None)) - .get(); - fail(); - } catch (SearchPhaseExecutionException e) { - } - } - - /* - Test for https://github.com/elastic/elasticsearch/issues/3444 - */ - public void testBulkUpdateDocAsUpsertWithParent() throws Exception { - assertAcked(prepareCreate("test") - .addMapping("parent", "{\"parent\":{}}", XContentType.JSON) - .addMapping("child", "{\"child\": {\"_parent\": {\"type\": \"parent\"}}}", XContentType.JSON)); - ensureGreen(); - - BulkRequestBuilder builder = client().prepareBulk(); - - // It's important to use JSON parsing here and request objects: issue 3444 is related to incomplete option parsing - byte[] addParent = ( - "{" + - " \"index\" : {" + - " \"_index\" : \"test\"," + - " \"_type\" : \"parent\"," + - " \"_id\" : \"parent1\"" + - " }" + - "}" + - "\n" + - "{" + - " \"field1\" : \"value1\"" + - "}" + - "\n").getBytes(StandardCharsets.UTF_8); - - byte[] addChild = ( - "{" + - " \"update\" : {" + - " \"_index\" : \"test\"," + - " \"_type\" : \"child\"," + - " \"_id\" : \"child1\"," + - " \"parent\" : \"parent1\"" + - " }" + - "}" + - "\n" + - "{" + - " \"doc\" : {" + - " \"field1\" : \"value1\"" + - " }," + - " \"doc_as_upsert\" : \"true\"" + - "}" + - "\n").getBytes(StandardCharsets.UTF_8); - - builder.add(addParent, 0, addParent.length, XContentType.JSON); - builder.add(addChild, 0, addChild.length, XContentType.JSON); - - BulkResponse bulkResponse = builder.get(); - assertThat(bulkResponse.getItems().length, equalTo(2)); - assertThat(bulkResponse.getItems()[0].isFailed(), equalTo(false)); - assertThat(bulkResponse.getItems()[1].isFailed(), equalTo(false)); - - client().admin().indices().prepareRefresh("test").get(); - - //we check that the _parent field was set on the child document by using the has parent query - SearchResponse searchResponse = client().prepareSearch("test") - .setQuery(hasParentQuery("parent", QueryBuilders.matchAllQuery(), false)) - .get(); - - assertNoFailures(searchResponse); - assertSearchHits(searchResponse, "child1"); - } - - /* - Test for https://github.com/elastic/elasticsearch/issues/3444 - */ - public void testBulkUpdateUpsertWithParent() throws Exception { - assertAcked(prepareCreate("test") - .addMapping("parent", "{\"parent\":{}}", XContentType.JSON) - .addMapping("child", "{\"child\": {\"_parent\": {\"type\": \"parent\"}}}", XContentType.JSON)); - ensureGreen(); - - BulkRequestBuilder builder = client().prepareBulk(); - - byte[] addParent = ( - "{" + - " \"index\" : {" + - " \"_index\" : \"test\"," + - " \"_type\" : \"parent\"," + - " \"_id\" : \"parent1\"" + - " }" + - "}" + - "\n" + - "{" + - " \"field1\" : \"value1\"" + - "}" + - "\n").getBytes(StandardCharsets.UTF_8); - - byte[] addChild1 = ( - "{" + - " \"update\" : {" + - " \"_index\" : \"test\"," + - " \"_type\" : \"child\"," + - " \"_id\" : \"child1\"," + - " \"parent\" : \"parent1\"" + - " }" + - "}" + - "\n" + - "{" + - " \"script\" : {" + - " \"inline\" : \"ctx._source.field2 = 'value2'\"" + - " }," + - " \"lang\" : \"" + InnerHitsIT.CustomScriptPlugin.NAME + "\"," + - " \"upsert\" : {" + - " \"field1\" : \"value1'\"" + - " }" + - "}" + - "\n").getBytes(StandardCharsets.UTF_8); - - byte[] addChild2 = ( - "{" + - " \"update\" : {" + - " \"_index\" : \"test\"," + - " \"_type\" : \"child\"," + - " \"_id\" : \"child1\"," + - " \"parent\" : \"parent1\"" + - " }" + - "}" + - "\n" + - "{" + - " \"script\" : \"ctx._source.field2 = 'value2'\"," + - " \"upsert\" : {" + - " \"field1\" : \"value1'\"" + - " }" + - "}" + - "\n").getBytes(StandardCharsets.UTF_8); - - builder.add(addParent, 0, addParent.length, XContentType.JSON); - builder.add(addChild1, 0, addChild1.length, XContentType.JSON); - builder.add(addChild2, 0, addChild2.length, XContentType.JSON); - - BulkResponse bulkResponse = builder.get(); - assertThat(bulkResponse.getItems().length, equalTo(3)); - assertThat(bulkResponse.getItems()[0].isFailed(), equalTo(false)); - assertThat(bulkResponse.getItems()[1].isFailed(), equalTo(false)); - assertThat(bulkResponse.getItems()[2].isFailed(), equalTo(true)); - assertThat(bulkResponse.getItems()[2].getFailure().getCause().getCause().getMessage(), - equalTo("script_lang not supported [painless]")); - - client().admin().indices().prepareRefresh("test").get(); - - SearchResponse searchResponse = client().prepareSearch("test") - .setQuery(hasParentQuery("parent", QueryBuilders.matchAllQuery(), false)) - .get(); - - assertSearchHits(searchResponse, "child1"); - } - -} diff --git a/modules/parent-join/src/test/java/org/elasticsearch/join/query/LegacyHasChildQueryBuilderTests.java b/modules/parent-join/src/test/java/org/elasticsearch/join/query/LegacyHasChildQueryBuilderTests.java deleted file mode 100644 index 3eb16a925676c..0000000000000 --- a/modules/parent-join/src/test/java/org/elasticsearch/join/query/LegacyHasChildQueryBuilderTests.java +++ /dev/null @@ -1,353 +0,0 @@ -/* - * Licensed to Elasticsearch under one or more contributor - * license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright - * ownership. Elasticsearch licenses this file to you under - * the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package org.elasticsearch.join.query; - -import com.carrotsearch.randomizedtesting.generators.RandomPicks; -import org.apache.lucene.search.BooleanClause; -import org.apache.lucene.search.BooleanQuery; -import org.apache.lucene.search.ConstantScoreQuery; -import org.apache.lucene.search.MatchNoDocsQuery; -import org.apache.lucene.search.Query; -import org.apache.lucene.search.TermInSetQuery; -import org.apache.lucene.search.TermQuery; -import org.apache.lucene.search.join.ScoreMode; -import org.apache.lucene.search.similarities.PerFieldSimilarityWrapper; -import org.apache.lucene.search.similarities.Similarity; -import org.apache.lucene.util.BytesRef; -import org.elasticsearch.Version; -import org.elasticsearch.action.admin.indices.mapping.put.PutMappingRequest; -import org.elasticsearch.cluster.metadata.IndexMetaData; -import org.elasticsearch.common.Strings; -import org.elasticsearch.common.compress.CompressedXContent; -import org.elasticsearch.common.settings.Settings; -import org.elasticsearch.index.mapper.MapperService; -import org.elasticsearch.index.mapper.TypeFieldMapper; -import org.elasticsearch.index.mapper.Uid; -import org.elasticsearch.index.mapper.UidFieldMapper; -import org.elasticsearch.index.query.IdsQueryBuilder; -import org.elasticsearch.index.query.InnerHitBuilder; -import org.elasticsearch.index.query.InnerHitContextBuilder; -import org.elasticsearch.index.query.MatchAllQueryBuilder; -import org.elasticsearch.index.query.QueryBuilder; -import org.elasticsearch.index.query.QueryShardContext; -import org.elasticsearch.index.query.QueryShardException; -import org.elasticsearch.index.query.TermQueryBuilder; -import org.elasticsearch.index.query.WrapperQueryBuilder; -import org.elasticsearch.index.similarity.SimilarityService; -import org.elasticsearch.join.ParentJoinPlugin; -import org.elasticsearch.plugins.Plugin; -import org.elasticsearch.search.fetch.subphase.InnerHitsContext; -import org.elasticsearch.search.internal.SearchContext; -import org.elasticsearch.search.sort.FieldSortBuilder; -import org.elasticsearch.search.sort.SortOrder; -import org.elasticsearch.test.AbstractQueryTestCase; -import org.elasticsearch.test.VersionUtils; - -import java.io.IOException; -import java.util.Collection; -import java.util.Collections; -import java.util.HashMap; -import java.util.Map; - -import static org.elasticsearch.join.query.JoinQueryBuilders.hasChildQuery; -import static org.hamcrest.CoreMatchers.containsString; -import static org.hamcrest.CoreMatchers.equalTo; -import static org.hamcrest.CoreMatchers.instanceOf; -import static org.hamcrest.CoreMatchers.notNullValue; - -public class LegacyHasChildQueryBuilderTests extends AbstractQueryTestCase { - protected static final String PARENT_TYPE = "parent"; - protected static final String CHILD_TYPE = "child"; - - private static String similarity; - - boolean requiresRewrite = false; - - @Override - protected Collection> getPlugins() { - return Collections.singletonList(ParentJoinPlugin.class); - } - - @Override - protected void initializeAdditionalMappings(MapperService mapperService) throws IOException { - similarity = randomFrom("boolean", "BM25"); - // TODO: use a single type when inner hits have been changed to work with join field, - // this test randomly generates queries with inner hits - mapperService.merge(PARENT_TYPE, new CompressedXContent(Strings.toString(PutMappingRequest.buildFromSimplifiedDef(PARENT_TYPE, - STRING_FIELD_NAME, "type=text", - STRING_FIELD_NAME_2, "type=keyword", - INT_FIELD_NAME, "type=integer", - DOUBLE_FIELD_NAME, "type=double", - BOOLEAN_FIELD_NAME, "type=boolean", - DATE_FIELD_NAME, "type=date", - OBJECT_FIELD_NAME, "type=object" - ))), MapperService.MergeReason.MAPPING_UPDATE); - mapperService.merge(CHILD_TYPE, new CompressedXContent(Strings.toString(PutMappingRequest.buildFromSimplifiedDef(CHILD_TYPE, - "_parent", "type=" + PARENT_TYPE, - STRING_FIELD_NAME, "type=text", - "custom_string", "type=text,similarity=" + similarity, - INT_FIELD_NAME, "type=integer", - DOUBLE_FIELD_NAME, "type=double", - BOOLEAN_FIELD_NAME, "type=boolean", - DATE_FIELD_NAME, "type=date", - OBJECT_FIELD_NAME, "type=object" - ))), MapperService.MergeReason.MAPPING_UPDATE); - } - - @Override - protected Settings indexSettings() { - return Settings.builder() - .put(super.indexSettings()) - .put("index.version.created", Version.V_5_6_0) // multi type - .build(); - } - - /** - * @return a {@link HasChildQueryBuilder} with random values all over the place - */ - @Override - protected HasChildQueryBuilder doCreateTestQueryBuilder() { - int min = randomIntBetween(0, Integer.MAX_VALUE / 2); - int max = randomIntBetween(min, Integer.MAX_VALUE); - - QueryBuilder innerQueryBuilder = new MatchAllQueryBuilder(); - if (randomBoolean()) { - requiresRewrite = true; - innerQueryBuilder = new WrapperQueryBuilder(innerQueryBuilder.toString()); - } - - HasChildQueryBuilder hqb = new HasChildQueryBuilder(CHILD_TYPE, innerQueryBuilder, - RandomPicks.randomFrom(random(), ScoreMode.values())); - hqb.minMaxChildren(min, max); - hqb.ignoreUnmapped(randomBoolean()); - if (randomBoolean()) { - hqb.innerHit(new InnerHitBuilder() - .setName(randomAlphaOfLengthBetween(1, 10)) - .setSize(randomIntBetween(0, 100)) - .addSort(new FieldSortBuilder(STRING_FIELD_NAME_2).order(SortOrder.ASC)) - .setIgnoreUnmapped(hqb.ignoreUnmapped())); - } - return hqb; - } - - @Override - protected void doAssertLuceneQuery(HasChildQueryBuilder queryBuilder, Query query, SearchContext searchContext) throws IOException { - assertThat(query, instanceOf(HasChildQueryBuilder.LateParsingQuery.class)); - HasChildQueryBuilder.LateParsingQuery lpq = (HasChildQueryBuilder.LateParsingQuery) query; - assertEquals(queryBuilder.minChildren(), lpq.getMinChildren()); - assertEquals(queryBuilder.maxChildren(), lpq.getMaxChildren()); - assertEquals(queryBuilder.scoreMode(), lpq.getScoreMode()); // WTF is this why do we have two? - if (queryBuilder.innerHit() != null) { - // have to rewrite again because the provided queryBuilder hasn't been rewritten (directly returned from - // doCreateTestQueryBuilder) - queryBuilder = (HasChildQueryBuilder) queryBuilder.rewrite(searchContext.getQueryShardContext()); - Map innerHitBuilders = new HashMap<>(); - InnerHitContextBuilder.extractInnerHits(queryBuilder, innerHitBuilders); - for (InnerHitContextBuilder builder : innerHitBuilders.values()) { - builder.build(searchContext, searchContext.innerHits()); - } - assertNotNull(searchContext.innerHits()); - assertEquals(1, searchContext.innerHits().getInnerHits().size()); - assertTrue(searchContext.innerHits().getInnerHits().containsKey(queryBuilder.innerHit().getName())); - InnerHitsContext.InnerHitSubContext innerHits = - searchContext.innerHits().getInnerHits().get(queryBuilder.innerHit().getName()); - assertEquals(innerHits.size(), queryBuilder.innerHit().getSize()); - assertEquals(innerHits.sort().sort.getSort().length, 1); - assertEquals(innerHits.sort().sort.getSort()[0].getField(), STRING_FIELD_NAME_2); - } - } - - /** - * Test (de)serialization on all previous released versions - */ - public void testSerializationBWC() throws IOException { - for (Version version : VersionUtils.allReleasedVersions()) { - HasChildQueryBuilder testQuery = createTestQueryBuilder(); - if (version.before(Version.V_5_2_0) && testQuery.innerHit() != null) { - // ignore unmapped for inner_hits has been added on 5.2 - testQuery.innerHit().setIgnoreUnmapped(false); - } - assertSerialization(testQuery, version); - } - } - - public void testIllegalValues() { - QueryBuilder query = new MatchAllQueryBuilder(); - IllegalArgumentException e = expectThrows(IllegalArgumentException.class, - () -> hasChildQuery(null, query, ScoreMode.None)); - assertEquals("[has_child] requires 'type' field", e.getMessage()); - - e = expectThrows(IllegalArgumentException.class, () -> hasChildQuery("foo", null, ScoreMode.None)); - assertEquals("[has_child] requires 'query' field", e.getMessage()); - - e = expectThrows(IllegalArgumentException.class, () -> hasChildQuery("foo", query, null)); - assertEquals("[has_child] requires 'score_mode' field", e.getMessage()); - - int positiveValue = randomIntBetween(0, Integer.MAX_VALUE); - HasChildQueryBuilder foo = hasChildQuery("foo", query, ScoreMode.None); // all good - e = expectThrows(IllegalArgumentException.class, () -> foo.minMaxChildren(randomIntBetween(Integer.MIN_VALUE, -1), positiveValue)); - assertEquals("[has_child] requires non-negative 'min_children' field", e.getMessage()); - - e = expectThrows(IllegalArgumentException.class, () -> foo.minMaxChildren(positiveValue, randomIntBetween(Integer.MIN_VALUE, -1))); - assertEquals("[has_child] requires non-negative 'max_children' field", e.getMessage()); - - e = expectThrows(IllegalArgumentException.class, () -> foo.minMaxChildren(positiveValue, positiveValue - 10)); - assertEquals("[has_child] 'max_children' is less than 'min_children'", e.getMessage()); - } - - public void testFromJson() throws IOException { - String query = - "{\n" + - " \"has_child\" : {\n" + - " \"query\" : {\n" + - " \"range\" : {\n" + - " \"mapped_string\" : {\n" + - " \"from\" : \"agJhRET\",\n" + - " \"to\" : \"zvqIq\",\n" + - " \"include_lower\" : true,\n" + - " \"include_upper\" : true,\n" + - " \"boost\" : 1.0\n" + - " }\n" + - " }\n" + - " },\n" + - " \"type\" : \"child\",\n" + - " \"score_mode\" : \"avg\",\n" + - " \"min_children\" : 883170873,\n" + - " \"max_children\" : 1217235442,\n" + - " \"ignore_unmapped\" : false,\n" + - " \"boost\" : 2.0,\n" + - " \"_name\" : \"WNzYMJKRwePuRBh\",\n" + - " \"inner_hits\" : {\n" + - " \"name\" : \"inner_hits_name\",\n" + - " \"ignore_unmapped\" : false,\n" + - " \"from\" : 0,\n" + - " \"size\" : 100,\n" + - " \"version\" : false,\n" + - " \"explain\" : false,\n" + - " \"track_scores\" : false,\n" + - " \"sort\" : [ {\n" + - " \"mapped_string\" : {\n" + - " \"order\" : \"asc\"\n" + - " }\n" + - " } ]\n" + - " }\n" + - " }\n" + - "}"; - HasChildQueryBuilder queryBuilder = (HasChildQueryBuilder) parseQuery(query); - checkGeneratedJson(query, queryBuilder); - assertEquals(query, queryBuilder.maxChildren(), 1217235442); - assertEquals(query, queryBuilder.minChildren(), 883170873); - assertEquals(query, queryBuilder.boost(), 2.0f, 0.0f); - assertEquals(query, queryBuilder.queryName(), "WNzYMJKRwePuRBh"); - assertEquals(query, queryBuilder.childType(), "child"); - assertEquals(query, queryBuilder.scoreMode(), ScoreMode.Avg); - assertNotNull(query, queryBuilder.innerHit()); - InnerHitBuilder expected = new InnerHitBuilder("child") - .setName("inner_hits_name") - .setSize(100) - .addSort(new FieldSortBuilder("mapped_string").order(SortOrder.ASC)); - assertEquals(query, queryBuilder.innerHit(), expected); - } - - public void testToQueryInnerQueryType() throws IOException { - String[] searchTypes = new String[]{PARENT_TYPE}; - QueryShardContext shardContext = createShardContext(); - shardContext.setTypes(searchTypes); - HasChildQueryBuilder hasChildQueryBuilder = hasChildQuery(CHILD_TYPE, new IdsQueryBuilder().addIds("id"), ScoreMode.None); - Query query = hasChildQueryBuilder.toQuery(shardContext); - //verify that the context types are still the same as the ones we previously set - assertThat(shardContext.getTypes(), equalTo(searchTypes)); - assertLateParsingQuery(query, CHILD_TYPE, "id"); - } - - static void assertLateParsingQuery(Query query, String type, String id) throws IOException { - assertThat(query, instanceOf(HasChildQueryBuilder.LateParsingQuery.class)); - HasChildQueryBuilder.LateParsingQuery lateParsingQuery = (HasChildQueryBuilder.LateParsingQuery) query; - assertThat(lateParsingQuery.getInnerQuery(), instanceOf(BooleanQuery.class)); - BooleanQuery booleanQuery = (BooleanQuery) lateParsingQuery.getInnerQuery(); - assertThat(booleanQuery.clauses().size(), equalTo(2)); - //check the inner ids query, we have to call rewrite to get to check the type it's executed against - assertThat(booleanQuery.clauses().get(0).getOccur(), equalTo(BooleanClause.Occur.MUST)); - assertThat(booleanQuery.clauses().get(0).getQuery(), instanceOf(TermInSetQuery.class)); - TermInSetQuery termsQuery = (TermInSetQuery) booleanQuery.clauses().get(0).getQuery(); - Query rewrittenTermsQuery = termsQuery.rewrite(null); - assertThat(rewrittenTermsQuery, instanceOf(ConstantScoreQuery.class)); - ConstantScoreQuery constantScoreQuery = (ConstantScoreQuery) rewrittenTermsQuery; - assertThat(constantScoreQuery.getQuery(), instanceOf(BooleanQuery.class)); - BooleanQuery booleanTermsQuery = (BooleanQuery) constantScoreQuery.getQuery(); - assertThat(booleanTermsQuery.clauses().toString(), booleanTermsQuery.clauses().size(), equalTo(1)); - assertThat(booleanTermsQuery.clauses().get(0).getOccur(), equalTo(BooleanClause.Occur.SHOULD)); - assertThat(booleanTermsQuery.clauses().get(0).getQuery(), instanceOf(TermQuery.class)); - TermQuery termQuery = (TermQuery) booleanTermsQuery.clauses().get(0).getQuery(); - assertThat(termQuery.getTerm().field(), equalTo(UidFieldMapper.NAME)); - //we want to make sure that the inner ids query gets executed against the child type rather - // than the main type we initially set to the context - BytesRef[] ids = Uid.createUidsForTypesAndIds(Collections.singletonList(type), Collections.singletonList(id)); - assertThat(termQuery.getTerm().bytes(), equalTo(ids[0])); - //check the type filter - assertThat(booleanQuery.clauses().get(1).getOccur(), equalTo(BooleanClause.Occur.FILTER)); - assertEquals(new TypeFieldMapper.TypesQuery(new BytesRef(type)), booleanQuery.clauses().get(1).getQuery()); - } - - @Override - public void testMustRewrite() throws IOException { - try { - super.testMustRewrite(); - } catch (UnsupportedOperationException e) { - if (requiresRewrite == false) { - throw e; - } - } - } - - public void testNonDefaultSimilarity() throws Exception { - QueryShardContext shardContext = createShardContext(); - HasChildQueryBuilder hasChildQueryBuilder = - hasChildQuery(CHILD_TYPE, new TermQueryBuilder("custom_string", "value"), ScoreMode.None); - HasChildQueryBuilder.LateParsingQuery query = (HasChildQueryBuilder.LateParsingQuery) hasChildQueryBuilder.toQuery(shardContext); - Similarity expected = SimilarityService.BUILT_IN.get(similarity) - .apply(Settings.EMPTY, Version.CURRENT, null); - assertThat(((PerFieldSimilarityWrapper) query.getSimilarity()).get("custom_string"), instanceOf(expected.getClass())); - } - - public void testIgnoreUnmapped() throws IOException { - final HasChildQueryBuilder queryBuilder = new HasChildQueryBuilder("unmapped", new MatchAllQueryBuilder(), ScoreMode.None); - queryBuilder.ignoreUnmapped(true); - Query query = queryBuilder.toQuery(createShardContext()); - assertThat(query, notNullValue()); - assertThat(query, instanceOf(MatchNoDocsQuery.class)); - - final HasChildQueryBuilder failingQueryBuilder = new HasChildQueryBuilder("unmapped", new MatchAllQueryBuilder(), ScoreMode.None); - failingQueryBuilder.ignoreUnmapped(false); - QueryShardException e = expectThrows(QueryShardException.class, () -> failingQueryBuilder.toQuery(createShardContext())); - assertThat(e.getMessage(), containsString("[" + HasChildQueryBuilder.NAME + "] no mapping found for type [unmapped]")); - } - - public void testIgnoreUnmappedWithRewrite() throws IOException { - // WrapperQueryBuilder makes sure we always rewrite - final HasChildQueryBuilder queryBuilder - = new HasChildQueryBuilder("unmapped", new WrapperQueryBuilder(new MatchAllQueryBuilder().toString()), ScoreMode.None); - queryBuilder.ignoreUnmapped(true); - QueryShardContext queryShardContext = createShardContext(); - Query query = queryBuilder.rewrite(queryShardContext).toQuery(queryShardContext); - assertThat(query, notNullValue()); - assertThat(query, instanceOf(MatchNoDocsQuery.class)); - } -} diff --git a/modules/parent-join/src/test/java/org/elasticsearch/join/query/LegacyHasParentQueryBuilderTests.java b/modules/parent-join/src/test/java/org/elasticsearch/join/query/LegacyHasParentQueryBuilderTests.java deleted file mode 100644 index 468c1f48ea4f0..0000000000000 --- a/modules/parent-join/src/test/java/org/elasticsearch/join/query/LegacyHasParentQueryBuilderTests.java +++ /dev/null @@ -1,258 +0,0 @@ -/* - * Licensed to Elasticsearch under one or more contributor - * license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright - * ownership. Elasticsearch licenses this file to you under - * the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package org.elasticsearch.join.query; - -import org.apache.lucene.search.MatchNoDocsQuery; -import org.apache.lucene.search.Query; -import org.apache.lucene.search.join.ScoreMode; -import org.elasticsearch.Version; -import org.elasticsearch.action.admin.indices.mapping.put.PutMappingRequest; -import org.elasticsearch.common.Strings; -import org.elasticsearch.common.compress.CompressedXContent; -import org.elasticsearch.common.settings.Settings; -import org.elasticsearch.index.mapper.MapperService; -import org.elasticsearch.index.query.IdsQueryBuilder; -import org.elasticsearch.index.query.InnerHitBuilder; -import org.elasticsearch.index.query.InnerHitContextBuilder; -import org.elasticsearch.index.query.MatchAllQueryBuilder; -import org.elasticsearch.index.query.QueryBuilder; -import org.elasticsearch.index.query.QueryShardContext; -import org.elasticsearch.index.query.QueryShardException; -import org.elasticsearch.index.query.TermQueryBuilder; -import org.elasticsearch.index.query.WrapperQueryBuilder; -import org.elasticsearch.join.ParentJoinPlugin; -import org.elasticsearch.plugins.Plugin; -import org.elasticsearch.search.fetch.subphase.InnerHitsContext; -import org.elasticsearch.search.internal.SearchContext; -import org.elasticsearch.search.sort.FieldSortBuilder; -import org.elasticsearch.search.sort.SortOrder; -import org.elasticsearch.test.AbstractQueryTestCase; -import org.elasticsearch.test.VersionUtils; - -import java.io.IOException; -import java.util.Collection; -import java.util.Collections; -import java.util.HashMap; -import java.util.Map; - -import static org.elasticsearch.join.query.JoinQueryBuilders.hasParentQuery; -import static org.hamcrest.CoreMatchers.containsString; -import static org.hamcrest.CoreMatchers.equalTo; -import static org.hamcrest.CoreMatchers.instanceOf; -import static org.hamcrest.CoreMatchers.notNullValue; - -public class LegacyHasParentQueryBuilderTests extends AbstractQueryTestCase { - protected static final String PARENT_TYPE = "parent"; - protected static final String CHILD_TYPE = "child"; - - boolean requiresRewrite = false; - - @Override - protected Collection> getPlugins() { - return Collections.singletonList(ParentJoinPlugin.class); - } - - @Override - protected Settings indexSettings() { - return Settings.builder() - .put(super.indexSettings()) - .put("index.version.created", Version.V_5_6_0) // legacy needs multi types - .build(); - } - - @Override - protected void initializeAdditionalMappings(MapperService mapperService) throws IOException { - // TODO: use a single type when inner hits have been changed to work with join field, - // this test randomly generates queries with inner hits - mapperService.merge(PARENT_TYPE, new CompressedXContent(Strings.toString(PutMappingRequest.buildFromSimplifiedDef(PARENT_TYPE, - STRING_FIELD_NAME, "type=text", - STRING_FIELD_NAME_2, "type=keyword", - INT_FIELD_NAME, "type=integer", - DOUBLE_FIELD_NAME, "type=double", - BOOLEAN_FIELD_NAME, "type=boolean", - DATE_FIELD_NAME, "type=date", - OBJECT_FIELD_NAME, "type=object" - ))), MapperService.MergeReason.MAPPING_UPDATE); - mapperService.merge(CHILD_TYPE, new CompressedXContent(Strings.toString(PutMappingRequest.buildFromSimplifiedDef(CHILD_TYPE, - "_parent", "type=" + PARENT_TYPE, - STRING_FIELD_NAME, "type=text", - STRING_FIELD_NAME_2, "type=keyword", - INT_FIELD_NAME, "type=integer", - DOUBLE_FIELD_NAME, "type=double", - BOOLEAN_FIELD_NAME, "type=boolean", - DATE_FIELD_NAME, "type=date", - OBJECT_FIELD_NAME, "type=object" - ))), MapperService.MergeReason.MAPPING_UPDATE); - mapperService.merge("just_a_type", new CompressedXContent(Strings.toString(PutMappingRequest.buildFromSimplifiedDef("just_a_type" - ))), MapperService.MergeReason.MAPPING_UPDATE); - } - - /** - * @return a {@link HasChildQueryBuilder} with random values all over the place - */ - @Override - protected HasParentQueryBuilder doCreateTestQueryBuilder() { - QueryBuilder innerQueryBuilder = new MatchAllQueryBuilder(); - if (randomBoolean()) { - requiresRewrite = true; - innerQueryBuilder = new WrapperQueryBuilder(innerQueryBuilder.toString()); - } - HasParentQueryBuilder hqb = new HasParentQueryBuilder(PARENT_TYPE, innerQueryBuilder, randomBoolean()); - hqb.ignoreUnmapped(randomBoolean()); - if (randomBoolean()) { - hqb.innerHit(new InnerHitBuilder() - .setName(randomAlphaOfLengthBetween(1, 10)) - .setSize(randomIntBetween(0, 100)) - .addSort(new FieldSortBuilder(STRING_FIELD_NAME_2).order(SortOrder.ASC)) - .setIgnoreUnmapped(hqb.ignoreUnmapped())); - } - return hqb; - } - - @Override - protected void doAssertLuceneQuery(HasParentQueryBuilder queryBuilder, Query query, SearchContext searchContext) throws IOException { - assertThat(query, instanceOf(HasChildQueryBuilder.LateParsingQuery.class)); - HasChildQueryBuilder.LateParsingQuery lpq = (HasChildQueryBuilder.LateParsingQuery) query; - assertEquals(queryBuilder.score() ? ScoreMode.Max : ScoreMode.None, lpq.getScoreMode()); - - if (queryBuilder.innerHit() != null) { - // have to rewrite again because the provided queryBuilder hasn't been rewritten (directly returned from - // doCreateTestQueryBuilder) - queryBuilder = (HasParentQueryBuilder) queryBuilder.rewrite(searchContext.getQueryShardContext()); - - assertNotNull(searchContext); - Map innerHitBuilders = new HashMap<>(); - InnerHitContextBuilder.extractInnerHits(queryBuilder, innerHitBuilders); - for (InnerHitContextBuilder builder : innerHitBuilders.values()) { - builder.build(searchContext, searchContext.innerHits()); - } - assertNotNull(searchContext.innerHits()); - assertEquals(1, searchContext.innerHits().getInnerHits().size()); - assertTrue(searchContext.innerHits().getInnerHits().containsKey(queryBuilder.innerHit().getName())); - InnerHitsContext.InnerHitSubContext innerHits = searchContext.innerHits() - .getInnerHits().get(queryBuilder.innerHit().getName()); - assertEquals(innerHits.size(), queryBuilder.innerHit().getSize()); - assertEquals(innerHits.sort().sort.getSort().length, 1); - assertEquals(innerHits.sort().sort.getSort()[0].getField(), STRING_FIELD_NAME_2); - } - } - - /** - * Test (de)serialization on all previous released versions - */ - public void testSerializationBWC() throws IOException { - for (Version version : VersionUtils.allReleasedVersions()) { - HasParentQueryBuilder testQuery = createTestQueryBuilder(); - if (version.before(Version.V_5_2_0) && testQuery.innerHit() != null) { - // ignore unmapped for inner_hits has been added on 5.2 - testQuery.innerHit().setIgnoreUnmapped(false); - } - assertSerialization(testQuery, version); - } - } - - public void testIllegalValues() throws IOException { - QueryBuilder query = new MatchAllQueryBuilder(); - IllegalArgumentException e = expectThrows(IllegalArgumentException.class, - () -> hasParentQuery(null, query, false)); - assertThat(e.getMessage(), equalTo("[has_parent] requires 'type' field")); - - e = expectThrows(IllegalArgumentException.class, - () -> hasParentQuery("foo", null, false)); - assertThat(e.getMessage(), equalTo("[has_parent] requires 'query' field")); - - QueryShardContext context = createShardContext(); - HasParentQueryBuilder qb = hasParentQuery("just_a_type", new MatchAllQueryBuilder(), false); - QueryShardException qse = expectThrows(QueryShardException.class, () -> qb.doToQuery(context)); - assertThat(qse.getMessage(), equalTo("[has_parent] no child types found for type [just_a_type]")); - } - - public void testToQueryInnerQueryType() throws IOException { - String[] searchTypes = new String[]{CHILD_TYPE}; - QueryShardContext shardContext = createShardContext(); - shardContext.setTypes(searchTypes); - HasParentQueryBuilder hasParentQueryBuilder = new HasParentQueryBuilder(PARENT_TYPE, new IdsQueryBuilder().addIds("id"), - false); - Query query = hasParentQueryBuilder.toQuery(shardContext); - //verify that the context types are still the same as the ones we previously set - assertThat(shardContext.getTypes(), equalTo(searchTypes)); - LegacyHasChildQueryBuilderTests.assertLateParsingQuery(query, PARENT_TYPE, "id"); - } - - @Override - public void testMustRewrite() throws IOException { - try { - super.testMustRewrite(); - } catch (UnsupportedOperationException e) { - if (requiresRewrite == false) { - throw e; - } - } - } - - public void testFromJson() throws IOException { - String json = - "{\n" + - " \"has_parent\" : {\n" + - " \"query\" : {\n" + - " \"term\" : {\n" + - " \"tag\" : {\n" + - " \"value\" : \"something\",\n" + - " \"boost\" : 1.0\n" + - " }\n" + - " }\n" + - " },\n" + - " \"parent_type\" : \"blog\",\n" + - " \"score\" : true,\n" + - " \"ignore_unmapped\" : false,\n" + - " \"boost\" : 1.0\n" + - " }\n" + - "}"; - HasParentQueryBuilder parsed = (HasParentQueryBuilder) parseQuery(json); - checkGeneratedJson(json, parsed); - assertEquals(json, "blog", parsed.type()); - assertEquals(json, "something", ((TermQueryBuilder) parsed.query()).value()); - } - - public void testIgnoreUnmapped() throws IOException { - final HasParentQueryBuilder queryBuilder = new HasParentQueryBuilder("unmapped", new MatchAllQueryBuilder(), false); - queryBuilder.ignoreUnmapped(true); - Query query = queryBuilder.toQuery(createShardContext()); - assertThat(query, notNullValue()); - assertThat(query, instanceOf(MatchNoDocsQuery.class)); - - final HasParentQueryBuilder failingQueryBuilder = new HasParentQueryBuilder("unmapped", new MatchAllQueryBuilder(), false); - failingQueryBuilder.ignoreUnmapped(false); - QueryShardException e = expectThrows(QueryShardException.class, () -> failingQueryBuilder.toQuery(createShardContext())); - assertThat(e.getMessage(), - containsString("[" + HasParentQueryBuilder.NAME + "] query configured 'parent_type' [unmapped] is not a valid type")); - } - - public void testIgnoreUnmappedWithRewrite() throws IOException { - // WrapperQueryBuilder makes sure we always rewrite - final HasParentQueryBuilder queryBuilder = - new HasParentQueryBuilder("unmapped", new WrapperQueryBuilder(new MatchAllQueryBuilder().toString()), false); - queryBuilder.ignoreUnmapped(true); - QueryShardContext queryShardContext = createShardContext(); - Query query = queryBuilder.rewrite(queryShardContext).toQuery(queryShardContext); - assertThat(query, notNullValue()); - assertThat(query, instanceOf(MatchNoDocsQuery.class)); - } -} diff --git a/modules/parent-join/src/test/java/org/elasticsearch/join/query/LegacyInnerHitsIT.java b/modules/parent-join/src/test/java/org/elasticsearch/join/query/LegacyInnerHitsIT.java deleted file mode 100644 index 7dff631837393..0000000000000 --- a/modules/parent-join/src/test/java/org/elasticsearch/join/query/LegacyInnerHitsIT.java +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Licensed to Elasticsearch under one or more contributor - * license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright - * ownership. Elasticsearch licenses this file to you under - * the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.elasticsearch.join.query; - -public class LegacyInnerHitsIT extends InnerHitsIT { - - @Override - protected boolean legacy() { - return true; - } - -} diff --git a/modules/parent-join/src/test/java/org/elasticsearch/join/query/LegacyParentIdQueryBuilderTests.java b/modules/parent-join/src/test/java/org/elasticsearch/join/query/LegacyParentIdQueryBuilderTests.java deleted file mode 100644 index 961ae943475a5..0000000000000 --- a/modules/parent-join/src/test/java/org/elasticsearch/join/query/LegacyParentIdQueryBuilderTests.java +++ /dev/null @@ -1,121 +0,0 @@ -/* - * Licensed to Elasticsearch under one or more contributor - * license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright - * ownership. Elasticsearch licenses this file to you under - * the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package org.elasticsearch.join.query; - -import org.apache.lucene.search.BooleanQuery; -import org.apache.lucene.search.DocValuesTermsQuery; -import org.apache.lucene.search.MatchNoDocsQuery; -import org.apache.lucene.search.Query; -import org.apache.lucene.search.TermQuery; -import org.elasticsearch.Version; -import org.elasticsearch.action.admin.indices.mapping.put.PutMappingRequest; -import org.elasticsearch.common.Strings; -import org.elasticsearch.common.compress.CompressedXContent; -import org.elasticsearch.common.settings.Settings; -import org.elasticsearch.index.mapper.MapperService; -import org.elasticsearch.index.mapper.TypeFieldMapper; -import org.elasticsearch.index.query.QueryShardException; -import org.elasticsearch.join.ParentJoinPlugin; -import org.elasticsearch.plugins.Plugin; -import org.elasticsearch.search.internal.SearchContext; -import org.elasticsearch.test.AbstractQueryTestCase; -import org.hamcrest.Matchers; - -import java.io.IOException; -import java.util.Collection; -import java.util.Collections; - -import static org.hamcrest.CoreMatchers.containsString; -import static org.hamcrest.CoreMatchers.instanceOf; -import static org.hamcrest.CoreMatchers.notNullValue; - -public class LegacyParentIdQueryBuilderTests extends AbstractQueryTestCase { - - protected static final String PARENT_TYPE = "parent"; - protected static final String CHILD_TYPE = "child"; - - @Override - protected Collection> getPlugins() { - return Collections.singletonList(ParentJoinPlugin.class); - } - - @Override - protected Settings indexSettings() { - return Settings.builder() - .put(super.indexSettings()) - .put("index.version.created", Version.V_5_6_0) // legacy needs multi type - .build(); - } - - @Override - protected void initializeAdditionalMappings(MapperService mapperService) throws IOException { - mapperService.merge(PARENT_TYPE, new CompressedXContent(Strings.toString(PutMappingRequest.buildFromSimplifiedDef(PARENT_TYPE, - STRING_FIELD_NAME, "type=text", - INT_FIELD_NAME, "type=integer", - DOUBLE_FIELD_NAME, "type=double", - BOOLEAN_FIELD_NAME, "type=boolean", - DATE_FIELD_NAME, "type=date", - OBJECT_FIELD_NAME, "type=object" - ))), MapperService.MergeReason.MAPPING_UPDATE); - mapperService.merge(CHILD_TYPE, new CompressedXContent(Strings.toString(PutMappingRequest.buildFromSimplifiedDef(CHILD_TYPE, - "_parent", "type=" + PARENT_TYPE, - STRING_FIELD_NAME, "type=text", - INT_FIELD_NAME, "type=integer", - DOUBLE_FIELD_NAME, "type=double", - BOOLEAN_FIELD_NAME, "type=boolean", - DATE_FIELD_NAME, "type=date", - OBJECT_FIELD_NAME, "type=object" - ))), MapperService.MergeReason.MAPPING_UPDATE); - } - - @Override - protected ParentIdQueryBuilder doCreateTestQueryBuilder() { - return new ParentIdQueryBuilder(CHILD_TYPE, randomAlphaOfLength(4)).ignoreUnmapped(randomBoolean()); - } - - @Override - protected void doAssertLuceneQuery(ParentIdQueryBuilder queryBuilder, Query query, SearchContext context) throws IOException { - assertThat(query, Matchers.instanceOf(BooleanQuery.class)); - BooleanQuery booleanQuery = (BooleanQuery) query; - assertThat(booleanQuery.clauses().size(), Matchers.equalTo(2)); - DocValuesTermsQuery idQuery = (DocValuesTermsQuery) booleanQuery.clauses().get(0).getQuery(); - // there are no getters to get the field and terms on DocValuesTermsQuery, so lets validate by creating a - // new query based on the builder: - assertThat(idQuery, Matchers.equalTo(new DocValuesTermsQuery("_parent#" + PARENT_TYPE, queryBuilder.getId()))); - - TermQuery typeQuery = (TermQuery) booleanQuery.clauses().get(1).getQuery(); - assertThat(typeQuery.getTerm().field(), Matchers.equalTo(TypeFieldMapper.NAME)); - assertThat(typeQuery.getTerm().text(), Matchers.equalTo(queryBuilder.getType())); - } - - public void testIgnoreUnmapped() throws IOException { - final ParentIdQueryBuilder queryBuilder = new ParentIdQueryBuilder("unmapped", "foo"); - queryBuilder.ignoreUnmapped(true); - Query query = queryBuilder.toQuery(createShardContext()); - assertThat(query, notNullValue()); - assertThat(query, instanceOf(MatchNoDocsQuery.class)); - - final ParentIdQueryBuilder failingQueryBuilder = new ParentIdQueryBuilder("unmapped", "foo"); - failingQueryBuilder.ignoreUnmapped(false); - QueryShardException e = expectThrows(QueryShardException.class, () -> failingQueryBuilder.toQuery(createShardContext())); - assertThat(e.getMessage(), containsString("[" + ParentIdQueryBuilder.NAME + "] no mapping found for type [unmapped]")); - } - -} diff --git a/modules/parent-join/src/test/java/org/elasticsearch/join/query/ParentChildTestCase.java b/modules/parent-join/src/test/java/org/elasticsearch/join/query/ParentChildTestCase.java index 2e2cdfb200453..87b16bc448ef1 100644 --- a/modules/parent-join/src/test/java/org/elasticsearch/join/query/ParentChildTestCase.java +++ b/modules/parent-join/src/test/java/org/elasticsearch/join/query/ParentChildTestCase.java @@ -18,7 +18,6 @@ */ package org.elasticsearch.join.query; -import org.elasticsearch.Version; import org.elasticsearch.action.index.IndexRequestBuilder; import org.elasticsearch.common.Strings; import org.elasticsearch.common.settings.Settings; @@ -63,17 +62,9 @@ public Settings indexSettings() { .put(IndexModule.INDEX_QUERY_CACHE_ENABLED_SETTING.getKey(), true) .put(IndexModule.INDEX_QUERY_CACHE_EVERYTHING_SETTING.getKey(), true); - if (legacy()) { - builder.put("index.version.created", Version.V_5_6_0); - } - return builder.build(); } - protected boolean legacy() { - return false; - } - protected IndexRequestBuilder createIndexRequest(String index, String type, String id, String parentId, Object... fields) { Map source = new HashMap<>(); for (int i = 0; i < fields.length; i += 2) { @@ -123,28 +114,19 @@ public static Map addFieldMappings(Map map, Stri private IndexRequestBuilder createIndexRequest(String index, String type, String id, String parentId, Map source) { String name = type; - if (legacy() == false) { - type = "doc"; - } + type = "doc"; IndexRequestBuilder indexRequestBuilder = client().prepareIndex(index, type, id); - if (legacy()) { - if (parentId != null) { - indexRequestBuilder.setParent(parentId); - } - indexRequestBuilder.setSource(source); + Map joinField = new HashMap<>(); + if (parentId != null) { + joinField.put("name", name); + joinField.put("parent", parentId); + indexRequestBuilder.setRouting(parentId); } else { - Map joinField = new HashMap<>(); - if (parentId != null) { - joinField.put("name", name); - joinField.put("parent", parentId); - indexRequestBuilder.setRouting(parentId); - } else { - joinField.put("name", name); - } - source.put("join_field", joinField); - indexRequestBuilder.setSource(source); + joinField.put("name", name); } + source.put("join_field", joinField); + indexRequestBuilder.setSource(source); return indexRequestBuilder; } diff --git a/modules/percolator/src/main/java/org/elasticsearch/percolator/PercolateQueryBuilder.java b/modules/percolator/src/main/java/org/elasticsearch/percolator/PercolateQueryBuilder.java index 3ee163c8fc5a3..902d46c66aa65 100644 --- a/modules/percolator/src/main/java/org/elasticsearch/percolator/PercolateQueryBuilder.java +++ b/modules/percolator/src/main/java/org/elasticsearch/percolator/PercolateQueryBuilder.java @@ -69,7 +69,6 @@ import org.elasticsearch.index.fielddata.IndexFieldData; import org.elasticsearch.index.fielddata.IndexFieldDataCache; import org.elasticsearch.index.mapper.DocumentMapper; -import org.elasticsearch.index.mapper.DocumentMapperForType; import org.elasticsearch.index.mapper.MappedFieldType; import org.elasticsearch.index.mapper.MapperService; import org.elasticsearch.index.mapper.ParseContext; @@ -582,33 +581,22 @@ protected Query doToQuery(QueryShardContext context) throws IOException { final List docs = new ArrayList<>(); final DocumentMapper docMapper; final MapperService mapperService = context.getMapperService(); - if (context.getIndexSettings().isSingleType()) { - Collection types = mapperService.types(); - if (types.size() != 1) { - throw new IllegalStateException("Only a single type should exist, but [" + types.size() + " types exists"); - } - String type = types.iterator().next(); - if (documentType != null) { - DEPRECATION_LOGGER.deprecated("[document_type] parameter has been deprecated because types have been deprecated"); - if (documentType.equals(type) == false) { - throw new IllegalArgumentException("specified document_type [" + documentType + - "] is not equal to the actual type [" + type + "]"); - } - } - docMapper = mapperService.documentMapper(type); - for (BytesReference document : documents) { - docs.add(docMapper.parse(source(context.index().getName(), type, "_temp_id", document, documentXContentType))); - } - } else { - if (documentType == null) { - throw new IllegalArgumentException("[percolate] query is missing required [document_type] parameter"); - } - DocumentMapperForType docMapperForType = mapperService.documentMapperWithAutoCreate(documentType); - docMapper = docMapperForType.getDocumentMapper(); - for (BytesReference document : documents) { - docs.add(docMapper.parse(source(context.index().getName(), documentType, "_temp_id", document, documentXContentType))); + Collection types = mapperService.types(); + if (types.size() != 1) { + throw new IllegalStateException("Only a single type should exist, but [" + types.size() + " types exists"); + } + String type = types.iterator().next(); + if (documentType != null) { + DEPRECATION_LOGGER.deprecated("[document_type] parameter has been deprecated because types have been deprecated"); + if (documentType.equals(type) == false) { + throw new IllegalArgumentException("specified document_type [" + documentType + + "] is not equal to the actual type [" + type + "]"); } } + docMapper = mapperService.documentMapper(type); + for (BytesReference document : documents) { + docs.add(docMapper.parse(source(context.index().getName(), type, "_temp_id", document, documentXContentType))); + } FieldNameAnalyzer fieldNameAnalyzer = (FieldNameAnalyzer) docMapper.mappers().indexAnalyzer(); // Need to this custom impl because FieldNameAnalyzer is strict and the percolator sometimes isn't when diff --git a/modules/percolator/src/test/java/org/elasticsearch/percolator/PercolateQueryBuilderTests.java b/modules/percolator/src/test/java/org/elasticsearch/percolator/PercolateQueryBuilderTests.java index 16be166b0addc..3b3ff4ed15c87 100644 --- a/modules/percolator/src/test/java/org/elasticsearch/percolator/PercolateQueryBuilderTests.java +++ b/modules/percolator/src/test/java/org/elasticsearch/percolator/PercolateQueryBuilderTests.java @@ -103,9 +103,6 @@ protected void initializeAdditionalMappings(MapperService mapperService) throws mapperService.merge(docType, new CompressedXContent(Strings.toString(PutMappingRequest.buildFromSimplifiedDef(docType, STRING_FIELD_NAME, "type=text" ))), MapperService.MergeReason.MAPPING_UPDATE); - if (mapperService.getIndexSettings().isSingleType() == false) { - PercolateQueryBuilderTests.docType = docType; - } } @Override @@ -244,13 +241,7 @@ public void testRequiredParameters() { public void testFromJsonNoDocumentType() throws IOException { QueryShardContext queryShardContext = createShardContext(); QueryBuilder queryBuilder = parseQuery("{\"percolate\" : { \"document\": {}, \"field\":\"" + queryField + "\"}}"); - if (indexVersionCreated.before(Version.V_6_0_0_alpha1)) { - IllegalArgumentException e = expectThrows(IllegalArgumentException.class, - () -> queryBuilder.toQuery(queryShardContext)); - assertThat(e.getMessage(), equalTo("[percolate] query is missing required [document_type] parameter")); - } else { - queryBuilder.toQuery(queryShardContext); - } + queryBuilder.toQuery(queryShardContext); } public void testBothDocumentAndDocumentsSpecified() throws IOException { diff --git a/modules/percolator/src/test/java/org/elasticsearch/percolator/PercolatorQuerySearchIT.java b/modules/percolator/src/test/java/org/elasticsearch/percolator/PercolatorQuerySearchIT.java index 3e11f91c4bcea..ee31a81ae168a 100644 --- a/modules/percolator/src/test/java/org/elasticsearch/percolator/PercolatorQuerySearchIT.java +++ b/modules/percolator/src/test/java/org/elasticsearch/percolator/PercolatorQuerySearchIT.java @@ -97,7 +97,7 @@ public void testPercolatorQuery() throws Exception { logger.info("percolating doc with 1 field"); response = client().prepareSearch() .setQuery(new PercolateQueryBuilder("query", source, XContentType.JSON)) - .addSort("_uid", SortOrder.ASC) + .addSort("_id", SortOrder.ASC) .get(); assertHitCount(response, 2); assertThat(response.getHits().getAt(0).getId(), equalTo("1")); @@ -109,7 +109,7 @@ public void testPercolatorQuery() throws Exception { logger.info("percolating doc with 2 fields"); response = client().prepareSearch() .setQuery(new PercolateQueryBuilder("query", source, XContentType.JSON)) - .addSort("_uid", SortOrder.ASC) + .addSort("_id", SortOrder.ASC) .get(); assertHitCount(response, 3); assertThat(response.getHits().getAt(0).getId(), equalTo("1")); @@ -125,7 +125,7 @@ public void testPercolatorQuery() throws Exception { BytesReference.bytes(jsonBuilder().startObject().field("field1", "value").endObject()), BytesReference.bytes(jsonBuilder().startObject().field("field1", "value").field("field2", "value").endObject()) ), XContentType.JSON)) - .addSort("_uid", SortOrder.ASC) + .addSort("_id", SortOrder.ASC) .get(); assertHitCount(response, 3); assertThat(response.getHits().getAt(0).getId(), equalTo("1")); @@ -312,7 +312,7 @@ public void testPercolatorQueryExistingDocument() throws Exception { logger.info("percolating doc with 1 field"); response = client().prepareSearch() .setQuery(new PercolateQueryBuilder("query", "test", "type", "5", null, null, null)) - .addSort("_uid", SortOrder.ASC) + .addSort("_id", SortOrder.ASC) .get(); assertHitCount(response, 2); assertThat(response.getHits().getAt(0).getId(), equalTo("1")); @@ -321,7 +321,7 @@ public void testPercolatorQueryExistingDocument() throws Exception { logger.info("percolating doc with 2 fields"); response = client().prepareSearch() .setQuery(new PercolateQueryBuilder("query", "test", "type", "6", null, null, null)) - .addSort("_uid", SortOrder.ASC) + .addSort("_id", SortOrder.ASC) .get(); assertHitCount(response, 3); assertThat(response.getHits().getAt(0).getId(), equalTo("1")); @@ -408,7 +408,7 @@ public void testPercolatorSpecificQueries() throws Exception { .endObject()); SearchResponse response = client().prepareSearch() .setQuery(new PercolateQueryBuilder("query", source, XContentType.JSON)) - .addSort("_uid", SortOrder.ASC) + .addSort("_id", SortOrder.ASC) .get(); assertHitCount(response, 4); assertThat(response.getHits().getAt(0).getId(), equalTo("1")); @@ -455,7 +455,7 @@ public void testPercolatorQueryWithHighlighting() throws Exception { SearchResponse searchResponse = client().prepareSearch() .setQuery(new PercolateQueryBuilder("query", document, XContentType.JSON)) .highlighter(new HighlightBuilder().field("field1")) - .addSort("_uid", SortOrder.ASC) + .addSort("_id", SortOrder.ASC) .get(); assertHitCount(searchResponse, 5); @@ -482,7 +482,7 @@ public void testPercolatorQueryWithHighlighting() throws Exception { .should(new PercolateQueryBuilder("query", document2, XContentType.JSON).setName("query2")) ) .highlighter(new HighlightBuilder().field("field1")) - .addSort("_uid", SortOrder.ASC) + .addSort("_id", SortOrder.ASC) .get(); logger.info("searchResponse={}", searchResponse); assertHitCount(searchResponse, 5); @@ -506,7 +506,7 @@ public void testPercolatorQueryWithHighlighting() throws Exception { BytesReference.bytes(jsonBuilder().startObject().field("field1", "brown fox").endObject()) ), XContentType.JSON)) .highlighter(new HighlightBuilder().field("field1")) - .addSort("_uid", SortOrder.ASC) + .addSort("_id", SortOrder.ASC) .get(); assertHitCount(searchResponse, 5); assertThat(searchResponse.getHits().getAt(0).getFields().get("_percolator_document_slot").getValues(), @@ -546,7 +546,7 @@ public void testPercolatorQueryWithHighlighting() throws Exception { ), XContentType.JSON).setName("query2")) ) .highlighter(new HighlightBuilder().field("field1")) - .addSort("_uid", SortOrder.ASC) + .addSort("_id", SortOrder.ASC) .get(); logger.info("searchResponse={}", searchResponse); assertHitCount(searchResponse, 5); diff --git a/modules/reindex/src/main/java/org/elasticsearch/index/reindex/AbstractAsyncBulkByScrollAction.java b/modules/reindex/src/main/java/org/elasticsearch/index/reindex/AbstractAsyncBulkByScrollAction.java index c2eb99afa18a8..8350d86615008 100644 --- a/modules/reindex/src/main/java/org/elasticsearch/index/reindex/AbstractAsyncBulkByScrollAction.java +++ b/modules/reindex/src/main/java/org/elasticsearch/index/reindex/AbstractAsyncBulkByScrollAction.java @@ -45,7 +45,6 @@ import org.elasticsearch.index.VersionType; import org.elasticsearch.index.mapper.IdFieldMapper; import org.elasticsearch.index.mapper.IndexFieldMapper; -import org.elasticsearch.index.mapper.ParentFieldMapper; import org.elasticsearch.index.mapper.RoutingFieldMapper; import org.elasticsearch.index.mapper.SourceFieldMapper; import org.elasticsearch.index.mapper.TypeFieldMapper; @@ -181,7 +180,6 @@ public BiFunction, ScrollableHitSource.Hit, RequestWrapper> * Copies the metadata from a hit to the request. */ protected RequestWrapper copyMetadata(RequestWrapper request, ScrollableHitSource.Hit doc) { - request.setParent(doc.getParent()); copyRouting(request, doc.getRouting()); return request; } @@ -550,10 +548,6 @@ public interface RequestWrapper> { void setVersionType(VersionType versionType); - void setParent(String parent); - - String getParent(); - void setRouting(String routing); String getRouting(); @@ -621,16 +615,6 @@ public void setVersionType(VersionType versionType) { request.versionType(versionType); } - @Override - public void setParent(String parent) { - request.parent(parent); - } - - @Override - public String getParent() { - return request.parent(); - } - @Override public void setRouting(String routing) { request.routing(routing); @@ -720,16 +704,6 @@ public void setVersionType(VersionType versionType) { request.versionType(versionType); } - @Override - public void setParent(String parent) { - request.parent(parent); - } - - @Override - public String getParent() { - return request.parent(); - } - @Override public void setRouting(String routing) { request.routing(routing); @@ -807,8 +781,6 @@ public RequestWrapper apply(RequestWrapper request, ScrollableHitSource.Hi context.put(IdFieldMapper.NAME, doc.getId()); Long oldVersion = doc.getVersion(); context.put(VersionFieldMapper.NAME, oldVersion); - String oldParent = doc.getParent(); - context.put(ParentFieldMapper.NAME, oldParent); String oldRouting = doc.getRouting(); context.put(RoutingFieldMapper.NAME, oldRouting); context.put(SourceFieldMapper.NAME, request.getSource()); @@ -846,10 +818,6 @@ public RequestWrapper apply(RequestWrapper request, ScrollableHitSource.Hi if (false == Objects.equals(oldVersion, newValue)) { scriptChangedVersion(request, newValue); } - newValue = context.remove(ParentFieldMapper.NAME); - if (false == Objects.equals(oldParent, newValue)) { - scriptChangedParent(request, newValue); - } /* * Its important that routing comes after parent in case you want to * change them both. @@ -879,7 +847,6 @@ protected RequestWrapper scriptChangedOpType(RequestWrapper request, OpTyp RequestWrapper delete = wrap(new DeleteRequest(request.getIndex(), request.getType(), request.getId())); delete.setVersion(request.getVersion()); delete.setVersionType(VersionType.INTERNAL); - delete.setParent(request.getParent()); delete.setRouting(request.getRouting()); return delete; default: @@ -897,8 +864,6 @@ protected RequestWrapper scriptChangedOpType(RequestWrapper request, OpTyp protected abstract void scriptChangedRouting(RequestWrapper request, Object to); - protected abstract void scriptChangedParent(RequestWrapper request, Object to); - } public enum OpType { diff --git a/modules/reindex/src/main/java/org/elasticsearch/index/reindex/AsyncDeleteByQueryAction.java b/modules/reindex/src/main/java/org/elasticsearch/index/reindex/AsyncDeleteByQueryAction.java index 8dd30a9fa9d65..c86911649ac34 100644 --- a/modules/reindex/src/main/java/org/elasticsearch/index/reindex/AsyncDeleteByQueryAction.java +++ b/modules/reindex/src/main/java/org/elasticsearch/index/reindex/AsyncDeleteByQueryAction.java @@ -69,7 +69,6 @@ protected RequestWrapper buildRequest(ScrollableHitSource.Hit doc */ @Override protected RequestWrapper copyMetadata(RequestWrapper request, ScrollableHitSource.Hit doc) { - request.setParent(doc.getParent()); request.setRouting(doc.getRouting()); return request; } diff --git a/modules/reindex/src/main/java/org/elasticsearch/index/reindex/TransportReindexAction.java b/modules/reindex/src/main/java/org/elasticsearch/index/reindex/TransportReindexAction.java index 650cf5000a745..6f839558e03cc 100644 --- a/modules/reindex/src/main/java/org/elasticsearch/index/reindex/TransportReindexAction.java +++ b/modules/reindex/src/main/java/org/elasticsearch/index/reindex/TransportReindexAction.java @@ -359,7 +359,6 @@ protected RequestWrapper buildRequest(ScrollableHitSource.Hit doc) * here on out operates on the index request rather than the template. */ index.routing(mainRequest.getDestination().routing()); - index.parent(mainRequest.getDestination().parent()); index.setPipeline(mainRequest.getDestination().getPipeline()); // OpType is synthesized from version so it is handled when we copy version above. @@ -432,14 +431,6 @@ protected void scriptChangedVersion(RequestWrapper request, Object to) { } } - @Override - protected void scriptChangedParent(RequestWrapper request, Object to) { - // Have to override routing with parent just in case its changed - String routing = Objects.toString(to, null); - request.setParent(routing); - request.setRouting(routing); - } - @Override protected void scriptChangedRouting(RequestWrapper request, Object to) { request.setRouting(Objects.toString(to, null)); diff --git a/modules/reindex/src/main/java/org/elasticsearch/index/reindex/TransportUpdateByQueryAction.java b/modules/reindex/src/main/java/org/elasticsearch/index/reindex/TransportUpdateByQueryAction.java index e21a6408bd85a..8e55df60734dc 100644 --- a/modules/reindex/src/main/java/org/elasticsearch/index/reindex/TransportUpdateByQueryAction.java +++ b/modules/reindex/src/main/java/org/elasticsearch/index/reindex/TransportUpdateByQueryAction.java @@ -34,7 +34,6 @@ import org.elasticsearch.index.VersionType; import org.elasticsearch.index.mapper.IdFieldMapper; import org.elasticsearch.index.mapper.IndexFieldMapper; -import org.elasticsearch.index.mapper.ParentFieldMapper; import org.elasticsearch.index.mapper.RoutingFieldMapper; import org.elasticsearch.index.mapper.TypeFieldMapper; import org.elasticsearch.script.Script; @@ -161,11 +160,6 @@ protected void scriptChangedRouting(RequestWrapper request, Object to) { throw new IllegalArgumentException("Modifying [" + RoutingFieldMapper.NAME + "] not allowed"); } - @Override - protected void scriptChangedParent(RequestWrapper request, Object to) { - throw new IllegalArgumentException("Modifying [" + ParentFieldMapper.NAME + "] not allowed"); - } - } } } diff --git a/modules/reindex/src/main/java/org/elasticsearch/index/reindex/remote/RemoteResponseParsers.java b/modules/reindex/src/main/java/org/elasticsearch/index/reindex/remote/RemoteResponseParsers.java index d18e9c85bcdab..4834c6f9ce0a2 100644 --- a/modules/reindex/src/main/java/org/elasticsearch/index/reindex/remote/RemoteResponseParsers.java +++ b/modules/reindex/src/main/java/org/elasticsearch/index/reindex/remote/RemoteResponseParsers.java @@ -86,23 +86,20 @@ private RemoteResponseParsers() {} } }, new ParseField("_source")); ParseField routingField = new ParseField("_routing"); - ParseField parentField = new ParseField("_parent"); ParseField ttlField = new ParseField("_ttl"); + ParseField parentField = new ParseField("_parent"); HIT_PARSER.declareString(BasicHit::setRouting, routingField); - HIT_PARSER.declareString(BasicHit::setParent, parentField); - // Pre-2.0.0 parent and routing come back in "fields" + // Pre-2.0.0 routing come back in "fields" class Fields { String routing; - String parent; } ObjectParser fieldsParser = new ObjectParser<>("fields", Fields::new); HIT_PARSER.declareObject((hit, fields) -> { hit.setRouting(fields.routing); - hit.setParent(fields.parent); }, fieldsParser, new ParseField("fields")); fieldsParser.declareString((fields, routing) -> fields.routing = routing, routingField); - fieldsParser.declareString((fields, parent) -> fields.parent = parent, parentField); fieldsParser.declareLong((fields, ttl) -> {}, ttlField); // ignore ttls since they have been removed + fieldsParser.declareString((fields, parent) -> {}, parentField); // ignore parents since they have been removed } /** diff --git a/modules/reindex/src/test/java/org/elasticsearch/index/reindex/DeleteByQueryBasicTests.java b/modules/reindex/src/test/java/org/elasticsearch/index/reindex/DeleteByQueryBasicTests.java index 0b8dea6ea41f2..df165ca12e7a4 100644 --- a/modules/reindex/src/test/java/org/elasticsearch/index/reindex/DeleteByQueryBasicTests.java +++ b/modules/reindex/src/test/java/org/elasticsearch/index/reindex/DeleteByQueryBasicTests.java @@ -307,25 +307,4 @@ public void testMultipleSources() throws Exception { } - /** - * Test delete by query support for filtering by type. This entire feature - * can and should be removed when we drop support for types index with - * multiple types from core. - */ - public void testFilterByType() throws Exception { - assertAcked(client().admin().indices().prepareCreate("test") - .setSettings(Settings.builder().put("index.version.created", Version.V_5_6_0.id))); // allows for multiple types - indexRandom(true, - client().prepareIndex("test", "test1", "1").setSource("foo", "a"), - client().prepareIndex("test", "test2", "2").setSource("foo", "a"), - client().prepareIndex("test", "test2", "3").setSource("foo", "b")); - - assertHitCount(client().prepareSearch("test").setSize(0).get(), 3); - - // Deletes doc of the type "type2" that also matches foo:a - DeleteByQueryRequestBuilder builder = deleteByQuery().source("test").filter(termQuery("foo", "a")).refresh(true); - builder.source().setTypes("test2"); - assertThat(builder.get(), matcher().deleted(1)); - assertHitCount(client().prepareSearch("test").setSize(0).get(), 2); - } } diff --git a/modules/reindex/src/test/java/org/elasticsearch/index/reindex/ReindexParentChildTests.java b/modules/reindex/src/test/java/org/elasticsearch/index/reindex/ReindexParentChildTests.java deleted file mode 100644 index b7737beb33af6..0000000000000 --- a/modules/reindex/src/test/java/org/elasticsearch/index/reindex/ReindexParentChildTests.java +++ /dev/null @@ -1,204 +0,0 @@ -/* - * Licensed to Elasticsearch under one or more contributor - * license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright - * ownership. Elasticsearch licenses this file to you under - * the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package org.elasticsearch.index.reindex; - -import org.elasticsearch.Version; -import org.elasticsearch.action.admin.indices.create.CreateIndexRequestBuilder; -import org.elasticsearch.common.settings.Settings; -import org.elasticsearch.common.xcontent.XContentType; -import org.elasticsearch.index.query.QueryBuilder; -import org.elasticsearch.join.ParentJoinPlugin; -import org.elasticsearch.plugins.Plugin; -import org.elasticsearch.script.MockScriptPlugin; -import org.elasticsearch.test.InternalSettingsPlugin; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.function.Function; - -import static org.elasticsearch.index.query.QueryBuilders.idsQuery; -import static org.elasticsearch.index.query.QueryBuilders.typeQuery; -import static org.elasticsearch.join.query.JoinQueryBuilders.hasParentQuery; -import static org.elasticsearch.test.hamcrest.ElasticsearchAssertions.assertAcked; -import static org.elasticsearch.test.hamcrest.ElasticsearchAssertions.assertSearchHits; -import static org.hamcrest.Matchers.containsString; -import static org.hamcrest.Matchers.equalTo; -import static org.hamcrest.Matchers.hasToString; -import static org.hamcrest.Matchers.instanceOf; - -/** - * Reindex tests for legacy parent/child. Tests for the new {@code join} - * field are in a qa project. - */ -public class ReindexParentChildTests extends ReindexTestCase { - QueryBuilder findsCountry; - QueryBuilder findsCity; - QueryBuilder findsNeighborhood; - - @Override - protected boolean ignoreExternalCluster() { - return true; - } - - @Override - protected Collection> nodePlugins() { - final List> plugins = new ArrayList<>(super.nodePlugins()); - plugins.add(ParentJoinPlugin.class); - plugins.add(InternalSettingsPlugin.class); - plugins.add(CustomScriptPlugin.class); - return Collections.unmodifiableList(plugins); - } - - @Override - protected Collection> transportClientPlugins() { - return nodePlugins(); - } - - public void testParentChild() throws Exception { - createParentChildIndex("source"); - createParentChildIndex("dest"); - createParentChildDocs("source", true); - - // Copy parent to the new index - ReindexRequestBuilder copy = reindex().source("source").destination("dest").filter(findsCountry).refresh(true); - assertThat(copy.get(), matcher().created(1)); - - // Copy the child to a new index - copy = reindex().source("source").destination("dest").filter(findsCity).refresh(true); - assertThat(copy.get(), matcher().created(1)); - - // Make sure parent/child is intact on that index - assertSearchHits(client().prepareSearch("dest").setQuery(findsCity).get(), "pittsburgh"); - - // Copy the grandchild to a new index - copy = reindex().source("source").destination("dest").filter(findsNeighborhood).refresh(true); - assertThat(copy.get(), matcher().created(1)); - - // Make sure parent/child is intact on that index - assertSearchHits(client().prepareSearch("dest").setQuery(findsNeighborhood).get(), - "make-believe"); - - // Copy the parent/child/grandchild structure all at once to a third index - createParentChildIndex("dest_all_at_once"); - copy = reindex().source("source").destination("dest_all_at_once").refresh(true); - assertThat(copy.get(), matcher().created(3)); - - // Make sure parent/child/grandchild is intact there too - assertSearchHits(client().prepareSearch("dest_all_at_once").setQuery(findsNeighborhood).get(), - "make-believe"); - } - - /** - * Tests for adding the {@code _parent} via script and adding *both* {@code _parent} and {@code _routing} values via scripts. - */ - public void testScriptAddsParent() throws Exception { - assertAcked(client().admin().indices().prepareCreate("source") - .setSettings(Settings.builder().put("index.version.created", Version.V_5_6_0.id))); // allows for multiple types - - createParentChildIndex("dest"); - createParentChildDocs("source", false); - - ReindexRequestBuilder copy = reindex().source("source").destination("dest").filter(typeQuery("country")).refresh(true); - assertThat(copy.get(), matcher().created(1)); - copy = reindex().source("source").destination("dest").filter(typeQuery("city")) - .script(mockScript("ctx._parent='united states'")).refresh(true); - assertThat(copy.get(), matcher().created(1)); - assertSearchHits(client().prepareSearch("dest").setQuery(findsCity).get(), "pittsburgh"); - - copy = reindex().source("source").destination("dest").filter(typeQuery("neighborhood")) - .script(mockScript("ctx._parent='pittsburgh';ctx._routing='united states'")).refresh(true); - assertThat(copy.get(), matcher().created(1)); - assertSearchHits(client().prepareSearch("dest").setQuery(findsNeighborhood).get(), "make-believe"); - } - - public void testErrorMessageWhenBadParentChild() throws Exception { - createParentChildIndex("source"); - createParentChildDocs("source", true); - - ReindexRequestBuilder copy = reindex().source("source").destination("dest").filter(findsCity); - final BulkByScrollResponse response = copy.get(); - assertThat(response.getBulkFailures().size(), equalTo(1)); - final Exception cause = response.getBulkFailures().get(0).getCause(); - assertThat(cause, instanceOf(IllegalArgumentException.class)); - assertThat(cause, hasToString(containsString("can't specify parent if no parent field has been configured"))); - } - - /** - * Setup a parent/child index and return a query that should find the child - * using the parent. - */ - private void createParentChildIndex(String indexName) throws Exception { - CreateIndexRequestBuilder create = client().admin().indices().prepareCreate(indexName); - create.setSettings(Settings.builder().put("index.version.created", Version.V_5_6_0.id)); // allows for multiple types - create.addMapping("city", "{\"_parent\": {\"type\": \"country\"}}", XContentType.JSON); - create.addMapping("neighborhood", "{\"_parent\": {\"type\": \"city\"}}", XContentType.JSON); - assertAcked(create); - ensureGreen(); - } - - private void createParentChildDocs(String indexName, boolean addParents) throws Exception { - indexRandom(true, - client().prepareIndex(indexName, "country", "united states") - .setSource("foo", "bar"), - client().prepareIndex(indexName, "city", "pittsburgh") - .setParent(addParents ? "united states" : null) - .setSource("foo", "bar"), - client().prepareIndex(indexName, "neighborhood", "make-believe") - .setParent(addParents ? "pittsburgh" : null) - .setRouting(addParents ? "united states" : null) - .setSource("foo", "bar")); - - findsCountry = idsQuery("country").addIds("united states"); - findsCity = hasParentQuery("country", findsCountry, false); - findsNeighborhood = hasParentQuery("city", findsCity, false); - - if (addParents) { - // Make sure we built the parent/child relationship - assertSearchHits(client().prepareSearch(indexName).setQuery(findsCity).get(), "pittsburgh"); - assertSearchHits(client().prepareSearch(indexName).setQuery(findsNeighborhood).get(), "make-believe"); - } - } - - public static class CustomScriptPlugin extends MockScriptPlugin { - @Override - @SuppressWarnings("unchecked") - protected Map, Object>> pluginScripts() { - Map, Object>> scripts = new HashMap<>(); - - scripts.put("ctx._parent='united states'", vars -> { - Map ctx = (Map) vars.get("ctx"); - ctx.put("_parent", "united states"); - return null; - }); - scripts.put("ctx._parent='pittsburgh';ctx._routing='united states'", vars -> { - Map ctx = (Map) vars.get("ctx"); - ctx.put("_parent", "pittsburgh"); - ctx.put("_routing", "united states"); - return null; - }); - - return scripts; - } - } -} diff --git a/modules/reindex/src/test/java/org/elasticsearch/index/reindex/ReindexScriptTests.java b/modules/reindex/src/test/java/org/elasticsearch/index/reindex/ReindexScriptTests.java index 4e2834a771a94..6d3ce558c7567 100644 --- a/modules/reindex/src/test/java/org/elasticsearch/index/reindex/ReindexScriptTests.java +++ b/modules/reindex/src/test/java/org/elasticsearch/index/reindex/ReindexScriptTests.java @@ -92,12 +92,6 @@ public void testSettingVersionToJunkIsAnError() throws Exception { } } - public void testSetParent() throws Exception { - String parent = randomRealisticUnicodeOfLengthBetween(5, 20); - IndexRequest index = applyScript((Map ctx) -> ctx.put("_parent", parent)); - assertEquals(parent, index.parent()); - } - public void testSetRouting() throws Exception { String routing = randomRealisticUnicodeOfLengthBetween(5, 20); IndexRequest index = applyScript((Map ctx) -> ctx.put("_routing", routing)); diff --git a/modules/reindex/src/test/java/org/elasticsearch/index/reindex/UpdateByQueryWithScriptTests.java b/modules/reindex/src/test/java/org/elasticsearch/index/reindex/UpdateByQueryWithScriptTests.java index 9f43ea2d17067..4006d16fbcb11 100644 --- a/modules/reindex/src/test/java/org/elasticsearch/index/reindex/UpdateByQueryWithScriptTests.java +++ b/modules/reindex/src/test/java/org/elasticsearch/index/reindex/UpdateByQueryWithScriptTests.java @@ -39,7 +39,7 @@ public void testModifyingCtxNotAllowed() { * error message to the user, not some ClassCastException. */ Object[] options = new Object[] {"cat", new Object(), 123, new Date(), Math.PI}; - for (String ctxVar: new String[] {"_index", "_type", "_id", "_version", "_parent", "_routing"}) { + for (String ctxVar: new String[] {"_index", "_type", "_id", "_version", "_routing"}) { try { applyScript((Map ctx) -> ctx.put(ctxVar, randomFrom(options))); } catch (IllegalArgumentException e) { diff --git a/modules/reindex/src/test/java/org/elasticsearch/index/reindex/remote/RemoteScrollableHitSourceTests.java b/modules/reindex/src/test/java/org/elasticsearch/index/reindex/remote/RemoteScrollableHitSourceTests.java index f67a5b627fb4c..92f370f8f6364 100644 --- a/modules/reindex/src/test/java/org/elasticsearch/index/reindex/remote/RemoteScrollableHitSourceTests.java +++ b/modules/reindex/src/test/java/org/elasticsearch/index/reindex/remote/RemoteScrollableHitSourceTests.java @@ -207,7 +207,6 @@ public void testParseScrollFullyLoaded() throws Exception { assertEquals("AVToMiDL50DjIiBO3yKA", r.getHits().get(0).getId()); assertEquals("{\"test\":\"test3\"}", r.getHits().get(0).getSource().utf8ToString()); assertEquals("testrouting", r.getHits().get(0).getRouting()); - assertEquals("testparent", r.getHits().get(0).getParent()); called.set(true); }); assertTrue(called.get()); @@ -222,7 +221,6 @@ public void testParseScrollFullyLoadedFrom1_7() throws Exception { assertEquals("AVToMiDL50DjIiBO3yKA", r.getHits().get(0).getId()); assertEquals("{\"test\":\"test3\"}", r.getHits().get(0).getSource().utf8ToString()); assertEquals("testrouting", r.getHits().get(0).getRouting()); - assertEquals("testparent", r.getHits().get(0).getParent()); called.set(true); }); assertTrue(called.get()); diff --git a/plugins/analysis-icu/src/test/java/org/elasticsearch/index/mapper/ICUCollationKeywordFieldMapperIT.java b/plugins/analysis-icu/src/test/java/org/elasticsearch/index/mapper/ICUCollationKeywordFieldMapperIT.java index 5220d44dca308..ce8a635ffb6f1 100644 --- a/plugins/analysis-icu/src/test/java/org/elasticsearch/index/mapper/ICUCollationKeywordFieldMapperIT.java +++ b/plugins/analysis-icu/src/test/java/org/elasticsearch/index/mapper/ICUCollationKeywordFieldMapperIT.java @@ -87,7 +87,7 @@ public void testBasicUsage() throws Exception { .fetchSource(false) .query(QueryBuilders.termQuery("collate", randomBoolean() ? equilavent[0] : equilavent[1])) .sort("collate") - .sort("_uid", SortOrder.DESC) // secondary sort should kick in because both will collate to same value + .sort("_id", SortOrder.DESC) // secondary sort should kick in because both will collate to same value ); SearchResponse response = client().search(request).actionGet(); @@ -128,7 +128,7 @@ public void testMultipleValues() throws Exception { .query(QueryBuilders.termQuery("collate", "a")) // if mode max we use c and b as sort values, if max we use "a" for both .sort(SortBuilders.fieldSort("collate").sortMode(SortMode.MAX).order(SortOrder.DESC)) - .sort("_uid", SortOrder.DESC) // will be ignored + .sort("_id", SortOrder.DESC) // will be ignored ); SearchResponse response = client().search(request).actionGet(); @@ -145,7 +145,7 @@ public void testMultipleValues() throws Exception { .query(QueryBuilders.termQuery("collate", "a")) // if mode max we use c and b as sort values, if max we use "a" for both .sort(SortBuilders.fieldSort("collate").sortMode(SortMode.MIN).order(SortOrder.DESC)) - .sort("_uid", SortOrder.DESC) // will NOT be ignored and will determine order + .sort("_id", SortOrder.DESC) // will NOT be ignored and will determine order ); response = client().search(request).actionGet(); @@ -188,7 +188,7 @@ public void testNormalization() throws Exception { .fetchSource(false) .query(QueryBuilders.termQuery("collate", randomBoolean() ? equilavent[0] : equilavent[1])) .sort("collate") - .sort("_uid", SortOrder.DESC) // secondary sort should kick in because both will collate to same value + .sort("_id", SortOrder.DESC) // secondary sort should kick in because both will collate to same value ); SearchResponse response = client().search(request).actionGet(); @@ -230,7 +230,7 @@ public void testSecondaryStrength() throws Exception { .fetchSource(false) .query(QueryBuilders.termQuery("collate", randomBoolean() ? equilavent[0] : equilavent[1])) .sort("collate") - .sort("_uid", SortOrder.DESC) // secondary sort should kick in because both will collate to same value + .sort("_id", SortOrder.DESC) // secondary sort should kick in because both will collate to same value ); SearchResponse response = client().search(request).actionGet(); @@ -273,7 +273,7 @@ public void testIgnorePunctuation() throws Exception { .fetchSource(false) .query(QueryBuilders.termQuery("collate", randomBoolean() ? equilavent[0] : equilavent[1])) .sort("collate") - .sort("_uid", SortOrder.DESC) // secondary sort should kick in because both will collate to same value + .sort("_id", SortOrder.DESC) // secondary sort should kick in because both will collate to same value ); SearchResponse response = client().search(request).actionGet(); @@ -316,7 +316,7 @@ public void testIgnoreWhitespace() throws Exception { .source(new SearchSourceBuilder() .fetchSource(false) .sort("collate", SortOrder.ASC) - .sort("_uid", SortOrder.ASC) // secondary sort should kick in on docs 1 and 3 because same value collate value + .sort("_id", SortOrder.ASC) // secondary sort should kick in on docs 1 and 3 because same value collate value ); SearchResponse response = client().search(request).actionGet(); @@ -398,7 +398,7 @@ public void testIgnoreAccentsButNotCase() throws Exception { .source(new SearchSourceBuilder() .fetchSource(false) .sort("collate", SortOrder.ASC) - .sort("_uid", SortOrder.DESC) + .sort("_id", SortOrder.DESC) ); SearchResponse response = client().search(request).actionGet(); @@ -492,7 +492,7 @@ public void testCustomRules() throws Exception { .fetchSource(false) .query(QueryBuilders.termQuery("collate", randomBoolean() ? equilavent[0] : equilavent[1])) .sort("collate", SortOrder.ASC) - .sort("_uid", SortOrder.DESC) // secondary sort should kick in because both will collate to same value + .sort("_id", SortOrder.DESC) // secondary sort should kick in because both will collate to same value ); SearchResponse response = client().search(request).actionGet(); diff --git a/plugins/mapper-size/src/main/java/org/elasticsearch/index/mapper/size/SizeFieldMapper.java b/plugins/mapper-size/src/main/java/org/elasticsearch/index/mapper/size/SizeFieldMapper.java index d3830ab210662..5b3895578e0cc 100644 --- a/plugins/mapper-size/src/main/java/org/elasticsearch/index/mapper/size/SizeFieldMapper.java +++ b/plugins/mapper-size/src/main/java/org/elasticsearch/index/mapper/size/SizeFieldMapper.java @@ -25,6 +25,7 @@ import org.elasticsearch.common.lucene.Lucene; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.xcontent.XContentBuilder; +import org.elasticsearch.common.xcontent.support.XContentMapValues; import org.elasticsearch.index.mapper.EnabledAttributeMapper; import org.elasticsearch.index.mapper.MappedFieldType; import org.elasticsearch.index.mapper.Mapper; @@ -101,7 +102,7 @@ public static class TypeParser implements MetadataFieldMapper.TypeParser { String fieldName = entry.getKey(); Object fieldNode = entry.getValue(); if (fieldName.equals("enabled")) { - boolean enabled = TypeParsers.nodeBooleanValue(name, "enabled", fieldNode, parserContext); + boolean enabled = XContentMapValues.nodeBooleanValue(fieldNode, name + ".enabled"); builder.enabled(enabled ? EnabledAttributeMapper.ENABLED : EnabledAttributeMapper.DISABLED); iterator.remove(); } diff --git a/qa/smoke-test-ingest-with-all-dependencies/src/test/java/org/elasticsearch/ingest/IngestDocumentMustacheIT.java b/qa/smoke-test-ingest-with-all-dependencies/src/test/java/org/elasticsearch/ingest/IngestDocumentMustacheIT.java index 16dbbc6f8cbab..ec993262a4d59 100644 --- a/qa/smoke-test-ingest-with-all-dependencies/src/test/java/org/elasticsearch/ingest/IngestDocumentMustacheIT.java +++ b/qa/smoke-test-ingest-with-all-dependencies/src/test/java/org/elasticsearch/ingest/IngestDocumentMustacheIT.java @@ -33,7 +33,7 @@ public class IngestDocumentMustacheIT extends AbstractScriptTestCase { public void testAccessMetaDataViaTemplate() { Map document = new HashMap<>(); document.put("foo", "bar"); - IngestDocument ingestDocument = new IngestDocument("index", "type", "id", null, null, null, null, document); + IngestDocument ingestDocument = new IngestDocument("index", "type", "id", null, null, null, document); ingestDocument.setFieldValue(compile("field1"), ValueSource.wrap("1 {{foo}}", scriptService)); assertThat(ingestDocument.getFieldValue("field1", String.class), equalTo("1 bar")); @@ -48,7 +48,7 @@ public void testAccessMapMetaDataViaTemplate() { innerObject.put("baz", "hello baz"); innerObject.put("qux", Collections.singletonMap("fubar", "hello qux and fubar")); document.put("foo", innerObject); - IngestDocument ingestDocument = new IngestDocument("index", "type", "id", null, null, null, null, document); + IngestDocument ingestDocument = new IngestDocument("index", "type", "id", null, null, null, document); ingestDocument.setFieldValue(compile("field1"), ValueSource.wrap("1 {{foo.bar}} {{foo.baz}} {{foo.qux.fubar}}", scriptService)); assertThat(ingestDocument.getFieldValue("field1", String.class), equalTo("1 hello bar hello baz hello qux and fubar")); @@ -67,7 +67,7 @@ public void testAccessListMetaDataViaTemplate() { list.add(value); list.add(null); document.put("list2", list); - IngestDocument ingestDocument = new IngestDocument("index", "type", "id", null, null, null, null, document); + IngestDocument ingestDocument = new IngestDocument("index", "type", "id", null, null, null, document); ingestDocument.setFieldValue(compile("field1"), ValueSource.wrap("1 {{list1.0}} {{list2.0}}", scriptService)); assertThat(ingestDocument.getFieldValue("field1", String.class), equalTo("1 foo {field=value}")); } @@ -77,7 +77,7 @@ public void testAccessIngestMetadataViaTemplate() { Map ingestMap = new HashMap<>(); ingestMap.put("timestamp", "bogus_timestamp"); document.put("_ingest", ingestMap); - IngestDocument ingestDocument = new IngestDocument("index", "type", "id", null, null, null, null, document); + IngestDocument ingestDocument = new IngestDocument("index", "type", "id", null, null, null, document); ingestDocument.setFieldValue(compile("ingest_timestamp"), ValueSource.wrap("{{_ingest.timestamp}} and {{_source._ingest.timestamp}}", scriptService)); assertThat(ingestDocument.getFieldValue("ingest_timestamp", String.class), diff --git a/qa/smoke-test-ingest-with-all-dependencies/src/test/java/org/elasticsearch/ingest/ValueSourceMustacheIT.java b/qa/smoke-test-ingest-with-all-dependencies/src/test/java/org/elasticsearch/ingest/ValueSourceMustacheIT.java index a80b693851fc1..e7005080ea88e 100644 --- a/qa/smoke-test-ingest-with-all-dependencies/src/test/java/org/elasticsearch/ingest/ValueSourceMustacheIT.java +++ b/qa/smoke-test-ingest-with-all-dependencies/src/test/java/org/elasticsearch/ingest/ValueSourceMustacheIT.java @@ -64,7 +64,7 @@ public void testValueSourceWithTemplates() { } public void testAccessSourceViaTemplate() { - IngestDocument ingestDocument = new IngestDocument("marvel", "type", "id", null, null, null, null, new HashMap<>()); + IngestDocument ingestDocument = new IngestDocument("marvel", "type", "id", null, null, null, new HashMap<>()); assertThat(ingestDocument.hasField("marvel"), is(false)); ingestDocument.setFieldValue(compile("{{_index}}"), ValueSource.wrap("{{_index}}", scriptService)); assertThat(ingestDocument.getFieldValue("marvel", String.class), equalTo("marvel")); diff --git a/rest-api-spec/src/main/resources/rest-api-spec/test/create/50_parent.yml b/rest-api-spec/src/main/resources/rest-api-spec/test/create/50_parent.yml deleted file mode 100644 index cb0dfcfe78cf7..0000000000000 --- a/rest-api-spec/src/main/resources/rest-api-spec/test/create/50_parent.yml +++ /dev/null @@ -1,39 +0,0 @@ ---- -"Parent": - - - do: - indices.create: - index: test_1 - body: - mappings: - test: - _parent: { type: "foo" } - - - do: - catch: /routing_missing_exception/ - create: - index: test_1 - type: test - id: 1 - body: { foo: bar } - - - do: - create: - index: test_1 - type: test - id: 1 - parent: 5 - body: { foo: bar } - - - do: - get: - index: test_1 - type: test - id: 1 - parent: 5 - stored_fields: [_parent, _routing] - - - match: { _id: "1"} - - match: { _parent: "5"} - - match: { _routing: "5"} - diff --git a/rest-api-spec/src/main/resources/rest-api-spec/test/create/55_parent_with_routing.yml b/rest-api-spec/src/main/resources/rest-api-spec/test/create/55_parent_with_routing.yml deleted file mode 100644 index 5f352ac90c3c7..0000000000000 --- a/rest-api-spec/src/main/resources/rest-api-spec/test/create/55_parent_with_routing.yml +++ /dev/null @@ -1,55 +0,0 @@ ---- -"Parent with routing": - - - do: - indices.create: - index: test_1 - body: - mappings: - test: - _parent: { type: "foo" } - settings: - number_of_shards: 5 - number_of_replicas: 0 - - - do: - cluster.health: - wait_for_status: green - - - do: - create: - index: test_1 - type: test - id: 1 - parent: 5 - routing: 4 - body: { foo: bar } - - - do: - get: - index: test_1 - type: test - id: 1 - parent: 5 - routing: 4 - stored_fields: [_parent, _routing] - - - match: { _id: "1"} - - match: { _parent: "5"} - - match: { _routing: "4"} - - - do: - catch: missing - get: - index: test_1 - type: test - id: 1 - parent: 5 - - - do: - get: - index: test_1 - type: test - id: 1 - routing: 4 - diff --git a/rest-api-spec/src/main/resources/rest-api-spec/test/delete/40_parent.yml b/rest-api-spec/src/main/resources/rest-api-spec/test/delete/40_parent.yml deleted file mode 100644 index 82fc8a325d614..0000000000000 --- a/rest-api-spec/src/main/resources/rest-api-spec/test/delete/40_parent.yml +++ /dev/null @@ -1,36 +0,0 @@ ---- -"Parent": - - do: - indices.create: - index: test_1 - body: - settings: - number_of_shards: 5 - number_of_routing_shards: 5 - mappings: - test: - _parent: { type: "foo" } - - - do: - index: - index: test_1 - type: test - id: 1 - parent: 5 - body: { foo: bar } - - - do: - catch: missing - delete: - index: test_1 - type: test - id: 1 - parent: 1 - - - do: - delete: - index: test_1 - type: test - id: 1 - parent: 5 - diff --git a/rest-api-spec/src/main/resources/rest-api-spec/test/delete/42_missing_parent.yml b/rest-api-spec/src/main/resources/rest-api-spec/test/delete/42_missing_parent.yml deleted file mode 100644 index d72c5a83d599f..0000000000000 --- a/rest-api-spec/src/main/resources/rest-api-spec/test/delete/42_missing_parent.yml +++ /dev/null @@ -1,29 +0,0 @@ ---- -"Delete on all shards when parent not specified": - - - do: - indices.create: - index: test_1 - body: - mappings: - test: - _parent: { type: "foo" } - - do: - cluster.health: - wait_for_status: yellow - - - do: - index: - index: test_1 - type: test - id: 1 - parent: 5 - body: { foo: bar } - - - do: - catch: /routing_missing_exception/ - delete: - index: test_1 - type: test - id: 1 - diff --git a/rest-api-spec/src/main/resources/rest-api-spec/test/delete/45_parent_with_routing.yml b/rest-api-spec/src/main/resources/rest-api-spec/test/delete/45_parent_with_routing.yml deleted file mode 100644 index 8b11e82b75459..0000000000000 --- a/rest-api-spec/src/main/resources/rest-api-spec/test/delete/45_parent_with_routing.yml +++ /dev/null @@ -1,44 +0,0 @@ ---- -"Parent with routing": - - - do: - indices.create: - index: test_1 - body: - mappings: - test: - _parent: { type: "foo" } - settings: - number_of_shards: 5 - number_of_replicas: 0 - - - do: - cluster.health: - wait_for_status: green - - - do: - index: - index: test_1 - type: test - id: 1 - parent: 5 - routing: 4 - body: { foo: bar } - - - do: - catch: missing - delete: - index: test_1 - type: test - id: 1 - parent: 5 - routing: 1 - - - do: - delete: - index: test_1 - type: test - id: 1 - parent: 5 - routing: 4 - diff --git a/rest-api-spec/src/main/resources/rest-api-spec/test/exists/30_parent.yml b/rest-api-spec/src/main/resources/rest-api-spec/test/exists/30_parent.yml deleted file mode 100644 index 4c92605756a37..0000000000000 --- a/rest-api-spec/src/main/resources/rest-api-spec/test/exists/30_parent.yml +++ /dev/null @@ -1,39 +0,0 @@ ---- -setup: - - do: - indices.create: - index: test_1 - body: - mappings: - test: - _parent: { type: "foo" } - ---- -"Parent": - - do: - index: - index: test_1 - type: test - id: 1 - parent: 5 - body: { foo: bar } - - - do: - exists: - index: test_1 - type: test - id: 1 - parent: 5 - - - is_true: '' - ---- -"Parent omitted": - - - do: - catch: bad_request - exists: - index: test_1 - type: test - id: 1 - diff --git a/rest-api-spec/src/main/resources/rest-api-spec/test/exists/55_parent_with_routing.yml b/rest-api-spec/src/main/resources/rest-api-spec/test/exists/55_parent_with_routing.yml deleted file mode 100644 index bf617a23260f7..0000000000000 --- a/rest-api-spec/src/main/resources/rest-api-spec/test/exists/55_parent_with_routing.yml +++ /dev/null @@ -1,57 +0,0 @@ ---- -"Parent with routing": - - - do: - indices.create: - index: test_1 - body: - mappings: - test: - _parent: { type: "foo" } - settings: - number_of_shards: 5 - number_of_replicas: 0 - - - do: - cluster.health: - wait_for_status: green - - - do: - index: - index: test_1 - type: test - id: 1 - parent: 5 - routing: 4 - body: { foo: bar } - - - is_true: '' - - - do: - exists: - index: test_1 - type: test - id: 1 - parent: 5 - routing: 4 - - - is_true: '' - - - do: - exists: - index: test_1 - type: test - id: 1 - parent: 5 - - - is_false: '' - - - do: - exists: - index: test_1 - type: test - id: 1 - routing: 4 - - - is_true: '' - diff --git a/rest-api-spec/src/main/resources/rest-api-spec/test/get/30_parent.yml b/rest-api-spec/src/main/resources/rest-api-spec/test/get/30_parent.yml deleted file mode 100644 index 04f578b88d6e6..0000000000000 --- a/rest-api-spec/src/main/resources/rest-api-spec/test/get/30_parent.yml +++ /dev/null @@ -1,42 +0,0 @@ ---- -setup: - - do: - indices.create: - index: test_1 - body: - mappings: - test: - _parent: { type: "foo" } - - - do: - index: - index: test_1 - type: test - id: 1 - parent: 中文 - body: { foo: bar } - ---- -"Parent": - - - do: - get: - index: test_1 - type: test - id: 1 - parent: 中文 - stored_fields: [_parent, _routing] - - - match: { _id: "1"} - - match: { _parent: 中文 } - - match: { _routing: 中文} - ---- -"Parent omitted": - - do: - catch: bad_request - get: - index: test_1 - type: test - id: 1 - diff --git a/rest-api-spec/src/main/resources/rest-api-spec/test/get/55_parent_with_routing.yml b/rest-api-spec/src/main/resources/rest-api-spec/test/get/55_parent_with_routing.yml deleted file mode 100644 index db71d16423009..0000000000000 --- a/rest-api-spec/src/main/resources/rest-api-spec/test/get/55_parent_with_routing.yml +++ /dev/null @@ -1,55 +0,0 @@ ---- -"Parent with routing": - - - do: - indices.create: - index: test_1 - body: - mappings: - test: - _parent: { type: "foo" } - settings: - number_of_shards: 5 - number_of_replicas: 0 - - - do: - cluster.health: - wait_for_status: green - - - do: - index: - index: test_1 - type: test - id: 1 - parent: 5 - routing: 4 - body: { foo: bar } - - - do: - get: - index: test_1 - type: test - id: 1 - parent: 5 - routing: 4 - stored_fields: [_parent, _routing] - - - match: { _id: "1"} - - match: { _parent: "5"} - - match: { _routing: "4"} - - - do: - catch: missing - get: - index: test_1 - type: test - id: 1 - parent: 5 - - - do: - get: - index: test_1 - type: test - id: 1 - routing: 4 - diff --git a/rest-api-spec/src/main/resources/rest-api-spec/test/get_source/30_parent.yml b/rest-api-spec/src/main/resources/rest-api-spec/test/get_source/30_parent.yml deleted file mode 100644 index fe589c9823472..0000000000000 --- a/rest-api-spec/src/main/resources/rest-api-spec/test/get_source/30_parent.yml +++ /dev/null @@ -1,40 +0,0 @@ ---- -setup: - - do: - indices.create: - index: test_1 - body: - mappings: - test: - _parent: { type: "foo" } - - - do: - index: - index: test_1 - type: test - id: 1 - parent: 5 - body: { foo: bar } - - ---- -"Parent": - - do: - get_source: - index: test_1 - type: test - id: 1 - parent: 5 - - - match: { '': {foo: bar}} - ---- -"Parent omitted": - - - do: - catch: bad_request - get_source: - index: test_1 - type: test - id: 1 - diff --git a/rest-api-spec/src/main/resources/rest-api-spec/test/get_source/55_parent_with_routing.yml b/rest-api-spec/src/main/resources/rest-api-spec/test/get_source/55_parent_with_routing.yml deleted file mode 100644 index 38ca9d5f22d15..0000000000000 --- a/rest-api-spec/src/main/resources/rest-api-spec/test/get_source/55_parent_with_routing.yml +++ /dev/null @@ -1,52 +0,0 @@ ---- -"Parent with routing": - - - do: - indices.create: - index: test_1 - body: - mappings: - test: - _parent: { type: "foo" } - settings: - number_of_shards: 5 - number_of_replicas: 0 - - - do: - cluster.health: - wait_for_status: green - - - do: - index: - index: test_1 - type: test - id: 1 - parent: 5 - routing: 4 - body: { foo: bar } - - - do: - get_source: - index: test_1 - type: test - id: 1 - parent: 5 - routing: 4 - - - match: { '': {foo: bar}} - - - do: - catch: missing - get_source: - index: test_1 - type: test - id: 1 - parent: 5 - - - do: - get_source: - index: test_1 - type: test - id: 1 - routing: 4 - diff --git a/rest-api-spec/src/main/resources/rest-api-spec/test/index/50_parent.yml b/rest-api-spec/src/main/resources/rest-api-spec/test/index/50_parent.yml deleted file mode 100644 index 89077dac4ae8e..0000000000000 --- a/rest-api-spec/src/main/resources/rest-api-spec/test/index/50_parent.yml +++ /dev/null @@ -1,39 +0,0 @@ ---- -"Parent": - - - do: - indices.create: - index: test_1 - body: - mappings: - test: - _parent: { type: "foo" } - - - do: - catch: /routing_missing_exception/ - index: - index: test_1 - type: test - id: 1 - body: { foo: bar } - - - do: - index: - index: test_1 - type: test - id: 1 - parent: 5 - body: { foo: bar } - - - do: - get: - index: test_1 - type: test - id: 1 - parent: 5 - stored_fields: [_parent, _routing] - - - match: { _id: "1"} - - match: { _parent: "5"} - - match: { _routing: "5"} - diff --git a/rest-api-spec/src/main/resources/rest-api-spec/test/index/55_parent_with_routing.yml b/rest-api-spec/src/main/resources/rest-api-spec/test/index/55_parent_with_routing.yml deleted file mode 100644 index db71d16423009..0000000000000 --- a/rest-api-spec/src/main/resources/rest-api-spec/test/index/55_parent_with_routing.yml +++ /dev/null @@ -1,55 +0,0 @@ ---- -"Parent with routing": - - - do: - indices.create: - index: test_1 - body: - mappings: - test: - _parent: { type: "foo" } - settings: - number_of_shards: 5 - number_of_replicas: 0 - - - do: - cluster.health: - wait_for_status: green - - - do: - index: - index: test_1 - type: test - id: 1 - parent: 5 - routing: 4 - body: { foo: bar } - - - do: - get: - index: test_1 - type: test - id: 1 - parent: 5 - routing: 4 - stored_fields: [_parent, _routing] - - - match: { _id: "1"} - - match: { _parent: "5"} - - match: { _routing: "4"} - - - do: - catch: missing - get: - index: test_1 - type: test - id: 1 - parent: 5 - - - do: - get: - index: test_1 - type: test - id: 1 - routing: 4 - diff --git a/rest-api-spec/src/main/resources/rest-api-spec/test/mget/30_parent.yml b/rest-api-spec/src/main/resources/rest-api-spec/test/mget/30_parent.yml deleted file mode 100644 index ad064df69ce55..0000000000000 --- a/rest-api-spec/src/main/resources/rest-api-spec/test/mget/30_parent.yml +++ /dev/null @@ -1,56 +0,0 @@ ---- -"Parent": - - - do: - indices.create: - index: test_1 - body: - mappings: - test: - _parent: { type: "foo" } - settings: - number_of_shards: 5 - - - do: - index: - index: test_1 - type: test - id: 1 - parent: 4 - body: { foo: bar } - - - do: - index: - index: test_1 - type: test - id: 2 - parent: 5 - body: { foo: bar } - - - do: - mget: - index: test_1 - type: test - body: - docs: - - { _id: 1 } - - { _id: 1, parent: 5, stored_fields: [ _parent, _routing ] } - - { _id: 1, parent: 4, stored_fields: [ _parent, _routing ] } - - { _id: 2, parent: 5, stored_fields: [ _parent, _routing ] } - - - is_false: docs.0.found - - is_false: docs.1.found - - - is_true: docs.2.found - - match: { docs.2._index: test_1 } - - match: { docs.2._type: test } - - match: { docs.2._id: "1" } - - match: { docs.2._parent: "4" } - - match: { docs.2._routing: "4" } - - - is_true: docs.3.found - - match: { docs.3._index: test_1 } - - match: { docs.3._type: test } - - match: { docs.3._id: "2" } - - match: { docs.3._parent: "5" } - - match: { docs.3._routing: "5" } diff --git a/rest-api-spec/src/main/resources/rest-api-spec/test/mget/55_parent_with_routing.yml b/rest-api-spec/src/main/resources/rest-api-spec/test/mget/55_parent_with_routing.yml deleted file mode 100644 index 1fa1ce2cddb9a..0000000000000 --- a/rest-api-spec/src/main/resources/rest-api-spec/test/mget/55_parent_with_routing.yml +++ /dev/null @@ -1,47 +0,0 @@ ---- -"Parent": - - - do: - indices.create: - index: test_1 - body: - mappings: - test: - _parent: { type: "foo" } - settings: - number_of_shards: 5 - number_of_replicas: 0 - - - do: - cluster.health: - wait_for_status: green - - - do: - index: - index: test_1 - type: test - id: 1 - parent: 4 - routing: 5 - body: { foo: bar } - - - do: - mget: - index: test_1 - type: test - stored_fields: [ _routing , _parent] - body: - docs: - - { _id: 1 } - - { _id: 1, parent: 4 } - - { _id: 1, parent: 4, routing: 5 } - - - is_false: docs.0.found - - is_false: docs.1.found - - - is_true: docs.2.found - - match: { docs.2._index: test_1 } - - match: { docs.2._type: test } - - match: { docs.2._id: "1" } - - match: { docs.2._parent: "4" } - - match: { docs.2._routing: "5" } diff --git a/rest-api-spec/src/main/resources/rest-api-spec/test/search/160_exists_query.yml b/rest-api-spec/src/main/resources/rest-api-spec/test/search/160_exists_query.yml index f3380f513966d..868754d5930e0 100644 --- a/rest-api-spec/src/main/resources/rest-api-spec/test/search/160_exists_query.yml +++ b/rest-api-spec/src/main/resources/rest-api-spec/test/search/160_exists_query.yml @@ -581,21 +581,6 @@ setup: - match: {hits.total: 4} ---- -"Test exists query on _uid field": - - skip: - version: " - 6.0.99" - reason: exists on _uid not supported prior to 6.1.0 - - do: - search: - index: test - body: - query: - exists: - field: _uid - - - match: {hits.total: 4} - --- "Test exists query on _index field": - skip: diff --git a/rest-api-spec/src/main/resources/rest-api-spec/test/update/50_parent.yml b/rest-api-spec/src/main/resources/rest-api-spec/test/update/50_parent.yml deleted file mode 100644 index e65f80d705cb2..0000000000000 --- a/rest-api-spec/src/main/resources/rest-api-spec/test/update/50_parent.yml +++ /dev/null @@ -1,75 +0,0 @@ ---- -setup: - - do: - indices.create: - index: test_1 - body: - mappings: - test: - _parent: { type: "foo" } ---- -"Parent": - - - do: - catch: /routing_missing_exception/ - update: - index: test_1 - type: test - id: 1 - body: - doc: { foo: baz } - upsert: { foo: bar } - - - do: - update: - index: test_1 - type: test - id: 1 - parent: 5 - body: - doc: { foo: baz } - upsert: { foo: bar } - - - do: - get: - index: test_1 - type: test - id: 1 - parent: 5 - stored_fields: [_parent, _routing] - - - match: { _parent: "5"} - - match: { _routing: "5"} - - - do: - update: - index: test_1 - type: test - id: 1 - parent: 5 - _source: foo - body: - doc: { foo: baz } - - - match: { get._source.foo: baz } - ---- -"Parent omitted": - - - do: - index: - index: test_1 - type: test - id: 1 - parent: 5 - body: { foo: bar } - - - do: - catch: bad_request - update: - index: test_1 - type: test - id: 1 - body: - doc: { foo: baz } - diff --git a/rest-api-spec/src/main/resources/rest-api-spec/test/update/55_parent_with_routing.yml b/rest-api-spec/src/main/resources/rest-api-spec/test/update/55_parent_with_routing.yml deleted file mode 100644 index e75eddff9a87e..0000000000000 --- a/rest-api-spec/src/main/resources/rest-api-spec/test/update/55_parent_with_routing.yml +++ /dev/null @@ -1,64 +0,0 @@ ---- -"Parent with routing": - - - do: - indices.create: - index: test_1 - body: - mappings: - test: - _parent: { type: "foo" } - settings: - number_of_shards: 5 - number_of_replicas: 0 - - - do: - cluster.health: - wait_for_status: green - - - do: - update: - index: test_1 - type: test - id: 1 - parent: 5 - routing: 4 - body: - doc: { foo: baz } - upsert: { foo: bar } - - - do: - get: - index: test_1 - type: test - id: 1 - routing: 4 - parent: 5 - stored_fields: [_parent, _routing] - - - match: { _parent: "5"} - - match: { _routing: "4"} - - - do: - catch: missing - update: - index: test_1 - type: test - id: 1 - parent: 5 - body: - doc: { foo: baz } - - - do: - update: - index: test_1 - type: test - id: 1 - parent: 5 - routing: 4 - _source: foo - body: - doc: { foo: baz } - - - match: { get._source.foo: baz } - diff --git a/rest-api-spec/src/main/resources/rest-api-spec/test/update/85_fields_meta.yml b/rest-api-spec/src/main/resources/rest-api-spec/test/update/85_fields_meta.yml index 7a6a58e12c0ff..f7791d0986399 100644 --- a/rest-api-spec/src/main/resources/rest-api-spec/test/update/85_fields_meta.yml +++ b/rest-api-spec/src/main/resources/rest-api-spec/test/update/85_fields_meta.yml @@ -8,10 +8,6 @@ - do: indices.create: index: test_1 - body: - mappings: - test: - _parent: { type: "foo" } - do: update: @@ -19,12 +15,11 @@ type: test id: 1 parent: 5 - fields: [ _parent, _routing ] + fields: [ _routing ] body: doc: { foo: baz } upsert: { foo: bar } - - match: { get._parent: "5" } - match: { get._routing: "5" } - do: @@ -33,6 +28,6 @@ type: test id: 1 parent: 5 - stored_fields: [ _parent, _routing ] + stored_fields: [ _routing ] diff --git a/server/src/main/java/org/elasticsearch/action/DocWriteRequest.java b/server/src/main/java/org/elasticsearch/action/DocWriteRequest.java index 09db7089ff629..fa0796cafe184 100644 --- a/server/src/main/java/org/elasticsearch/action/DocWriteRequest.java +++ b/server/src/main/java/org/elasticsearch/action/DocWriteRequest.java @@ -71,13 +71,6 @@ public interface DocWriteRequest extends IndicesRequest { */ String routing(); - - /** - * Get the parent for this request - * @return the Parent - */ - String parent(); - /** * Get the document version for this request * @return the document version diff --git a/server/src/main/java/org/elasticsearch/action/bulk/BulkRequest.java b/server/src/main/java/org/elasticsearch/action/bulk/BulkRequest.java index 8a8353c731b94..d360911be29f9 100644 --- a/server/src/main/java/org/elasticsearch/action/bulk/BulkRequest.java +++ b/server/src/main/java/org/elasticsearch/action/bulk/BulkRequest.java @@ -75,7 +75,6 @@ public class BulkRequest extends ActionRequest implements CompositeIndicesReques private static final ParseField TYPE = new ParseField("_type"); private static final ParseField ID = new ParseField("_id"); private static final ParseField ROUTING = new ParseField("routing"); - private static final ParseField PARENT = new ParseField("parent"); private static final ParseField OP_TYPE = new ParseField("op_type"); private static final ParseField VERSION = new ParseField("version"); private static final ParseField VERSION_TYPE = new ParseField("version_type"); @@ -333,7 +332,6 @@ public BulkRequest add(BytesReference data, @Nullable String defaultIndex, @Null String type = defaultType; String id = null; String routing = defaultRouting; - String parent = null; FetchSourceContext fetchSourceContext = defaultFetchSourceContext; String[] fields = defaultFields; String opType = null; @@ -363,8 +361,6 @@ public BulkRequest add(BytesReference data, @Nullable String defaultIndex, @Null id = parser.text(); } else if (ROUTING.match(currentFieldName, parser.getDeprecationHandler())) { routing = parser.text(); - } else if (PARENT.match(currentFieldName, parser.getDeprecationHandler())) { - parent = parser.text(); } else if (OP_TYPE.match(currentFieldName, parser.getDeprecationHandler())) { opType = parser.text(); } else if (VERSION.match(currentFieldName, parser.getDeprecationHandler())) { @@ -402,7 +398,7 @@ public BulkRequest add(BytesReference data, @Nullable String defaultIndex, @Null } if ("delete".equals(action)) { - add(new DeleteRequest(index, type, id).routing(routing).parent(parent).version(version).versionType(versionType), payload); + add(new DeleteRequest(index, type, id).routing(routing).version(version).versionType(versionType), payload); } else { nextMarker = findNextMarker(marker, from, data, length); if (nextMarker == -1) { @@ -414,23 +410,22 @@ public BulkRequest add(BytesReference data, @Nullable String defaultIndex, @Null // of index request. if ("index".equals(action)) { if (opType == null) { - internalAdd(new IndexRequest(index, type, id).routing(routing).parent(parent).version(version).versionType(versionType) + internalAdd(new IndexRequest(index, type, id).routing(routing).version(version).versionType(versionType) .setPipeline(pipeline) .source(sliceTrimmingCarriageReturn(data, from, nextMarker,xContentType), xContentType), payload); } else { - internalAdd(new IndexRequest(index, type, id).routing(routing).parent(parent).version(version).versionType(versionType) + internalAdd(new IndexRequest(index, type, id).routing(routing).version(version).versionType(versionType) .create("create".equals(opType)).setPipeline(pipeline) .source(sliceTrimmingCarriageReturn(data, from, nextMarker, xContentType), xContentType), payload); } } else if ("create".equals(action)) { - internalAdd(new IndexRequest(index, type, id).routing(routing).parent(parent).version(version).versionType(versionType) + internalAdd(new IndexRequest(index, type, id).routing(routing).version(version).versionType(versionType) .create(true).setPipeline(pipeline) .source(sliceTrimmingCarriageReturn(data, from, nextMarker, xContentType), xContentType), payload); } else if ("update".equals(action)) { - UpdateRequest updateRequest = new UpdateRequest(index, type, id).routing(routing).parent(parent).retryOnConflict(retryOnConflict) + UpdateRequest updateRequest = new UpdateRequest(index, type, id).routing(routing).retryOnConflict(retryOnConflict) .version(version).versionType(versionType) - .routing(routing) - .parent(parent); + .routing(routing); // EMPTY is safe here because we never call namedObject try (InputStream dataStream = sliceTrimmingCarriageReturn(data, from, nextMarker, xContentType).streamInput(); XContentParser sliceParser = xContent.createParser(NamedXContentRegistry.EMPTY, diff --git a/server/src/main/java/org/elasticsearch/action/bulk/TransportBulkAction.java b/server/src/main/java/org/elasticsearch/action/bulk/TransportBulkAction.java index 5a3544377155c..f8fd4fa924b30 100644 --- a/server/src/main/java/org/elasticsearch/action/bulk/TransportBulkAction.java +++ b/server/src/main/java/org/elasticsearch/action/bulk/TransportBulkAction.java @@ -299,7 +299,7 @@ protected void doRun() throws Exception { TransportUpdateAction.resolveAndValidateRouting(metaData, concreteIndex.getName(), (UpdateRequest) docWriteRequest); break; case DELETE: - docWriteRequest.routing(metaData.resolveIndexRouting(docWriteRequest.parent(), docWriteRequest.routing(), docWriteRequest.index())); + docWriteRequest.routing(metaData.resolveIndexRouting(docWriteRequest.routing(), docWriteRequest.index())); // check if routing is required, if so, throw error if routing wasn't specified if (docWriteRequest.routing() == null && metaData.routingRequired(concreteIndex.getName(), docWriteRequest.type())) { throw new RoutingMissingException(concreteIndex.getName(), docWriteRequest.type(), docWriteRequest.id()); diff --git a/server/src/main/java/org/elasticsearch/action/bulk/TransportShardBulkAction.java b/server/src/main/java/org/elasticsearch/action/bulk/TransportShardBulkAction.java index 7221118d2ef50..fcc8f5377dbb2 100644 --- a/server/src/main/java/org/elasticsearch/action/bulk/TransportShardBulkAction.java +++ b/server/src/main/java/org/elasticsearch/action/bulk/TransportShardBulkAction.java @@ -513,7 +513,7 @@ private static Engine.Result performOpOnReplica(DocWriteResponse primaryResponse final SourceToParse sourceToParse = SourceToParse.source(shardId.getIndexName(), indexRequest.type(), indexRequest.id(), indexRequest.source(), indexRequest.getContentType()) - .routing(indexRequest.routing()).parent(indexRequest.parent()); + .routing(indexRequest.routing()); return replica.applyIndexOperationOnReplica(primaryResponse.getSeqNo(), primaryResponse.getVersion(), indexRequest.versionType().versionTypeForReplicationAndRecovery(), indexRequest.getAutoGeneratedTimestamp(), indexRequest.isRetry(), sourceToParse, update -> { @@ -539,7 +539,7 @@ static Engine.IndexResult executeIndexRequestOnPrimary(IndexRequest request, Ind MappingUpdatePerformer mappingUpdater) throws Exception { final SourceToParse sourceToParse = SourceToParse.source(request.index(), request.type(), request.id(), request.source(), request.getContentType()) - .routing(request.routing()).parent(request.parent()); + .routing(request.routing()); try { // if a mapping update is required to index this request, issue a mapping update on the master, and abort the // current indexing operation so that it can be retried with the updated mapping from the master diff --git a/server/src/main/java/org/elasticsearch/action/delete/DeleteRequest.java b/server/src/main/java/org/elasticsearch/action/delete/DeleteRequest.java index 50d1f4cb8e9c7..879e8e665cd44 100644 --- a/server/src/main/java/org/elasticsearch/action/delete/DeleteRequest.java +++ b/server/src/main/java/org/elasticsearch/action/delete/DeleteRequest.java @@ -19,6 +19,7 @@ package org.elasticsearch.action.delete; +import org.elasticsearch.Version; import org.elasticsearch.action.ActionRequestValidationException; import org.elasticsearch.action.CompositeIndicesRequest; import org.elasticsearch.action.DocWriteRequest; @@ -51,8 +52,6 @@ public class DeleteRequest extends ReplicatedWriteRequest impleme private String id; @Nullable private String routing; - @Nullable - private String parent; private long version = Versions.MATCH_ANY; private VersionType versionType = VersionType.INTERNAL; @@ -130,22 +129,6 @@ public DeleteRequest id(String id) { return this; } - /** - * @return The parent for this request. - */ - @Override - public String parent() { - return parent; - } - - /** - * Sets the parent id of this document. - */ - public DeleteRequest parent(String parent) { - this.parent = parent; - return this; - } - /** * Controls the shard routing of the request. Using this value to hash the shard * and not the id. @@ -202,7 +185,9 @@ public void readFrom(StreamInput in) throws IOException { type = in.readString(); id = in.readString(); routing = in.readOptionalString(); - parent = in.readOptionalString(); + if (in.getVersion().before(Version.V_7_0_0_alpha1)) { + in.readOptionalString(); // _parent + } version = in.readLong(); versionType = VersionType.fromValue(in.readByte()); } @@ -213,7 +198,9 @@ public void writeTo(StreamOutput out) throws IOException { out.writeString(type); out.writeString(id); out.writeOptionalString(routing()); - out.writeOptionalString(parent()); + if (out.getVersion().before(Version.V_7_0_0_alpha1)) { + out.writeOptionalString(null); // _parent + } out.writeLong(version); out.writeByte(versionType.getValue()); } diff --git a/server/src/main/java/org/elasticsearch/action/delete/DeleteRequestBuilder.java b/server/src/main/java/org/elasticsearch/action/delete/DeleteRequestBuilder.java index b9b0f95f8de90..9060af8e17c8c 100644 --- a/server/src/main/java/org/elasticsearch/action/delete/DeleteRequestBuilder.java +++ b/server/src/main/java/org/elasticsearch/action/delete/DeleteRequestBuilder.java @@ -55,15 +55,6 @@ public DeleteRequestBuilder setId(String id) { return this; } - /** - * Sets the parent id of this document. Will simply set the routing to this value, as it is only - * used for routing with delete requests. - */ - public DeleteRequestBuilder setParent(String parent) { - request.parent(parent); - return this; - } - /** * Controls the shard routing of the delete request. Using this value to hash the shard * and not the id. diff --git a/server/src/main/java/org/elasticsearch/action/get/GetRequest.java b/server/src/main/java/org/elasticsearch/action/get/GetRequest.java index ea5dda45279e6..05100e5880983 100644 --- a/server/src/main/java/org/elasticsearch/action/get/GetRequest.java +++ b/server/src/main/java/org/elasticsearch/action/get/GetRequest.java @@ -19,6 +19,7 @@ package org.elasticsearch.action.get; +import org.elasticsearch.Version; import org.elasticsearch.action.ActionRequestValidationException; import org.elasticsearch.action.RealtimeRequest; import org.elasticsearch.action.ValidateActions; @@ -48,7 +49,6 @@ public class GetRequest extends SingleShardRequest implements Realti private String type; private String id; private String routing; - private String parent; private String preference; private String[] storedFields; @@ -126,21 +126,6 @@ public GetRequest id(String id) { return this; } - /** - * @return The parent for this request. - */ - public String parent() { - return parent; - } - - /** - * Sets the parent id of this document. - */ - public GetRequest parent(String parent) { - this.parent = parent; - return this; - } - /** * Controls the shard routing of the request. Using this value to hash the shard * and not the id. @@ -260,7 +245,9 @@ public void readFrom(StreamInput in) throws IOException { type = in.readString(); id = in.readString(); routing = in.readOptionalString(); - parent = in.readOptionalString(); + if (in.getVersion().before(Version.V_7_0_0_alpha1)) { + in.readOptionalString(); + } preference = in.readOptionalString(); refresh = in.readBoolean(); storedFields = in.readOptionalStringArray(); @@ -277,7 +264,9 @@ public void writeTo(StreamOutput out) throws IOException { out.writeString(type); out.writeString(id); out.writeOptionalString(routing); - out.writeOptionalString(parent); + if (out.getVersion().before(Version.V_7_0_0_alpha1)) { + out.writeOptionalString(null); + } out.writeOptionalString(preference); out.writeBoolean(refresh); diff --git a/server/src/main/java/org/elasticsearch/action/get/GetRequestBuilder.java b/server/src/main/java/org/elasticsearch/action/get/GetRequestBuilder.java index 1ca8dbde65200..9f59d3ecaef60 100644 --- a/server/src/main/java/org/elasticsearch/action/get/GetRequestBuilder.java +++ b/server/src/main/java/org/elasticsearch/action/get/GetRequestBuilder.java @@ -56,15 +56,6 @@ public GetRequestBuilder setId(String id) { return this; } - /** - * Sets the parent id of this document. Will simply set the routing to this value, as it is only - * used for routing with delete requests. - */ - public GetRequestBuilder setParent(String parent) { - request.parent(parent); - return this; - } - /** * Controls the shard routing of the request. Using this value to hash the shard * and not the id. diff --git a/server/src/main/java/org/elasticsearch/action/get/MultiGetRequest.java b/server/src/main/java/org/elasticsearch/action/get/MultiGetRequest.java index 31e5e2dfff20a..b93c8a7f037c8 100644 --- a/server/src/main/java/org/elasticsearch/action/get/MultiGetRequest.java +++ b/server/src/main/java/org/elasticsearch/action/get/MultiGetRequest.java @@ -20,6 +20,7 @@ package org.elasticsearch.action.get; import org.elasticsearch.ElasticsearchParseException; +import org.elasticsearch.Version; import org.elasticsearch.action.ActionRequest; import org.elasticsearch.action.ActionRequestValidationException; import org.elasticsearch.action.CompositeIndicesRequest; @@ -58,7 +59,6 @@ public class MultiGetRequest extends ActionRequest private static final ParseField TYPE = new ParseField("_type"); private static final ParseField ID = new ParseField("_id"); private static final ParseField ROUTING = new ParseField("routing"); - private static final ParseField PARENT = new ParseField("parent"); private static final ParseField VERSION = new ParseField("version"); private static final ParseField VERSION_TYPE = new ParseField("version_type"); private static final ParseField FIELDS = new ParseField("fields"); @@ -74,7 +74,6 @@ public static class Item implements Streamable, IndicesRequest, ToXContentObject private String type; private String id; private String routing; - private String parent; private String[] storedFields; private long version = Versions.MATCH_ANY; private VersionType versionType = VersionType.INTERNAL; @@ -141,18 +140,6 @@ public String routing() { return this.routing; } - public Item parent(String parent) { - this.parent = parent; - return this; - } - - /** - * @return The parent for this request. - */ - public String parent() { - return parent; - } - public Item storedFields(String... fields) { this.storedFields = fields; return this; @@ -204,7 +191,9 @@ public void readFrom(StreamInput in) throws IOException { type = in.readOptionalString(); id = in.readString(); routing = in.readOptionalString(); - parent = in.readOptionalString(); + if (in.getVersion().before(Version.V_7_0_0_alpha1)) { + in.readOptionalString(); // _parent + } storedFields = in.readOptionalStringArray(); version = in.readLong(); versionType = VersionType.fromValue(in.readByte()); @@ -218,7 +207,9 @@ public void writeTo(StreamOutput out) throws IOException { out.writeOptionalString(type); out.writeString(id); out.writeOptionalString(routing); - out.writeOptionalString(parent); + if (out.getVersion().before(Version.V_7_0_0_alpha1)) { + out.writeOptionalString(null); // _parent + } out.writeOptionalStringArray(storedFields); out.writeLong(version); out.writeByte(versionType.getValue()); @@ -233,7 +224,6 @@ public XContentBuilder toXContent(XContentBuilder builder, Params params) throws builder.field(TYPE.getPreferredName(), type); builder.field(ID.getPreferredName(), id); builder.field(ROUTING.getPreferredName(), routing); - builder.field(PARENT.getPreferredName(), parent); builder.field(STORED_FIELDS.getPreferredName(), storedFields); builder.field(VERSION.getPreferredName(), version); builder.field(VERSION_TYPE.getPreferredName(), VersionType.toString(versionType)); @@ -256,7 +246,6 @@ public boolean equals(Object o) { if (!id.equals(item.id)) return false; if (!index.equals(item.index)) return false; if (routing != null ? !routing.equals(item.routing) : item.routing != null) return false; - if (parent != null ? !parent.equals(item.parent) : item.parent != null) return false; if (type != null ? !type.equals(item.type) : item.type != null) return false; if (versionType != item.versionType) return false; @@ -269,7 +258,6 @@ public int hashCode() { result = 31 * result + (type != null ? type.hashCode() : 0); result = 31 * result + id.hashCode(); result = 31 * result + (routing != null ? routing.hashCode() : 0); - result = 31 * result + (parent != null ? parent.hashCode() : 0); result = 31 * result + (storedFields != null ? Arrays.hashCode(storedFields) : 0); result = 31 * result + Long.hashCode(version); result = 31 * result + versionType.hashCode(); @@ -407,7 +395,6 @@ private static void parseDocuments(XContentParser parser, List items, @Nul String type = defaultType; String id = null; String routing = defaultRouting; - String parent = null; List storedFields = null; long version = Versions.MATCH_ANY; VersionType versionType = VersionType.INTERNAL; @@ -429,8 +416,6 @@ private static void parseDocuments(XContentParser parser, List items, @Nul id = parser.text(); } else if (ROUTING.match(currentFieldName, parser.getDeprecationHandler())) { routing = parser.text(); - } else if (PARENT.match(currentFieldName, parser.getDeprecationHandler())) { - parent = parser.text(); } else if (FIELDS.match(currentFieldName, parser.getDeprecationHandler())) { throw new ParsingException(parser.getTokenLocation(), "Unsupported field [fields] used, expected [stored_fields] instead"); @@ -510,7 +495,7 @@ private static void parseDocuments(XContentParser parser, List items, @Nul } else { aFields = defaultFields; } - items.add(new Item(index, type, id).routing(routing).storedFields(aFields).parent(parent).version(version).versionType(versionType) + items.add(new Item(index, type, id).routing(routing).storedFields(aFields).version(version).versionType(versionType) .fetchSourceContext(fetchSourceContext == FetchSourceContext.FETCH_SOURCE ? defaultFetchSource : fetchSourceContext)); } } diff --git a/server/src/main/java/org/elasticsearch/action/get/TransportGetAction.java b/server/src/main/java/org/elasticsearch/action/get/TransportGetAction.java index 599a6655e02e8..0aeacb38ffa56 100644 --- a/server/src/main/java/org/elasticsearch/action/get/TransportGetAction.java +++ b/server/src/main/java/org/elasticsearch/action/get/TransportGetAction.java @@ -69,7 +69,7 @@ protected ShardIterator shards(ClusterState state, InternalRequest request) { @Override protected void resolveRequest(ClusterState state, InternalRequest request) { // update the routing (request#index here is possibly an alias) - request.request().routing(state.metaData().resolveIndexRouting(request.request().parent(), request.request().routing(), request.request().index())); + request.request().routing(state.metaData().resolveIndexRouting(request.request().routing(), request.request().index())); // Fail fast on the node that received the request. if (request.request().routing() == null && state.getMetaData().routingRequired(request.concreteIndex(), request.request().type())) { throw new RoutingMissingException(request.concreteIndex(), request.request().type(), request.request().id()); diff --git a/server/src/main/java/org/elasticsearch/action/get/TransportMultiGetAction.java b/server/src/main/java/org/elasticsearch/action/get/TransportMultiGetAction.java index bea65283cc034..31ca0e0322b6b 100644 --- a/server/src/main/java/org/elasticsearch/action/get/TransportMultiGetAction.java +++ b/server/src/main/java/org/elasticsearch/action/get/TransportMultiGetAction.java @@ -68,7 +68,7 @@ protected void doExecute(final MultiGetRequest request, final ActionListener implement private String id; @Nullable private String routing; - @Nullable - private String parent; private BytesReference source; @@ -254,19 +252,6 @@ public String routing() { return this.routing; } - /** - * Sets the parent id of this document. - */ - public IndexRequest parent(String parent) { - this.parent = parent; - return this; - } - - @Override - public String parent() { - return this.parent; - } - /** * Sets the ingest pipeline to be executed before indexing the document */ @@ -490,14 +475,6 @@ public void process(Version indexCreatedVersion, @Nullable MappingMetaData mappi if (mappingMd.routing().required() && routing == null) { throw new RoutingMissingException(concreteIndex, type, id); } - - if (parent != null && !mappingMd.hasParentField()) { - throw new IllegalArgumentException("can't specify parent if no parent field has been configured"); - } - } else { - if (parent != null) { - throw new IllegalArgumentException("can't specify parent if no parent field has been configured"); - } } if ("".equals(id)) { @@ -520,7 +497,7 @@ public void process(Version indexCreatedVersion, @Nullable MappingMetaData mappi /* resolve the routing if needed */ public void resolveRouting(MetaData metaData) { - routing(metaData.resolveIndexRouting(parent, routing, index)); + routing(metaData.resolveIndexRouting(routing, index)); } @Override @@ -529,7 +506,9 @@ public void readFrom(StreamInput in) throws IOException { type = in.readOptionalString(); id = in.readOptionalString(); routing = in.readOptionalString(); - parent = in.readOptionalString(); + if (in.getVersion().before(Version.V_7_0_0_alpha1)) { + in.readOptionalString(); // _parent + } if (in.getVersion().before(Version.V_6_0_0_alpha1)) { in.readOptionalString(); // timestamp in.readOptionalWriteable(TimeValue::new); // ttl @@ -554,7 +533,9 @@ public void writeTo(StreamOutput out) throws IOException { out.writeOptionalString(type); out.writeOptionalString(id); out.writeOptionalString(routing); - out.writeOptionalString(parent); + if (out.getVersion().before(Version.V_7_0_0_alpha1)) { + out.writeOptionalString(null); // _parent + } if (out.getVersion().before(Version.V_6_0_0_alpha1)) { // Serialize a fake timestamp. 5.x expect this value to be set by the #process method so we can't use null. // On the other hand, indices created on 5.x do not index the timestamp field. Therefore passing a 0 (or any value) for diff --git a/server/src/main/java/org/elasticsearch/action/index/IndexRequestBuilder.java b/server/src/main/java/org/elasticsearch/action/index/IndexRequestBuilder.java index 88b094a33f521..1f7d5e0bca89a 100644 --- a/server/src/main/java/org/elasticsearch/action/index/IndexRequestBuilder.java +++ b/server/src/main/java/org/elasticsearch/action/index/IndexRequestBuilder.java @@ -71,15 +71,6 @@ public IndexRequestBuilder setRouting(String routing) { return this; } - /** - * Sets the parent id of this document. If routing is not set, automatically set it as the - * routing as well. - */ - public IndexRequestBuilder setParent(String parent) { - request.parent(parent); - return this; - } - /** * Sets the source. */ diff --git a/server/src/main/java/org/elasticsearch/action/ingest/SimulatePipelineRequest.java b/server/src/main/java/org/elasticsearch/action/ingest/SimulatePipelineRequest.java index aeb4b47719dd6..3aa697b8e997c 100644 --- a/server/src/main/java/org/elasticsearch/action/ingest/SimulatePipelineRequest.java +++ b/server/src/main/java/org/elasticsearch/action/ingest/SimulatePipelineRequest.java @@ -193,8 +193,6 @@ private static List parseDocs(Map config) { dataMap, MetaData.ID.getFieldName(), "_id"); String routing = ConfigurationUtils.readOptionalStringOrIntProperty(null, null, dataMap, MetaData.ROUTING.getFieldName()); - String parent = ConfigurationUtils.readOptionalStringOrIntProperty(null, null, - dataMap, MetaData.PARENT.getFieldName()); Long version = null; if (dataMap.containsKey(MetaData.VERSION.getFieldName())) { version = (Long) ConfigurationUtils.readObject(null, null, dataMap, MetaData.VERSION.getFieldName()); @@ -205,7 +203,7 @@ private static List parseDocs(Map config) { MetaData.VERSION_TYPE.getFieldName())); } IngestDocument ingestDocument = - new IngestDocument(index, type, id, routing, parent, version, versionType, document); + new IngestDocument(index, type, id, routing, version, versionType, document); ingestDocumentList.add(ingestDocument); } return ingestDocumentList; diff --git a/server/src/main/java/org/elasticsearch/action/termvectors/TermVectorsRequest.java b/server/src/main/java/org/elasticsearch/action/termvectors/TermVectorsRequest.java index e75f510d80c02..053eb6939da97 100644 --- a/server/src/main/java/org/elasticsearch/action/termvectors/TermVectorsRequest.java +++ b/server/src/main/java/org/elasticsearch/action/termvectors/TermVectorsRequest.java @@ -65,7 +65,6 @@ public class TermVectorsRequest extends SingleShardRequest i private static final ParseField TYPE = new ParseField("_type"); private static final ParseField ID = new ParseField("_id"); private static final ParseField ROUTING = new ParseField("routing"); - private static final ParseField PARENT = new ParseField("parent"); private static final ParseField VERSION = new ParseField("version"); private static final ParseField VERSION_TYPE = new ParseField("version_type"); private static final ParseField FIELDS = new ParseField("fields"); @@ -87,8 +86,6 @@ public class TermVectorsRequest extends SingleShardRequest i private String routing; - private String parent; - private VersionType versionType = VersionType.INTERNAL; private long version = Versions.MATCH_ANY; @@ -185,7 +182,6 @@ public TermVectorsRequest(TermVectorsRequest other) { this.flagsEnum = other.getFlags().clone(); this.preference = other.preference(); this.routing = other.routing(); - this.parent = other.parent(); if (other.selectedFields != null) { this.selectedFields = new HashSet<>(other.selectedFields); } @@ -204,7 +200,6 @@ public TermVectorsRequest(MultiGetRequest.Item item) { this.type = item.type(); this.selectedFields(item.storedFields()); this.routing(item.routing()); - this.parent(item.parent()); } public EnumSet getFlags() { @@ -293,18 +288,6 @@ public TermVectorsRequest routing(String routing) { return this; } - public String parent() { - return parent; - } - - /** - * Sets the parent id of this document. - */ - public TermVectorsRequest parent(String parent) { - this.parent = parent; - return this; - } - public String preference() { return this.preference; } @@ -522,7 +505,10 @@ public void readFrom(StreamInput in) throws IOException { } } routing = in.readOptionalString(); - parent = in.readOptionalString(); + + if (in.getVersion().before(Version.V_7_0_0_alpha1)) { + in.readOptionalString(); // _parent + } preference = in.readOptionalString(); long flags = in.readVLong(); @@ -565,7 +551,9 @@ public void writeTo(StreamOutput out) throws IOException { } } out.writeOptionalString(routing); - out.writeOptionalString(parent); + if (out.getVersion().before(Version.V_7_0_0_alpha1)) { + out.writeOptionalString(null); // _parent + } out.writeOptionalString(preference); long longFlags = 0; for (Flag flag : flagsEnum) { @@ -650,8 +638,6 @@ public static void parseRequest(TermVectorsRequest termVectorsRequest, XContentP termVectorsRequest.doc(jsonBuilder().copyCurrentStructure(parser)); } else if (ROUTING.match(currentFieldName, parser.getDeprecationHandler())) { termVectorsRequest.routing = parser.text(); - } else if (PARENT.match(currentFieldName, parser.getDeprecationHandler())) { - termVectorsRequest.parent = parser.text(); } else if (VERSION.match(currentFieldName, parser.getDeprecationHandler())) { termVectorsRequest.version = parser.longValue(); } else if (VERSION_TYPE.match(currentFieldName, parser.getDeprecationHandler())) { diff --git a/server/src/main/java/org/elasticsearch/action/termvectors/TermVectorsRequestBuilder.java b/server/src/main/java/org/elasticsearch/action/termvectors/TermVectorsRequestBuilder.java index 47bd09b100857..34ce90156d119 100644 --- a/server/src/main/java/org/elasticsearch/action/termvectors/TermVectorsRequestBuilder.java +++ b/server/src/main/java/org/elasticsearch/action/termvectors/TermVectorsRequestBuilder.java @@ -88,15 +88,6 @@ public TermVectorsRequestBuilder setRouting(String routing) { return this; } - /** - * Sets the parent id of this document. Will simply set the routing to this value, as it is only - * used for routing with delete requests. - */ - public TermVectorsRequestBuilder setParent(String parent) { - request.parent(parent); - return this; - } - /** * Sets the preference to execute the search. Defaults to randomize across shards. Can be set to * _local to prefer local shards or a custom value, which guarantees that the same order diff --git a/server/src/main/java/org/elasticsearch/action/termvectors/TransportMultiTermVectorsAction.java b/server/src/main/java/org/elasticsearch/action/termvectors/TransportMultiTermVectorsAction.java index fc44ba64a9822..1d164087ed023 100644 --- a/server/src/main/java/org/elasticsearch/action/termvectors/TransportMultiTermVectorsAction.java +++ b/server/src/main/java/org/elasticsearch/action/termvectors/TransportMultiTermVectorsAction.java @@ -64,7 +64,7 @@ protected void doExecute(final MultiTermVectorsRequest request, final ActionList Map shardRequests = new HashMap<>(); for (int i = 0; i < request.requests.size(); i++) { TermVectorsRequest termVectorsRequest = request.requests.get(i); - termVectorsRequest.routing(clusterState.metaData().resolveIndexRouting(termVectorsRequest.parent(), termVectorsRequest.routing(), termVectorsRequest.index())); + termVectorsRequest.routing(clusterState.metaData().resolveIndexRouting(termVectorsRequest.routing(), termVectorsRequest.index())); if (!clusterState.metaData().hasConcreteIndex(termVectorsRequest.index())) { responses.set(i, new MultiTermVectorsItemResponse(null, new MultiTermVectorsResponse.Failure(termVectorsRequest.index(), termVectorsRequest.type(), termVectorsRequest.id(), new IndexNotFoundException(termVectorsRequest.index())))); diff --git a/server/src/main/java/org/elasticsearch/action/termvectors/TransportTermVectorsAction.java b/server/src/main/java/org/elasticsearch/action/termvectors/TransportTermVectorsAction.java index 289f40f1a34a8..a259f5b828a05 100644 --- a/server/src/main/java/org/elasticsearch/action/termvectors/TransportTermVectorsAction.java +++ b/server/src/main/java/org/elasticsearch/action/termvectors/TransportTermVectorsAction.java @@ -78,7 +78,7 @@ protected boolean resolveIndex(TermVectorsRequest request) { @Override protected void resolveRequest(ClusterState state, InternalRequest request) { // update the routing (request#index here is possibly an alias or a parent) - request.request().routing(state.metaData().resolveIndexRouting(request.request().parent(), request.request().routing(), request.request().index())); + request.request().routing(state.metaData().resolveIndexRouting(request.request().routing(), request.request().index())); // Fail fast on the node that received the request. if (request.request().routing() == null && state.getMetaData().routingRequired(request.concreteIndex(), request.request().type())) { throw new RoutingMissingException(request.concreteIndex(), request.request().type(), request.request().id()); diff --git a/server/src/main/java/org/elasticsearch/action/update/TransportUpdateAction.java b/server/src/main/java/org/elasticsearch/action/update/TransportUpdateAction.java index a9d0e305f14ca..a9f9a1d32bbf7 100644 --- a/server/src/main/java/org/elasticsearch/action/update/TransportUpdateAction.java +++ b/server/src/main/java/org/elasticsearch/action/update/TransportUpdateAction.java @@ -105,7 +105,7 @@ protected void resolveRequest(ClusterState state, UpdateRequest request) { } public static void resolveAndValidateRouting(MetaData metaData, String concreteIndex, UpdateRequest request) { - request.routing((metaData.resolveIndexRouting(request.parent(), request.routing(), request.index()))); + request.routing((metaData.resolveIndexRouting(request.routing(), request.index()))); // Fail fast on the node that received the request, rather than failing when translating on the index or delete request. if (request.routing() == null && metaData.routingRequired(concreteIndex, request.type())) { throw new RoutingMissingException(concreteIndex, request.type(), request.id()); diff --git a/server/src/main/java/org/elasticsearch/action/update/UpdateHelper.java b/server/src/main/java/org/elasticsearch/action/update/UpdateHelper.java index ab10aa710cce6..63378fd75cc93 100644 --- a/server/src/main/java/org/elasticsearch/action/update/UpdateHelper.java +++ b/server/src/main/java/org/elasticsearch/action/update/UpdateHelper.java @@ -40,7 +40,6 @@ import org.elasticsearch.index.engine.DocumentMissingException; import org.elasticsearch.index.engine.DocumentSourceMissingException; import org.elasticsearch.index.get.GetResult; -import org.elasticsearch.index.mapper.ParentFieldMapper; import org.elasticsearch.index.mapper.RoutingFieldMapper; import org.elasticsearch.index.shard.IndexShard; import org.elasticsearch.index.shard.ShardId; @@ -152,7 +151,7 @@ Result prepareUpsert(ShardId shardId, UpdateRequest request, final GetResult get indexRequest.index(request.index()) .type(request.type()).id(request.id()).setRefreshPolicy(request.getRefreshPolicy()).routing(request.routing()) - .parent(request.parent()).timeout(request.timeout()).waitForActiveShards(request.waitForActiveShards()) + .timeout(request.timeout()).waitForActiveShards(request.waitForActiveShards()) // it has to be a "create!" .create(true); @@ -191,20 +190,6 @@ static String calculateRouting(GetResult getResult, @Nullable IndexRequest updat } } - /** - * Calculate a parent value to be used, either the included index request's parent, or retrieved document's parent when defined. - */ - @Nullable - static String calculateParent(GetResult getResult, @Nullable IndexRequest updateIndexRequest) { - if (updateIndexRequest != null && updateIndexRequest.parent() != null) { - return updateIndexRequest.parent(); - } else if (getResult.getFields().containsKey(ParentFieldMapper.NAME)) { - return getResult.field(ParentFieldMapper.NAME).getValue().toString(); - } else { - return null; - } - } - /** * Prepare the request for merging the existing document with a new one, can optionally detect a noop change. Returns a {@code Result} * containing a new {@code IndexRequest} to be executed on the primary and replicas. @@ -213,7 +198,6 @@ Result prepareUpdateIndexRequest(ShardId shardId, UpdateRequest request, GetResu final long updateVersion = calculateUpdateVersion(request, getResult); final IndexRequest currentRequest = request.doc(); final String routing = calculateRouting(getResult, currentRequest); - final String parent = calculateParent(getResult, currentRequest); final Tuple> sourceAndContent = XContentHelper.convertToMap(getResult.internalSourceRef(), true); final XContentType updateSourceContentType = sourceAndContent.v1(); final Map updatedSourceAsMap = sourceAndContent.v2(); @@ -230,7 +214,7 @@ Result prepareUpdateIndexRequest(ShardId shardId, UpdateRequest request, GetResu return new Result(update, DocWriteResponse.Result.NOOP, updatedSourceAsMap, updateSourceContentType); } else { final IndexRequest finalIndexRequest = Requests.indexRequest(request.index()) - .type(request.type()).id(request.id()).routing(routing).parent(parent) + .type(request.type()).id(request.id()).routing(routing) .source(updatedSourceAsMap, updateSourceContentType).version(updateVersion).versionType(request.versionType()) .waitForActiveShards(request.waitForActiveShards()).timeout(request.timeout()) .setRefreshPolicy(request.getRefreshPolicy()); @@ -247,7 +231,6 @@ Result prepareUpdateScriptRequest(ShardId shardId, UpdateRequest request, GetRes final long updateVersion = calculateUpdateVersion(request, getResult); final IndexRequest currentRequest = request.doc(); final String routing = calculateRouting(getResult, currentRequest); - final String parent = calculateParent(getResult, currentRequest); final Tuple> sourceAndContent = XContentHelper.convertToMap(getResult.internalSourceRef(), true); final XContentType updateSourceContentType = sourceAndContent.v1(); final Map sourceAsMap = sourceAndContent.v2(); @@ -259,7 +242,6 @@ Result prepareUpdateScriptRequest(ShardId shardId, UpdateRequest request, GetRes ctx.put(ContextFields.ID, getResult.getId()); ctx.put(ContextFields.VERSION, getResult.getVersion()); ctx.put(ContextFields.ROUTING, routing); - ctx.put(ContextFields.PARENT, parent); ctx.put(ContextFields.SOURCE, sourceAsMap); ctx.put(ContextFields.NOW, nowInMillis.getAsLong()); @@ -272,14 +254,14 @@ Result prepareUpdateScriptRequest(ShardId shardId, UpdateRequest request, GetRes switch (operation) { case INDEX: final IndexRequest indexRequest = Requests.indexRequest(request.index()) - .type(request.type()).id(request.id()).routing(routing).parent(parent) + .type(request.type()).id(request.id()).routing(routing) .source(updatedSourceAsMap, updateSourceContentType).version(updateVersion).versionType(request.versionType()) .waitForActiveShards(request.waitForActiveShards()).timeout(request.timeout()) .setRefreshPolicy(request.getRefreshPolicy()); return new Result(indexRequest, DocWriteResponse.Result.UPDATED, updatedSourceAsMap, updateSourceContentType); case DELETE: DeleteRequest deleteRequest = Requests.deleteRequest(request.index()) - .type(request.type()).id(request.id()).routing(routing).parent(parent) + .type(request.type()).id(request.id()).routing(routing) .version(updateVersion).versionType(request.versionType()).waitForActiveShards(request.waitForActiveShards()) .timeout(request.timeout()).setRefreshPolicy(request.getRefreshPolicy()); return new Result(deleteRequest, DocWriteResponse.Result.DELETED, updatedSourceAsMap, updateSourceContentType); @@ -452,6 +434,5 @@ public static class ContextFields { public static final String ID = "_id"; public static final String VERSION = "_version"; public static final String ROUTING = "_routing"; - public static final String PARENT = "_parent"; } } diff --git a/server/src/main/java/org/elasticsearch/action/update/UpdateRequest.java b/server/src/main/java/org/elasticsearch/action/update/UpdateRequest.java index 2dcd35dfb36b9..73c56ca22b2b5 100644 --- a/server/src/main/java/org/elasticsearch/action/update/UpdateRequest.java +++ b/server/src/main/java/org/elasticsearch/action/update/UpdateRequest.java @@ -20,6 +20,8 @@ package org.elasticsearch.action.update; import java.util.Arrays; + +import org.elasticsearch.Version; import org.elasticsearch.action.ActionRequestValidationException; import org.elasticsearch.action.DocWriteRequest; import org.elasticsearch.action.index.IndexRequest; @@ -61,9 +63,6 @@ public class UpdateRequest extends InstanceShardOperationRequest @Nullable private String routing; - @Nullable - private String parent; - @Nullable Script script; @@ -194,18 +193,6 @@ public String routing() { return this.routing; } - /** - * The parent id is used for the upsert request. - */ - public UpdateRequest parent(String parent) { - this.parent = parent; - return this; - } - - public String parent() { - return parent; - } - public ShardId getShardId() { return this.shardId; } @@ -790,7 +777,9 @@ public void readFrom(StreamInput in) throws IOException { type = in.readString(); id = in.readString(); routing = in.readOptionalString(); - parent = in.readOptionalString(); + if (in.getVersion().before(Version.V_7_0_0_alpha1)) { + in.readOptionalString(); // _parent + } if (in.readBoolean()) { script = new Script(in); } @@ -820,7 +809,10 @@ public void writeTo(StreamOutput out) throws IOException { out.writeString(type); out.writeString(id); out.writeOptionalString(routing); - out.writeOptionalString(parent); + if (out.getVersion().before(Version.V_7_0_0_alpha1)) { + out.writeOptionalString(null); // _parent + } + boolean hasScript = script != null; out.writeBoolean(hasScript); if (hasScript) { diff --git a/server/src/main/java/org/elasticsearch/action/update/UpdateRequestBuilder.java b/server/src/main/java/org/elasticsearch/action/update/UpdateRequestBuilder.java index 5ba187013e79f..8e753629d7300 100644 --- a/server/src/main/java/org/elasticsearch/action/update/UpdateRequestBuilder.java +++ b/server/src/main/java/org/elasticsearch/action/update/UpdateRequestBuilder.java @@ -74,11 +74,6 @@ public UpdateRequestBuilder setRouting(String routing) { return this; } - public UpdateRequestBuilder setParent(String parent) { - request.parent(parent); - return this; - } - /** * The script to execute. Note, make sure not to send different script each times and instead * use script params if possible with the same (automatically compiled) script. diff --git a/server/src/main/java/org/elasticsearch/cluster/metadata/MappingMetaData.java b/server/src/main/java/org/elasticsearch/cluster/metadata/MappingMetaData.java index c5e8ed729674d..2f4461066ec98 100644 --- a/server/src/main/java/org/elasticsearch/cluster/metadata/MappingMetaData.java +++ b/server/src/main/java/org/elasticsearch/cluster/metadata/MappingMetaData.java @@ -78,13 +78,11 @@ public int hashCode() { private final CompressedXContent source; private Routing routing; - private boolean hasParentField; public MappingMetaData(DocumentMapper docMapper) { this.type = docMapper.type(); this.source = docMapper.mappingSource(); this.routing = new Routing(docMapper.routingFieldMapper().required()); - this.hasParentField = docMapper.parentFieldMapper().active(); } public MappingMetaData(CompressedXContent mapping) throws IOException { @@ -128,11 +126,6 @@ private void initMappers(Map withoutType) { } else { this.routing = Routing.EMPTY; } - if (withoutType.containsKey("_parent")) { - this.hasParentField = true; - } else { - this.hasParentField = false; - } } void updateDefaultMapping(MappingMetaData defaultMapping) { @@ -149,10 +142,6 @@ public CompressedXContent source() { return this.source; } - public boolean hasParentField() { - return hasParentField; - } - /** * Converts the serialized compressed form of the mappings into a parsed map. */ @@ -189,7 +178,9 @@ public void writeTo(StreamOutput out) throws IOException { out.writeOptionalString("now"); // 5.x default out.writeOptionalBoolean(null); } - out.writeBoolean(hasParentField()); + if (out.getVersion().before(Version.V_7_0_0_alpha1)) { + out.writeBoolean(false); // hasParentField + } } @Override @@ -229,7 +220,9 @@ public MappingMetaData(StreamInput in) throws IOException { in.readOptionalString(); // defaultTimestamp in.readOptionalBoolean(); // ignoreMissing } - hasParentField = in.readBoolean(); + if (in.getVersion().before(Version.V_7_0_0_alpha1)) { + in.readBoolean(); // hasParentField + } } public static Diff readDiffFrom(StreamInput in) throws IOException { diff --git a/server/src/main/java/org/elasticsearch/cluster/metadata/MetaData.java b/server/src/main/java/org/elasticsearch/cluster/metadata/MetaData.java index a569bb9a36e29..b18c82712b37e 100644 --- a/server/src/main/java/org/elasticsearch/cluster/metadata/MetaData.java +++ b/server/src/main/java/org/elasticsearch/cluster/metadata/MetaData.java @@ -474,14 +474,14 @@ public String[] getConcreteAllClosedIndices() { */ // TODO: This can be moved to IndexNameExpressionResolver too, but this means that we will support wildcards and other expressions // in the index,bulk,update and delete apis. - public String resolveIndexRouting(@Nullable String parent, @Nullable String routing, String aliasOrIndex) { + public String resolveIndexRouting(@Nullable String routing, String aliasOrIndex) { if (aliasOrIndex == null) { - return routingOrParent(parent, routing); + return routing; } AliasOrIndex result = getAliasAndIndexLookup().get(aliasOrIndex); if (result == null || result.isAlias() == false) { - return routingOrParent(parent, routing); + return routing; } AliasOrIndex.Alias alias = (AliasOrIndex.Alias) result; if (result.getIndices().size() > 1) { @@ -500,7 +500,7 @@ public String resolveIndexRouting(@Nullable String parent, @Nullable String rout // Alias routing overrides the parent routing (if any). return aliasMd.indexRouting(); } - return routingOrParent(parent, routing); + return routing; } private void rejectSingleIndexOperation(String aliasOrIndex, AliasOrIndex result) { @@ -512,13 +512,6 @@ private void rejectSingleIndexOperation(String aliasOrIndex, AliasOrIndex result throw new IllegalArgumentException("Alias [" + aliasOrIndex + "] has more than one index associated with it [" + Arrays.toString(indexNames) + "], can't execute a single index op"); } - private String routingOrParent(@Nullable String parent, @Nullable String routing) { - if (routing == null) { - return parent; - } - return routing; - } - public boolean hasIndex(String index) { return indices.containsKey(index); } diff --git a/server/src/main/java/org/elasticsearch/cluster/metadata/MetaDataMappingService.java b/server/src/main/java/org/elasticsearch/cluster/metadata/MetaDataMappingService.java index 829504c154e41..fbeca652a97ff 100644 --- a/server/src/main/java/org/elasticsearch/cluster/metadata/MetaDataMappingService.java +++ b/server/src/main/java/org/elasticsearch/cluster/metadata/MetaDataMappingService.java @@ -265,24 +265,6 @@ private ClusterState applyRequest(ClusterState currentState, PutMappingClusterSt if (existingMapper != null) { // first, simulate: just call merge and ignore the result existingMapper.merge(newMapper.mapping()); - } else { - // TODO: can we find a better place for this validation? - // The reason this validation is here is that the mapper service doesn't learn about - // new types all at once , which can create a false error. - - // For example in MapperService we can't distinguish between a create index api call - // and a put mapping api call, so we don't which type did exist before. - // Also the order of the mappings may be backwards. - if (newMapper.parentFieldMapper().active()) { - for (ObjectCursor mapping : indexMetaData.getMappings().values()) { - String parentType = newMapper.parentFieldMapper().type(); - if (parentType.equals(mapping.value.type()) && - mapperService.getParentTypes().contains(parentType) == false) { - throw new IllegalArgumentException("can't add a _parent field that points to an " + - "already existing type, that isn't already a parent"); - } - } - } } } if (mappingType == null) { diff --git a/server/src/main/java/org/elasticsearch/common/settings/IndexScopedSettings.java b/server/src/main/java/org/elasticsearch/common/settings/IndexScopedSettings.java index d18858c2547ec..c916f33febb22 100644 --- a/server/src/main/java/org/elasticsearch/common/settings/IndexScopedSettings.java +++ b/server/src/main/java/org/elasticsearch/common/settings/IndexScopedSettings.java @@ -207,9 +207,6 @@ public boolean isPrivateSetting(String key) { case IndexMetaData.INDEX_SHRINK_SOURCE_NAME_KEY: case IndexMetaData.INDEX_RESIZE_SOURCE_UUID_KEY: case IndexMetaData.INDEX_RESIZE_SOURCE_NAME_KEY: - case IndexSettings.INDEX_MAPPING_SINGLE_TYPE_SETTING_KEY: - // this was settable in 5.x but not anymore in 6.x so we have to preserve the value ie. make it read-only - // this can be removed in later versions return true; default: return IndexMetaData.INDEX_ROUTING_INITIAL_RECOVERY_GROUP_SETTING.getRawKey().match(key); diff --git a/server/src/main/java/org/elasticsearch/index/IndexSettings.java b/server/src/main/java/org/elasticsearch/index/IndexSettings.java index 6c6f05623c355..e3c82b8abd39f 100644 --- a/server/src/main/java/org/elasticsearch/index/IndexSettings.java +++ b/server/src/main/java/org/elasticsearch/index/IndexSettings.java @@ -256,20 +256,6 @@ public final class IndexSettings { public static final Setting MAX_REGEX_LENGTH_SETTING = Setting.intSetting("index.max_regex_length", 1000, 1, Property.Dynamic, Property.IndexScope); - public static final String INDEX_MAPPING_SINGLE_TYPE_SETTING_KEY = "index.mapping.single_type"; - private static final Setting INDEX_MAPPING_SINGLE_TYPE_SETTING; // private - should not be registered - static { - Function defValue = settings -> { - boolean singleType = true; - if (settings.getAsVersion(IndexMetaData.SETTING_VERSION_CREATED, null) != null) { - singleType = Version.indexCreated(settings).onOrAfter(Version.V_6_0_0_alpha1); - } - return Boolean.valueOf(singleType).toString(); - }; - INDEX_MAPPING_SINGLE_TYPE_SETTING = Setting.boolSetting(INDEX_MAPPING_SINGLE_TYPE_SETTING_KEY, defValue, Property.IndexScope, - Property.Final); - } - private final Index index; private final Version version; private final Logger logger; @@ -325,11 +311,6 @@ public final class IndexSettings { */ private volatile int maxRegexLength; - /** - * Whether the index is required to have at most one type. - */ - private final boolean singleType; - /** * Returns the default search fields for this index. */ @@ -431,11 +412,6 @@ public IndexSettings(final IndexMetaData indexMetaData, final Settings nodeSetti this.mergePolicyConfig = new MergePolicyConfig(logger, this); this.indexSortConfig = new IndexSortConfig(this); searchIdleAfter = scopedSettings.get(INDEX_SEARCH_IDLE_AFTER); - singleType = INDEX_MAPPING_SINGLE_TYPE_SETTING.get(indexMetaData.getSettings()); // get this from metadata - it's not registered - if ((singleType || version.before(Version.V_6_0_0_alpha1)) == false) { - throw new AssertionError(index.toString() + "multiple types are only allowed on pre 6.x indices but version is: [" - + version + "]"); - } scopedSettings.addSettingsUpdateConsumer(MergePolicyConfig.INDEX_COMPOUND_FORMAT_SETTING, mergePolicyConfig::setNoCFSRatio); scopedSettings.addSettingsUpdateConsumer(MergePolicyConfig.INDEX_MERGE_POLICY_EXPUNGE_DELETES_ALLOWED_SETTING, mergePolicyConfig::setExpungeDeletesAllowed); @@ -570,11 +546,6 @@ public IndexMetaData getIndexMetaData() { */ public int getNumberOfReplicas() { return settings.getAsInt(IndexMetaData.SETTING_NUMBER_OF_REPLICAS, null); } - /** - * Returns whether the index enforces at most one type. - */ - public boolean isSingleType() { return singleType; } - /** * Returns the node settings. The settings returned from {@link #getSettings()} are a merged version of the * index settings and the node settings where node settings are overwritten by index settings. diff --git a/server/src/main/java/org/elasticsearch/index/engine/Engine.java b/server/src/main/java/org/elasticsearch/index/engine/Engine.java index 6cc8c4197dcd5..b6c71e06c93df 100644 --- a/server/src/main/java/org/elasticsearch/index/engine/Engine.java +++ b/server/src/main/java/org/elasticsearch/index/engine/Engine.java @@ -1099,10 +1099,6 @@ public String routing() { return this.doc.routing(); } - public String parent() { - return this.doc.parent(); - } - public List docs() { return this.doc.docs(); } diff --git a/server/src/main/java/org/elasticsearch/index/engine/InternalEngine.java b/server/src/main/java/org/elasticsearch/index/engine/InternalEngine.java index 2f6e3ab0343f4..702f247b41994 100644 --- a/server/src/main/java/org/elasticsearch/index/engine/InternalEngine.java +++ b/server/src/main/java/org/elasticsearch/index/engine/InternalEngine.java @@ -62,7 +62,6 @@ import org.elasticsearch.index.VersionType; import org.elasticsearch.index.mapper.IdFieldMapper; import org.elasticsearch.index.mapper.ParseContext; -import org.elasticsearch.index.mapper.UidFieldMapper; import org.elasticsearch.index.merge.MergeStats; import org.elasticsearch.index.merge.OnGoingMerge; import org.elasticsearch.index.seqno.LocalCheckpointTracker; @@ -122,8 +121,6 @@ public class InternalEngine extends Engine { private final LocalCheckpointTracker localCheckpointTracker; - private final String uidField; - private final CombinedDeletionPolicy combinedDeletionPolicy; // How many callers are currently requesting index throttling. Currently there are only two situations where we do this: when merges @@ -163,7 +160,6 @@ public InternalEngine(EngineConfig engineConfig) { if (engineConfig.isAutoGeneratedIDsOptimizationEnabled() == false) { maxUnsafeAutoIdTimestamp.set(Long.MAX_VALUE); } - this.uidField = engineConfig.getIndexSettings().isSingleType() ? IdFieldMapper.NAME : UidFieldMapper.NAME; final TranslogDeletionPolicy translogDeletionPolicy = new TranslogDeletionPolicy( engineConfig.getIndexSettings().getTranslogRetentionSize().getBytes(), engineConfig.getIndexSettings().getTranslogRetentionAge().getMillis() @@ -517,7 +513,7 @@ private ExternalSearcherManager createSearcherManager(SearchFactory externalSear @Override public GetResult get(Get get, BiFunction searcherFactory) throws EngineException { - assert Objects.equals(get.uid().field(), uidField) : get.uid().field(); + assert Objects.equals(get.uid().field(), IdFieldMapper.NAME) : get.uid().field(); try (ReleasableLock ignored = readLock.acquire()) { ensureOpen(); SearcherScope scope; @@ -723,7 +719,7 @@ protected long doGenerateSeqNoForOperation(final Operation operation) { @Override public IndexResult index(Index index) throws IOException { - assert Objects.equals(index.uid().field(), uidField) : index.uid().field(); + assert Objects.equals(index.uid().field(), IdFieldMapper.NAME) : index.uid().field(); final boolean doThrottle = index.origin().isRecovery() == false; try (ReleasableLock releasableLock = readLock.acquire()) { ensureOpen(); @@ -1072,7 +1068,7 @@ private void updateDocs(final Term uid, final List docs, @Override public DeleteResult delete(Delete delete) throws IOException { versionMap.enforceSafeAccess(); - assert Objects.equals(delete.uid().field(), uidField) : delete.uid().field(); + assert Objects.equals(delete.uid().field(), IdFieldMapper.NAME) : delete.uid().field(); assert assertVersionType(delete); assert assertIncomingSequenceNumber(delete.origin(), delete.seqNo()); final DeleteResult deleteResult; diff --git a/server/src/main/java/org/elasticsearch/index/engine/TranslogLeafReader.java b/server/src/main/java/org/elasticsearch/index/engine/TranslogLeafReader.java index 628bfd4826935..cbe1721f07f71 100644 --- a/server/src/main/java/org/elasticsearch/index/engine/TranslogLeafReader.java +++ b/server/src/main/java/org/elasticsearch/index/engine/TranslogLeafReader.java @@ -39,11 +39,9 @@ import org.elasticsearch.index.fielddata.AbstractSortedDocValues; import org.elasticsearch.index.fielddata.AbstractSortedSetDocValues; import org.elasticsearch.index.mapper.IdFieldMapper; -import org.elasticsearch.index.mapper.ParentFieldMapper; import org.elasticsearch.index.mapper.RoutingFieldMapper; import org.elasticsearch.index.mapper.SourceFieldMapper; import org.elasticsearch.index.mapper.Uid; -import org.elasticsearch.index.mapper.UidFieldMapper; import org.elasticsearch.index.translog.Translog; import java.io.IOException; @@ -65,9 +63,6 @@ final class TranslogLeafReader extends LeafReader { private static final FieldInfo FAKE_ID_FIELD = new FieldInfo(IdFieldMapper.NAME, 3, false, false, false, IndexOptions.NONE, DocValuesType.NONE, -1, Collections.emptyMap(), 0,0); - private static final FieldInfo FAKE_UID_FIELD - = new FieldInfo(UidFieldMapper.NAME, 4, false, false, false, IndexOptions.NONE, DocValuesType.NONE, -1, Collections.emptyMap(), - 0,0); private final Version indexVersionCreated; TranslogLeafReader(Translog.Index operation, Version indexVersionCreated) { @@ -96,49 +91,7 @@ public BinaryDocValues getBinaryDocValues(String field) { @Override public SortedDocValues getSortedDocValues(String field) { - // TODO this can be removed in 7.0 and upwards we don't support the parent field anymore - if (field.startsWith(ParentFieldMapper.NAME + "#") && operation.parent() != null) { - return new AbstractSortedDocValues() { - @Override - public int docID() { - return 0; - } - - private final BytesRef term = new BytesRef(operation.parent()); - private int ord; - @Override - public boolean advanceExact(int docID) { - if (docID != 0) { - throw new IndexOutOfBoundsException("do such doc ID: " + docID); - } - ord = 0; - return true; - } - - @Override - public int ordValue() { - return ord; - } - - @Override - public BytesRef lookupOrd(int ord) { - if (ord == 0) { - return term; - } - return null; - } - - @Override - public int getValueCount() { - return 1; - } - }; - } - if (operation.parent() == null) { - return null; - } - assert false : "unexpected field: " + field; - return null; + throw new UnsupportedOperationException(); } @Override @@ -220,9 +173,6 @@ public void document(int docID, StoredFieldVisitor visitor) throws IOException { } visitor.stringField(FAKE_ID_FIELD, id); } - if (visitor.needsField(FAKE_UID_FIELD) == StoredFieldVisitor.Status.YES) { - visitor.stringField(FAKE_UID_FIELD, Uid.createUid(operation.type(), operation.id()).getBytes(StandardCharsets.UTF_8)); - } } @Override diff --git a/server/src/main/java/org/elasticsearch/index/fielddata/UidIndexFieldData.java b/server/src/main/java/org/elasticsearch/index/fielddata/UidIndexFieldData.java deleted file mode 100644 index 33de5d6a7e111..0000000000000 --- a/server/src/main/java/org/elasticsearch/index/fielddata/UidIndexFieldData.java +++ /dev/null @@ -1,142 +0,0 @@ -/* - * Licensed to Elasticsearch under one or more contributor - * license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright - * ownership. Elasticsearch licenses this file to you under - * the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package org.elasticsearch.index.fielddata; - -import org.apache.lucene.index.LeafReaderContext; -import org.apache.lucene.search.SortField; -import org.apache.lucene.util.BytesRef; -import org.apache.lucene.util.BytesRefBuilder; -import org.elasticsearch.index.Index; -import org.elasticsearch.index.fielddata.IndexFieldData.XFieldComparatorSource.Nested; -import org.elasticsearch.index.fielddata.fieldcomparator.BytesRefFieldComparatorSource; -import org.elasticsearch.index.mapper.UidFieldMapper; -import org.elasticsearch.search.MultiValueMode; - -import java.io.IOException; - -/** Fielddata view of the _uid field on indices that do not index _uid but _id. - * It gets fielddata on the {@code _id field}, which is in-memory since the _id - * field does not have doc values, and prepends {@code ${type}#} to all values. - * Note that it does not add memory compared to what fielddata on the _id is - * already using: this is just a view. - * TODO: Remove fielddata access on _uid and _id, or add doc values to _id. - */ -public final class UidIndexFieldData implements IndexFieldData { - - private final Index index; - private final BytesRef prefix; - private final IndexFieldData idFieldData; - - public UidIndexFieldData(Index index, String type, IndexFieldData idFieldData) { - this.index = index; - BytesRefBuilder prefix = new BytesRefBuilder(); - prefix.append(new BytesRef(type)); - prefix.append((byte) '#'); - this.prefix = prefix.toBytesRef(); - this.idFieldData = idFieldData; - } - - @Override - public Index index() { - return index; - } - - @Override - public String getFieldName() { - return UidFieldMapper.NAME; - } - - @Override - public SortField sortField(Object missingValue, MultiValueMode sortMode, Nested nested, boolean reverse) { - XFieldComparatorSource source = new BytesRefFieldComparatorSource(this, missingValue, sortMode, nested); - return new SortField(getFieldName(), source, reverse); - } - - @Override - public AtomicFieldData load(LeafReaderContext context) { - return new UidAtomicFieldData(prefix, idFieldData.load(context)); - } - - @Override - public AtomicFieldData loadDirect(LeafReaderContext context) throws Exception { - return new UidAtomicFieldData(prefix, idFieldData.loadDirect(context)); - } - - @Override - public void clear() { - idFieldData.clear(); - } - - static final class UidAtomicFieldData implements AtomicFieldData { - - private final BytesRef prefix; - private final AtomicFieldData idFieldData; - - UidAtomicFieldData(BytesRef prefix, AtomicFieldData idFieldData) { - this.prefix = prefix; - this.idFieldData = idFieldData; - } - - @Override - public ScriptDocValues getScriptValues() { - return new ScriptDocValues.Strings(getBytesValues()); - } - - @Override - public long ramBytesUsed() { - return 0; // simple wrapper - } - - @Override - public void close() { - idFieldData.close(); - } - - @Override - public SortedBinaryDocValues getBytesValues() { - SortedBinaryDocValues idValues = idFieldData.getBytesValues(); - return new SortedBinaryDocValues() { - - private final BytesRefBuilder scratch = new BytesRefBuilder(); - - @Override - public boolean advanceExact(int doc) throws IOException { - return idValues.advanceExact(doc); - } - - @Override - public int docValueCount() { - return idValues.docValueCount(); - } - - @Override - public BytesRef nextValue() throws IOException { - BytesRef nextID = idValues.nextValue(); - scratch.copyBytes(prefix); - scratch.append(nextID); - return scratch.get(); - } - - }; - } - - } - -} diff --git a/server/src/main/java/org/elasticsearch/index/fielddata/plain/DocValuesIndexFieldData.java b/server/src/main/java/org/elasticsearch/index/fielddata/plain/DocValuesIndexFieldData.java index 2384e34732040..5732a872c8f58 100644 --- a/server/src/main/java/org/elasticsearch/index/fielddata/plain/DocValuesIndexFieldData.java +++ b/server/src/main/java/org/elasticsearch/index/fielddata/plain/DocValuesIndexFieldData.java @@ -30,7 +30,6 @@ import org.elasticsearch.index.mapper.IdFieldMapper; import org.elasticsearch.index.mapper.MappedFieldType; import org.elasticsearch.index.mapper.MapperService; -import org.elasticsearch.index.mapper.UidFieldMapper; import org.elasticsearch.indices.breaker.CircuitBreakerService; import java.util.Set; @@ -68,7 +67,7 @@ public final Index index() { } public static class Builder implements IndexFieldData.Builder { - private static final Set BINARY_INDEX_FIELD_NAMES = unmodifiableSet(newHashSet(UidFieldMapper.NAME, IdFieldMapper.NAME)); + private static final Set BINARY_INDEX_FIELD_NAMES = unmodifiableSet(newHashSet(IdFieldMapper.NAME)); private NumericType numericType; private Function> scriptFunction = AbstractAtomicOrdinalsFieldData.DEFAULT_SCRIPT_FUNCTION; diff --git a/server/src/main/java/org/elasticsearch/index/fieldvisitor/FieldsVisitor.java b/server/src/main/java/org/elasticsearch/index/fieldvisitor/FieldsVisitor.java index 13baf81f84c43..aecbba766f416 100644 --- a/server/src/main/java/org/elasticsearch/index/fieldvisitor/FieldsVisitor.java +++ b/server/src/main/java/org/elasticsearch/index/fieldvisitor/FieldsVisitor.java @@ -26,11 +26,9 @@ import org.elasticsearch.index.mapper.IdFieldMapper; import org.elasticsearch.index.mapper.MappedFieldType; import org.elasticsearch.index.mapper.MapperService; -import org.elasticsearch.index.mapper.ParentFieldMapper; import org.elasticsearch.index.mapper.RoutingFieldMapper; import org.elasticsearch.index.mapper.SourceFieldMapper; import org.elasticsearch.index.mapper.Uid; -import org.elasticsearch.index.mapper.UidFieldMapper; import java.io.IOException; import java.nio.charset.StandardCharsets; @@ -51,10 +49,8 @@ */ public class FieldsVisitor extends StoredFieldVisitor { private static final Set BASE_REQUIRED_FIELDS = unmodifiableSet(newHashSet( - UidFieldMapper.NAME, IdFieldMapper.NAME, - RoutingFieldMapper.NAME, - ParentFieldMapper.NAME)); + RoutingFieldMapper.NAME)); private final boolean loadSource; private final Set requiredFields; @@ -81,12 +77,10 @@ public Status needsField(FieldInfo fieldInfo) throws IOException { } public void postProcess(MapperService mapperService) { - if (mapperService.getIndexSettings().isSingleType()) { - final Collection types = mapperService.types(); - assert types.size() <= 1 : types; - if (types.isEmpty() == false) { - type = types.iterator().next(); - } + final Collection types = mapperService.types(); + assert types.size() <= 1 : types; + if (types.isEmpty() == false) { + type = types.iterator().next(); } for (Map.Entry> entry : fields().entrySet()) { MappedFieldType fieldType = mapperService.fullName(entry.getKey()); @@ -115,19 +109,7 @@ public void binaryField(FieldInfo fieldInfo, byte[] value) throws IOException { @Override public void stringField(FieldInfo fieldInfo, byte[] bytes) throws IOException { final String value = new String(bytes, StandardCharsets.UTF_8); - if (UidFieldMapper.NAME.equals(fieldInfo.name)) { - // 5.x-only - // TODO: Remove when we are on 7.x - Uid uid = Uid.createUid(value); - type = uid.type(); - id = uid.id(); - } else if (IdFieldMapper.NAME.equals(fieldInfo.name)) { - // only applies to 5.x indices that have single_type = true - // TODO: Remove when we are on 7.x - id = value; - } else { - addValue(fieldInfo.name, value); - } + addValue(fieldInfo.name, value); } @Override diff --git a/server/src/main/java/org/elasticsearch/index/fieldvisitor/SingleFieldsVisitor.java b/server/src/main/java/org/elasticsearch/index/fieldvisitor/SingleFieldsVisitor.java index 5d5040c637f04..6bcf2d9d99968 100644 --- a/server/src/main/java/org/elasticsearch/index/fieldvisitor/SingleFieldsVisitor.java +++ b/server/src/main/java/org/elasticsearch/index/fieldvisitor/SingleFieldsVisitor.java @@ -23,7 +23,6 @@ import org.elasticsearch.index.mapper.MapperService; import org.elasticsearch.index.mapper.TypeFieldMapper; import org.elasticsearch.index.mapper.Uid; -import org.elasticsearch.index.mapper.UidFieldMapper; import java.io.IOException; @@ -41,11 +40,6 @@ public Status needsField(FieldInfo fieldInfo) throws IOException { if (fieldInfo.name.equals(field)) { return Status.YES; } - if (fieldInfo.name.equals(UidFieldMapper.NAME)) { - if (TypeFieldMapper.NAME.equals(field) || IdFieldMapper.NAME.equals(field)) { - return Status.YES; - } - } return Status.NO; } @@ -63,8 +57,5 @@ public void postProcess(MapperService mapperService) { if (type != null) { addValue(TypeFieldMapper.NAME, type); } - if (type != null && id != null) { - addValue(UidFieldMapper.NAME, Uid.createUid(type, id)); - } } } diff --git a/server/src/main/java/org/elasticsearch/index/get/ShardGetService.java b/server/src/main/java/org/elasticsearch/index/get/ShardGetService.java index a6c8dbf53b395..50f73944d8700 100644 --- a/server/src/main/java/org/elasticsearch/index/get/ShardGetService.java +++ b/server/src/main/java/org/elasticsearch/index/get/ShardGetService.java @@ -41,13 +41,11 @@ import org.elasticsearch.index.mapper.DocumentMapper; import org.elasticsearch.index.mapper.FieldMapper; import org.elasticsearch.index.mapper.MapperService; -import org.elasticsearch.index.mapper.ParentFieldMapper; import org.elasticsearch.index.mapper.RoutingFieldMapper; import org.elasticsearch.index.mapper.SourceFieldMapper; import org.elasticsearch.index.shard.AbstractIndexShardComponent; import org.elasticsearch.index.shard.IndexShard; import org.elasticsearch.search.fetch.subphase.FetchSourceContext; -import org.elasticsearch.search.fetch.subphase.ParentFieldSubFetchPhase; import java.io.IOException; import java.util.Collection; @@ -98,7 +96,7 @@ private GetResult get(String type, String id, String[] gFields, boolean realtime } public GetResult getForUpdate(String type, String id, long version, VersionType versionType) { - return get(type, id, new String[]{RoutingFieldMapper.NAME, ParentFieldMapper.NAME}, true, version, versionType, + return get(type, id, new String[]{RoutingFieldMapper.NAME}, true, version, versionType, FetchSourceContext.FETCH_SOURCE, true); } @@ -208,13 +206,6 @@ private GetResult innerGetLoadFromStoredFields(String type, String id, String[] } DocumentMapper docMapper = mapperService.documentMapper(type); - if (docMapper.parentFieldMapper().active()) { - String parentId = ParentFieldSubFetchPhase.getParentId(docMapper.parentFieldMapper(), docIdAndVersion.reader, docIdAndVersion.docId); - if (fields == null) { - fields = new HashMap<>(1); - } - fields.put(ParentFieldMapper.NAME, new DocumentField(ParentFieldMapper.NAME, Collections.singletonList(parentId))); - } if (gFields != null && gFields.length > 0) { for (String field : gFields) { diff --git a/server/src/main/java/org/elasticsearch/index/mapper/BooleanFieldMapper.java b/server/src/main/java/org/elasticsearch/index/mapper/BooleanFieldMapper.java index 45cd9e17ad119..52b9a0d46e55d 100644 --- a/server/src/main/java/org/elasticsearch/index/mapper/BooleanFieldMapper.java +++ b/server/src/main/java/org/elasticsearch/index/mapper/BooleanFieldMapper.java @@ -29,7 +29,6 @@ import org.apache.lucene.search.TermQuery; import org.apache.lucene.search.TermRangeQuery; import org.apache.lucene.util.BytesRef; -import org.elasticsearch.Version; import org.elasticsearch.common.Nullable; import org.elasticsearch.common.logging.DeprecationLogger; import org.elasticsearch.common.logging.Loggers; @@ -37,6 +36,7 @@ import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.xcontent.XContentBuilder; import org.elasticsearch.common.xcontent.XContentParser; +import org.elasticsearch.common.xcontent.support.XContentMapValues; import org.elasticsearch.index.fielddata.IndexFieldData; import org.elasticsearch.index.fielddata.IndexNumericFieldData.NumericType; import org.elasticsearch.index.fielddata.plain.DocValuesIndexFieldData; @@ -113,7 +113,7 @@ public Mapper.Builder parse(String name, Map node, ParserContext if (propNode == null) { throw new MapperParsingException("Property [null_value] cannot be null."); } - builder.nullValue(TypeParsers.nodeBooleanValue(name, "null_value", propNode, parserContext)); + builder.nullValue(XContentMapValues.nodeBooleanValue(propNode, name + ".null_value")); iterator.remove(); } } @@ -245,15 +245,7 @@ protected void parseCreateField(ParseContext context, List field value = fieldType().nullValue(); } } else { - if (indexCreatedVersion.onOrAfter(Version.V_6_0_0_alpha1)) { - value = context.parser().booleanValue(); - } else { - value = context.parser().booleanValueLenient(); - if (context.parser().isBooleanValueLenient() != context.parser().isBooleanValue()) { - String rawValue = context.parser().text(); - deprecationLogger.deprecated("Expected a boolean for property [{}] but got [{}]", fieldType().name(), rawValue); - } - } + value = context.parser().booleanValue(); } } diff --git a/server/src/main/java/org/elasticsearch/index/mapper/DateFieldMapper.java b/server/src/main/java/org/elasticsearch/index/mapper/DateFieldMapper.java index 13bbcd22932d1..7f1f0b9568209 100644 --- a/server/src/main/java/org/elasticsearch/index/mapper/DateFieldMapper.java +++ b/server/src/main/java/org/elasticsearch/index/mapper/DateFieldMapper.java @@ -42,6 +42,7 @@ import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.util.LocaleUtils; import org.elasticsearch.common.xcontent.XContentBuilder; +import org.elasticsearch.common.xcontent.support.XContentMapValues; import org.elasticsearch.index.fielddata.IndexFieldData; import org.elasticsearch.index.fielddata.IndexNumericFieldData.NumericType; import org.elasticsearch.index.fielddata.plain.DocValuesIndexFieldData; @@ -155,7 +156,7 @@ public Mapper.Builder parse(String name, Map node, ParserCo builder.nullValue(propNode.toString()); iterator.remove(); } else if (propName.equals("ignore_malformed")) { - builder.ignoreMalformed(TypeParsers.nodeBooleanValue(name, "ignore_malformed", propNode, parserContext)); + builder.ignoreMalformed(XContentMapValues.nodeBooleanValue(propNode, name + ".ignore_malformed")); iterator.remove(); } else if (propName.equals("locale")) { builder.locale(LocaleUtils.parse(propNode.toString())); diff --git a/server/src/main/java/org/elasticsearch/index/mapper/DocumentMapper.java b/server/src/main/java/org/elasticsearch/index/mapper/DocumentMapper.java index 42f842e612803..b0d9b1e5e34ba 100644 --- a/server/src/main/java/org/elasticsearch/index/mapper/DocumentMapper.java +++ b/server/src/main/java/org/elasticsearch/index/mapper/DocumentMapper.java @@ -131,11 +131,6 @@ public DocumentMapper(MapperService mapperService, Mapping mapping) { this.mapping = mapping; this.documentParser = new DocumentParser(indexSettings, mapperService.documentMapperParser(), this); - if (metadataMapper(ParentFieldMapper.class).active()) { - // mark the routing field mapper as required - metadataMapper(RoutingFieldMapper.class).markAsRequired(); - } - // collect all the mappers for this type List newObjectMappers = new ArrayList<>(); List newFieldMappers = new ArrayList<>(); @@ -200,10 +195,6 @@ public RootObjectMapper root() { return mapping.root; } - public UidFieldMapper uidMapper() { - return metadataMapper(UidFieldMapper.class); - } - @SuppressWarnings({"unchecked"}) public T metadataMapper(Class type) { return mapping.metadataMapper(type); @@ -229,10 +220,6 @@ public RoutingFieldMapper routingFieldMapper() { return metadataMapper(RoutingFieldMapper.class); } - public ParentFieldMapper parentFieldMapper() { - return metadataMapper(ParentFieldMapper.class); - } - public IndexFieldMapper IndexFieldMapper() { return metadataMapper(IndexFieldMapper.class); } @@ -292,10 +279,6 @@ public ObjectMapper findNestedObjectMapper(int nestedDocId, SearchContext sc, Le return nestedObjectMapper; } - public boolean isParent(String type) { - return mapperService.getParentTypes().contains(type); - } - public DocumentMapper merge(Mapping mapping) { Mapping merged = this.mapping.merge(mapping); return new DocumentMapper(mapperService, merged); diff --git a/server/src/main/java/org/elasticsearch/index/mapper/DocumentParser.java b/server/src/main/java/org/elasticsearch/index/mapper/DocumentParser.java index c2e0028544f88..a667af21700c9 100644 --- a/server/src/main/java/org/elasticsearch/index/mapper/DocumentParser.java +++ b/server/src/main/java/org/elasticsearch/index/mapper/DocumentParser.java @@ -159,7 +159,7 @@ private static ParsedDocument parsedDocument(SourceToParse source, ParseContext. context.sourceToParse().source(), context.sourceToParse().getXContentType(), update - ).parent(source.parent()); + ); } @@ -423,7 +423,7 @@ private static void nested(ParseContext context, ObjectMapper.Nested nested) { private static void addFields(ParseContext.Document nestedDoc, ParseContext.Document rootDoc) { for (IndexableField field : nestedDoc.getFields()) { - if (!field.name().equals(UidFieldMapper.NAME) && !field.name().equals(TypeFieldMapper.NAME)) { + if (!field.name().equals(TypeFieldMapper.NAME)) { rootDoc.add(field); } } @@ -440,30 +440,19 @@ private static ParseContext nestedContext(ParseContext context, ObjectMapper map // documents inside the Lucene index (document blocks) will be incorrect, as nested documents of different root // documents are then aligned with other root documents. This will lead tothe nested query, sorting, aggregations // and inner hits to fail or yield incorrect results. - if (context.mapperService().getIndexSettings().isSingleType()) { - IndexableField idField = parentDoc.getField(IdFieldMapper.NAME); - if (idField != null) { - // We just need to store the id as indexed field, so that IndexWriter#deleteDocuments(term) can then - // delete it when the root document is deleted too. - if (idField.stringValue() != null) { - // backward compat with 5.x - // TODO: Remove on 7.0 - nestedDoc.add(new Field(IdFieldMapper.NAME, idField.stringValue(), IdFieldMapper.Defaults.NESTED_FIELD_TYPE)); - } else { - nestedDoc.add(new Field(IdFieldMapper.NAME, idField.binaryValue(), IdFieldMapper.Defaults.NESTED_FIELD_TYPE)); - } + IndexableField idField = parentDoc.getField(IdFieldMapper.NAME); + if (idField != null) { + // We just need to store the id as indexed field, so that IndexWriter#deleteDocuments(term) can then + // delete it when the root document is deleted too. + if (idField.stringValue() != null) { + // backward compat with 5.x + // TODO: Remove on 7.0 + nestedDoc.add(new Field(IdFieldMapper.NAME, idField.stringValue(), IdFieldMapper.Defaults.NESTED_FIELD_TYPE)); } else { - throw new IllegalStateException("The root document of a nested document should have an id field"); + nestedDoc.add(new Field(IdFieldMapper.NAME, idField.binaryValue(), IdFieldMapper.Defaults.NESTED_FIELD_TYPE)); } } else { - IndexableField uidField = parentDoc.getField(UidFieldMapper.NAME); - if (uidField != null) { - /// We just need to store the uid as indexed field, so that IndexWriter#deleteDocuments(term) can then - // delete it when the root document is deleted too. - nestedDoc.add(new Field(UidFieldMapper.NAME, uidField.stringValue(), UidFieldMapper.Defaults.NESTED_FIELD_TYPE)); - } else { - throw new IllegalStateException("The root document of a nested document should have an uid field"); - } + throw new IllegalStateException("The root document of a nested document should have an _id field"); } // the type of the nested doc starts with __, so we can identify that its a nested one in filters diff --git a/server/src/main/java/org/elasticsearch/index/mapper/FieldNamesFieldMapper.java b/server/src/main/java/org/elasticsearch/index/mapper/FieldNamesFieldMapper.java index ada640f873975..95971c9385f46 100644 --- a/server/src/main/java/org/elasticsearch/index/mapper/FieldNamesFieldMapper.java +++ b/server/src/main/java/org/elasticsearch/index/mapper/FieldNamesFieldMapper.java @@ -30,6 +30,7 @@ import org.elasticsearch.common.lucene.Lucene; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.xcontent.XContentBuilder; +import org.elasticsearch.common.xcontent.support.XContentMapValues; import org.elasticsearch.index.query.QueryShardContext; import java.io.IOException; @@ -112,7 +113,7 @@ public MetadataFieldMapper.Builder parse(String name, Map n String fieldName = entry.getKey(); Object fieldNode = entry.getValue(); if (fieldName.equals("enabled")) { - builder.enabled(TypeParsers.nodeBooleanValue(name, "enabled", fieldNode, parserContext)); + builder.enabled(XContentMapValues.nodeBooleanValue(fieldNode, name + ".enabled")); iterator.remove(); } } diff --git a/server/src/main/java/org/elasticsearch/index/mapper/GeoPointFieldMapper.java b/server/src/main/java/org/elasticsearch/index/mapper/GeoPointFieldMapper.java index bc9f8b660be01..10c0db01dc776 100644 --- a/server/src/main/java/org/elasticsearch/index/mapper/GeoPointFieldMapper.java +++ b/server/src/main/java/org/elasticsearch/index/mapper/GeoPointFieldMapper.java @@ -35,6 +35,7 @@ import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.xcontent.XContentBuilder; import org.elasticsearch.common.xcontent.XContentParser; +import org.elasticsearch.common.xcontent.support.XContentMapValues; import org.elasticsearch.index.fielddata.IndexFieldData; import org.elasticsearch.index.fielddata.plain.AbstractLatLonPointDVIndexFieldData; import org.elasticsearch.index.query.QueryShardContext; @@ -140,11 +141,11 @@ public Mapper.Builder parse(String name, Map node, ParserContext Object propNode = entry.getValue(); if (propName.equals(Names.IGNORE_MALFORMED)) { - builder.ignoreMalformed(TypeParsers.nodeBooleanValue(name, Names.IGNORE_MALFORMED, propNode, parserContext)); + builder.ignoreMalformed(XContentMapValues.nodeBooleanValue(propNode, name + "." + Names.IGNORE_MALFORMED)); iterator.remove(); } else if (propName.equals(Names.IGNORE_Z_VALUE.getPreferredName())) { - builder.ignoreZValue(TypeParsers.nodeBooleanValue(propName, Names.IGNORE_Z_VALUE.getPreferredName(), - propNode, parserContext)); + builder.ignoreZValue(XContentMapValues.nodeBooleanValue(propNode, + name + "." + Names.IGNORE_Z_VALUE.getPreferredName())); iterator.remove(); } } diff --git a/server/src/main/java/org/elasticsearch/index/mapper/GeoShapeFieldMapper.java b/server/src/main/java/org/elasticsearch/index/mapper/GeoShapeFieldMapper.java index b80831298cb87..753d91f7be231 100644 --- a/server/src/main/java/org/elasticsearch/index/mapper/GeoShapeFieldMapper.java +++ b/server/src/main/java/org/elasticsearch/index/mapper/GeoShapeFieldMapper.java @@ -30,7 +30,6 @@ import org.apache.lucene.spatial.prefix.tree.PackedQuadPrefixTree; import org.apache.lucene.spatial.prefix.tree.QuadPrefixTree; import org.apache.lucene.spatial.prefix.tree.SpatialPrefixTree; -import org.elasticsearch.ElasticsearchException; import org.elasticsearch.Version; import org.elasticsearch.common.Explicit; import org.elasticsearch.common.geo.GeoUtils; @@ -42,6 +41,7 @@ import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.unit.DistanceUnit; import org.elasticsearch.common.xcontent.XContentBuilder; +import org.elasticsearch.common.xcontent.support.XContentMapValues; import org.elasticsearch.index.query.QueryShardContext; import org.elasticsearch.index.query.QueryShardException; import org.locationtech.spatial4j.shape.Point; @@ -222,18 +222,17 @@ public Mapper.Builder parse(String name, Map node, ParserContext builder.fieldType().setStrategyName(fieldNode.toString()); iterator.remove(); } else if (IGNORE_MALFORMED.equals(fieldName)) { - builder.ignoreMalformed(TypeParsers.nodeBooleanValue(fieldName, "ignore_malformed", fieldNode, parserContext)); + builder.ignoreMalformed(XContentMapValues.nodeBooleanValue(fieldNode, name + ".ignore_malformed")); iterator.remove(); } else if (Names.COERCE.equals(fieldName)) { - builder.coerce(TypeParsers.nodeBooleanValue(fieldName, Names.COERCE, fieldNode, parserContext)); + builder.coerce(XContentMapValues.nodeBooleanValue(fieldNode, name + "." + Names.COERCE)); iterator.remove(); } else if (GeoPointFieldMapper.Names.IGNORE_Z_VALUE.getPreferredName().equals(fieldName)) { - builder.ignoreZValue(TypeParsers.nodeBooleanValue(fieldName, GeoPointFieldMapper.Names.IGNORE_Z_VALUE.getPreferredName(), - fieldNode, parserContext)); + builder.ignoreZValue(XContentMapValues.nodeBooleanValue(fieldNode, name + "." + GeoPointFieldMapper.Names.IGNORE_Z_VALUE.getPreferredName())); iterator.remove(); } else if (Names.STRATEGY_POINTS_ONLY.equals(fieldName) && builder.fieldType().strategyName.equals(SpatialStrategy.TERM.getStrategyName()) == false) { - boolean pointsOnly = TypeParsers.nodeBooleanValue(fieldName, Names.STRATEGY_POINTS_ONLY, fieldNode, parserContext); + boolean pointsOnly = XContentMapValues.nodeBooleanValue(fieldNode, name + "." + Names.STRATEGY_POINTS_ONLY); builder.fieldType().setPointsOnly(pointsOnly); iterator.remove(); } diff --git a/server/src/main/java/org/elasticsearch/index/mapper/IdFieldMapper.java b/server/src/main/java/org/elasticsearch/index/mapper/IdFieldMapper.java index f18f304d3b40a..9d9c2b5cd63be 100644 --- a/server/src/main/java/org/elasticsearch/index/mapper/IdFieldMapper.java +++ b/server/src/main/java/org/elasticsearch/index/mapper/IdFieldMapper.java @@ -134,28 +134,16 @@ public Query existsQuery(QueryShardContext context) { @Override public Query termsQuery(List values, QueryShardContext context) { - if (indexOptions() != IndexOptions.NONE) { - failIfNotIndexed(); - BytesRef[] bytesRefs = new BytesRef[values.size()]; - final boolean is5xIndex = context.indexVersionCreated().before(Version.V_6_0_0_beta1); - for (int i = 0; i < bytesRefs.length; i++) { - BytesRef id; - if (is5xIndex) { - // 5.x index with index.mapping.single_type = true - id = BytesRefs.toBytesRef(values.get(i)); - } else { - Object idObject = values.get(i); - if (idObject instanceof BytesRef) { - idObject = ((BytesRef) idObject).utf8ToString(); - } - id = Uid.encodeId(idObject.toString()); - } - bytesRefs[i] = id; + failIfNotIndexed(); + BytesRef[] bytesRefs = new BytesRef[values.size()]; + for (int i = 0; i < bytesRefs.length; i++) { + Object idObject = values.get(i); + if (idObject instanceof BytesRef) { + idObject = ((BytesRef) idObject).utf8ToString(); } - return new TermInSetQuery(name(), bytesRefs); + bytesRefs[i] = Uid.encodeId(idObject.toString()); } - // 5.x index, _uid is indexed - return new TermInSetQuery(UidFieldMapper.NAME, Uid.createUidsForTypesAndIds(context.queryTypes(), values)); + return new TermInSetQuery(name(), bytesRefs); } @Override @@ -172,10 +160,6 @@ public IndexFieldData.Builder fielddataBuilder(String fullyQualifiedIndexName) { public IndexFieldData build(IndexSettings indexSettings, MappedFieldType fieldType, IndexFieldDataCache cache, CircuitBreakerService breakerService, MapperService mapperService) { final IndexFieldData fieldData = fieldDataBuilder.build(indexSettings, fieldType, cache, breakerService, mapperService); - if (indexSettings.getIndexVersionCreated().before(Version.V_6_0_0_beta1)) { - // ids were indexed as utf-8 - return fieldData; - } return new IndexFieldData() { @Override @@ -265,13 +249,8 @@ public boolean advanceExact(int doc) throws IOException { static MappedFieldType defaultFieldType(IndexSettings indexSettings) { MappedFieldType defaultFieldType = Defaults.FIELD_TYPE.clone(); - if (indexSettings.isSingleType()) { - defaultFieldType.setIndexOptions(IndexOptions.DOCS); - defaultFieldType.setStored(true); - } else { - defaultFieldType.setIndexOptions(IndexOptions.NONE); - defaultFieldType.setStored(false); - } + defaultFieldType.setIndexOptions(IndexOptions.DOCS); + defaultFieldType.setStored(true); return defaultFieldType; } @@ -294,12 +273,8 @@ public void postParse(ParseContext context) throws IOException {} @Override protected void parseCreateField(ParseContext context, List fields) throws IOException { if (fieldType.indexOptions() != IndexOptions.NONE || fieldType.stored()) { - if (context.mapperService().getIndexSettings().getIndexVersionCreated().onOrAfter(Version.V_6_0_0_beta1)) { - BytesRef id = Uid.encodeId(context.sourceToParse().id()); - fields.add(new Field(NAME, id, fieldType)); - } else { - fields.add(new Field(NAME, context.sourceToParse().id(), fieldType)); - } + BytesRef id = Uid.encodeId(context.sourceToParse().id()); + fields.add(new Field(NAME, id, fieldType)); } } diff --git a/server/src/main/java/org/elasticsearch/index/mapper/IpFieldMapper.java b/server/src/main/java/org/elasticsearch/index/mapper/IpFieldMapper.java index c10c2339b895e..fd5dc080011e6 100644 --- a/server/src/main/java/org/elasticsearch/index/mapper/IpFieldMapper.java +++ b/server/src/main/java/org/elasticsearch/index/mapper/IpFieldMapper.java @@ -38,6 +38,7 @@ import org.elasticsearch.common.network.InetAddresses; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.xcontent.XContentBuilder; +import org.elasticsearch.common.xcontent.support.XContentMapValues; import org.elasticsearch.index.fielddata.IndexFieldData; import org.elasticsearch.index.fielddata.ScriptDocValues; import org.elasticsearch.index.fielddata.plain.DocValuesIndexFieldData; @@ -113,7 +114,7 @@ public Mapper.Builder parse(String name, Map node, ParserCo builder.nullValue(InetAddresses.forString(propNode.toString())); iterator.remove(); } else if (propName.equals("ignore_malformed")) { - builder.ignoreMalformed(TypeParsers.nodeBooleanValue(name, "ignore_malformed", propNode, parserContext)); + builder.ignoreMalformed(XContentMapValues.nodeBooleanValue(propNode, name + ".ignore_malformed")); iterator.remove(); } else if (TypeParsers.parseMultiField(builder, name, parserContext, propName, propNode)) { iterator.remove(); diff --git a/server/src/main/java/org/elasticsearch/index/mapper/MapperService.java b/server/src/main/java/org/elasticsearch/index/mapper/MapperService.java index e13c23754ab38..2f027c0fbb998 100644 --- a/server/src/main/java/org/elasticsearch/index/mapper/MapperService.java +++ b/server/src/main/java/org/elasticsearch/index/mapper/MapperService.java @@ -111,7 +111,7 @@ public enum MergeReason { //TODO this needs to be cleaned up: _timestamp and _ttl are not supported anymore, _field_names, _seq_no, _version and _source are //also missing, not sure if on purpose. See IndicesModule#getMetadataMappers private static ObjectHashSet META_FIELDS = ObjectHashSet.from( - "_uid", "_id", "_type", "_parent", "_routing", "_index", + "_id", "_type", "_routing", "_index", "_size", "_timestamp", "_ttl" ); @@ -135,8 +135,6 @@ public enum MergeReason { private volatile Map unmappedFieldTypes = emptyMap(); - private volatile Set parentTypes = emptySet(); - final MapperRegistry mapperRegistry; public MapperService(IndexSettings indexSettings, IndexAnalyzers indexAnalyzers, NamedXContentRegistry xContentRegistry, @@ -367,7 +365,6 @@ private synchronized Map internalMerge(@Nullable Documen boolean hasNested = this.hasNested; Map fullPathObjectMappers = this.fullPathObjectMappers; FieldTypeLookup fieldTypes = this.fieldTypes; - Set parentTypes = this.parentTypes; Map mappers = new HashMap<>(this.mappers); Map results = new LinkedHashMap<>(documentMappers.size() + 1); @@ -385,7 +382,7 @@ private synchronized Map internalMerge(@Nullable Documen results.put(DEFAULT_MAPPING, defaultMapper); } - if (indexSettings.isSingleType()) { + { Set actualTypes = new HashSet<>(mappers.keySet()); documentMappers.forEach(mapper -> actualTypes.add(mapper.type())); actualTypes.remove(DEFAULT_MAPPING); @@ -398,9 +395,6 @@ private synchronized Map internalMerge(@Nullable Documen for (DocumentMapper mapper : documentMappers) { // check naming validateTypeName(mapper.type()); - if (mapper.type().equals(mapper.parentFieldMapper().type())) { - throw new IllegalArgumentException("The [_parent.type] option can't point to the same type"); - } // compute the merged DocumentMapper DocumentMapper oldMapper = mappers.get(mapper.type()); @@ -436,9 +430,7 @@ private synchronized Map internalMerge(@Nullable Documen } } - if (indexSettings.getIndexVersionCreated().onOrAfter(Version.V_6_0_0_beta1)) { - validateCopyTo(fieldMappers, fullPathObjectMappers, fieldTypes); - } + validateCopyTo(fieldMappers, fullPathObjectMappers, fieldTypes); if (reason == MergeReason.MAPPING_UPDATE) { // this check will only be performed on the master node when there is @@ -449,14 +441,6 @@ private synchronized Map internalMerge(@Nullable Documen checkTotalFieldsLimit(objectMappers.size() + fieldMappers.size()); } - if (oldMapper == null && newMapper.parentFieldMapper().active()) { - if (parentTypes == this.parentTypes) { - // first time through the loop - parentTypes = new HashSet<>(this.parentTypes); - } - parentTypes.add(mapper.parentFieldMapper().type()); - } - results.put(newMapper.type(), newMapper); mappers.put(newMapper.type(), newMapper); } @@ -497,9 +481,6 @@ private synchronized Map internalMerge(@Nullable Documen if (fullPathObjectMappers != this.fullPathObjectMappers) { fullPathObjectMappers = Collections.unmodifiableMap(fullPathObjectMappers); } - if (parentTypes != this.parentTypes) { - parentTypes = Collections.unmodifiableSet(parentTypes); - } // commit the change if (defaultMappingSource != null) { @@ -509,7 +490,6 @@ private synchronized Map internalMerge(@Nullable Documen this.fieldTypes = fieldTypes; this.hasNested = hasNested; this.fullPathObjectMappers = fullPathObjectMappers; - this.parentTypes = parentTypes; assert assertMappersShareSameFieldType(); assert results.values().stream().allMatch(this::assertSerialization); @@ -635,11 +615,6 @@ private void checkDepthLimit(String objectPath, long maxDepth) { private void checkPartitionedIndexConstraints(DocumentMapper newMapper) { if (indexSettings.getIndexMetaData().isRoutingPartitionedIndex()) { - if (newMapper.parentFieldMapper().active()) { - throw new IllegalArgumentException("mapping type name [" + newMapper.type() + "] cannot have a " - + "_parent field for the partitioned index [" + indexSettings.getIndex().getName() + "]"); - } - if (!newMapper.routingFieldMapper().required()) { throw new IllegalArgumentException("mapping type [" + newMapper.type() + "] must have routing " + "required for partitioned index [" + indexSettings.getIndex().getName() + "]"); @@ -818,10 +793,6 @@ public Analyzer searchQuoteAnalyzer() { return this.searchQuoteAnalyzer; } - public Set getParentTypes() { - return parentTypes; - } - @Override public void close() throws IOException { indexAnalyzers.close(); @@ -868,13 +839,6 @@ public Term createUidTerm(String type, String id) { if (hasMapping(type) == false) { return null; } - if (indexSettings.getIndexVersionCreated().onOrAfter(Version.V_6_0_0_beta1)) { - assert indexSettings.isSingleType(); - return new Term(IdFieldMapper.NAME, Uid.encodeId(id)); - } else if (indexSettings.isSingleType()) { - return new Term(IdFieldMapper.NAME, id); - } else { - return new Term(UidFieldMapper.NAME, Uid.createUidAsBytes(type, id)); - } + return new Term(IdFieldMapper.NAME, Uid.encodeId(id)); } } diff --git a/server/src/main/java/org/elasticsearch/index/mapper/NumberFieldMapper.java b/server/src/main/java/org/elasticsearch/index/mapper/NumberFieldMapper.java index 92cb44cfd147f..69793ca89b57d 100644 --- a/server/src/main/java/org/elasticsearch/index/mapper/NumberFieldMapper.java +++ b/server/src/main/java/org/elasticsearch/index/mapper/NumberFieldMapper.java @@ -47,6 +47,7 @@ import org.elasticsearch.common.xcontent.XContentBuilder; import org.elasticsearch.common.xcontent.XContentParser; import org.elasticsearch.common.xcontent.XContentParser.Token; +import org.elasticsearch.common.xcontent.support.XContentMapValues; import org.elasticsearch.index.fielddata.IndexFieldData; import org.elasticsearch.index.fielddata.IndexNumericFieldData.NumericType; import org.elasticsearch.index.fielddata.plain.DocValuesIndexFieldData; @@ -156,10 +157,10 @@ public Mapper.Builder parse(String name, Map node, builder.nullValue(type.parse(propNode, false)); iterator.remove(); } else if (propName.equals("ignore_malformed")) { - builder.ignoreMalformed(TypeParsers.nodeBooleanValue(name,"ignore_malformed", propNode, parserContext)); + builder.ignoreMalformed(XContentMapValues.nodeBooleanValue(propNode, name + ".ignore_malformed")); iterator.remove(); } else if (propName.equals("coerce")) { - builder.coerce(TypeParsers.nodeBooleanValue(name, "coerce", propNode, parserContext)); + builder.coerce(XContentMapValues.nodeBooleanValue(propNode, name + ".coerce")); iterator.remove(); } } diff --git a/server/src/main/java/org/elasticsearch/index/mapper/ObjectMapper.java b/server/src/main/java/org/elasticsearch/index/mapper/ObjectMapper.java index c96d8bb384bb6..c3e3e41798d91 100644 --- a/server/src/main/java/org/elasticsearch/index/mapper/ObjectMapper.java +++ b/server/src/main/java/org/elasticsearch/index/mapper/ObjectMapper.java @@ -31,6 +31,7 @@ import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.xcontent.ToXContent; import org.elasticsearch.common.xcontent.XContentBuilder; +import org.elasticsearch.common.xcontent.support.XContentMapValues; import java.io.IOException; import java.util.ArrayList; @@ -178,12 +179,12 @@ protected static boolean parseObjectOrDocumentTypeProperties(String fieldName, O if (value.equalsIgnoreCase("strict")) { builder.dynamic(Dynamic.STRICT); } else { - boolean dynamic = TypeParsers.nodeBooleanValue(fieldName, "dynamic", fieldNode, parserContext); + boolean dynamic = XContentMapValues.nodeBooleanValue(fieldNode, fieldName + ".dynamic"); builder.dynamic(dynamic ? Dynamic.TRUE : Dynamic.FALSE); } return true; } else if (fieldName.equals("enabled")) { - builder.enabled(TypeParsers.nodeBooleanValue(fieldName, "enabled", fieldNode, parserContext)); + builder.enabled(XContentMapValues.nodeBooleanValue(fieldNode, fieldName + ".enabled")); return true; } else if (fieldName.equals("properties")) { if (fieldNode instanceof Collection && ((Collection) fieldNode).isEmpty()) { @@ -219,12 +220,12 @@ protected static void parseNested(String name, Map node, ObjectM } fieldNode = node.get("include_in_parent"); if (fieldNode != null) { - nestedIncludeInParent = TypeParsers.nodeBooleanValue(name, "include_in_parent", fieldNode, parserContext); + nestedIncludeInParent = XContentMapValues.nodeBooleanValue(fieldNode, name + ".include_in_parent"); node.remove("include_in_parent"); } fieldNode = node.get("include_in_root"); if (fieldNode != null) { - nestedIncludeInRoot = TypeParsers.nodeBooleanValue(name, "include_in_root", fieldNode, parserContext); + nestedIncludeInRoot = XContentMapValues.nodeBooleanValue(fieldNode, name + ".include_in_root"); node.remove("include_in_root"); } if (nested) { diff --git a/server/src/main/java/org/elasticsearch/index/mapper/ParentFieldMapper.java b/server/src/main/java/org/elasticsearch/index/mapper/ParentFieldMapper.java deleted file mode 100644 index 9de53b8dec6dd..0000000000000 --- a/server/src/main/java/org/elasticsearch/index/mapper/ParentFieldMapper.java +++ /dev/null @@ -1,326 +0,0 @@ -/* - * Licensed to Elasticsearch under one or more contributor - * license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright - * ownership. Elasticsearch licenses this file to you under - * the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.elasticsearch.index.mapper; - -import org.apache.lucene.document.SortedDocValuesField; -import org.apache.lucene.index.DocValuesType; -import org.apache.lucene.index.IndexOptions; -import org.apache.lucene.index.IndexableField; -import org.apache.lucene.index.Term; -import org.apache.lucene.search.BooleanClause; -import org.apache.lucene.search.BooleanQuery; -import org.apache.lucene.search.DocValuesFieldExistsQuery; -import org.apache.lucene.search.DocValuesTermsQuery; -import org.apache.lucene.search.Query; -import org.apache.lucene.search.TermQuery; -import org.apache.lucene.util.BytesRef; -import org.elasticsearch.common.Nullable; -import org.elasticsearch.common.ParseField; -import org.elasticsearch.common.lucene.BytesRefs; -import org.elasticsearch.common.settings.Settings; -import org.elasticsearch.common.xcontent.LoggingDeprecationHandler; -import org.elasticsearch.common.xcontent.XContentBuilder; -import org.elasticsearch.common.xcontent.support.XContentMapValues; -import org.elasticsearch.index.fielddata.IndexFieldData; -import org.elasticsearch.index.fielddata.plain.DocValuesIndexFieldData; -import org.elasticsearch.index.query.QueryShardContext; - -import java.io.IOException; -import java.util.Collections; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Objects; - -import static org.elasticsearch.common.xcontent.support.XContentMapValues.nodeMapValue; - -public class ParentFieldMapper extends MetadataFieldMapper { - - public static final String NAME = "_parent"; - public static final String CONTENT_TYPE = "_parent"; - - public static class Defaults { - public static final String NAME = ParentFieldMapper.NAME; - - public static final ParentFieldType FIELD_TYPE = new ParentFieldType(); - - static { - FIELD_TYPE.setTokenized(false); - FIELD_TYPE.setIndexOptions(IndexOptions.NONE); - FIELD_TYPE.setHasDocValues(true); - FIELD_TYPE.setDocValuesType(DocValuesType.SORTED); - FIELD_TYPE.setEagerGlobalOrdinals(false); - FIELD_TYPE.freeze(); - } - } - - public static class Builder extends MetadataFieldMapper.Builder { - - private String parentType; - - private final String documentType; - - public Builder(String documentType) { - super(Defaults.NAME, new ParentFieldType(Defaults.FIELD_TYPE, documentType), Defaults.FIELD_TYPE); - // Defaults to true - eagerGlobalOrdinals(true); - this.documentType = documentType; - builder = this; - } - - public Builder type(String type) { - this.parentType = type; - return builder; - } - - public Builder eagerGlobalOrdinals(boolean eagerGlobalOrdinals) { - fieldType().setEagerGlobalOrdinals(eagerGlobalOrdinals); - return builder; - } - - @Override - public ParentFieldMapper build(BuilderContext context) { - if (parentType == null) { - throw new MapperParsingException("[_parent] field mapping must contain the [type] option"); - } - name = joinField(parentType); - setupFieldType(context); - return new ParentFieldMapper(createParentJoinFieldMapper(documentType, context), fieldType, parentType, context.indexSettings()); - } - } - - public static class TypeParser implements MetadataFieldMapper.TypeParser { - private static final ParseField FIELDDATA = new ParseField("fielddata").withAllDeprecated("eager_global_ordinals"); - @Override - public MetadataFieldMapper.Builder parse(String name, Map node, ParserContext parserContext) throws MapperParsingException { - Builder builder = new Builder(parserContext.type()); - for (Iterator> iterator = node.entrySet().iterator(); iterator.hasNext();) { - Map.Entry entry = iterator.next(); - String fieldName = entry.getKey(); - Object fieldNode = entry.getValue(); - if (fieldName.equals("type")) { - builder.type(fieldNode.toString()); - iterator.remove(); - } else if (FIELDDATA.match(fieldName, LoggingDeprecationHandler.INSTANCE)) { - // for bw compat only - Map fieldDataSettings = nodeMapValue(fieldNode, "fielddata"); - if (fieldDataSettings.containsKey("loading")) { - builder.eagerGlobalOrdinals("eager_global_ordinals".equals(fieldDataSettings.get("loading"))); - } - iterator.remove(); - } else if (fieldName.equals("eager_global_ordinals")) { - builder.eagerGlobalOrdinals(XContentMapValues.nodeBooleanValue(fieldNode, "eager_global_ordinals")); - iterator.remove(); - } - } - return builder; - } - - @Override - public MetadataFieldMapper getDefault(MappedFieldType fieldType, ParserContext context) { - final Settings indexSettings = context.mapperService().getIndexSettings().getSettings(); - final String typeName = context.type(); - KeywordFieldMapper parentJoinField = createParentJoinFieldMapper(typeName, new BuilderContext(indexSettings, new ContentPath(0))); - MappedFieldType childJoinFieldType = new ParentFieldType(Defaults.FIELD_TYPE, typeName); - childJoinFieldType.setName(ParentFieldMapper.NAME); - return new ParentFieldMapper(parentJoinField, childJoinFieldType, null, indexSettings); - } - } - - static KeywordFieldMapper createParentJoinFieldMapper(String docType, BuilderContext context) { - KeywordFieldMapper.Builder parentJoinField = new KeywordFieldMapper.Builder(joinField(docType)); - parentJoinField.indexOptions(IndexOptions.NONE); - parentJoinField.docValues(true); - parentJoinField.fieldType().setDocValuesType(DocValuesType.SORTED); - return parentJoinField.build(context); - } - - static final class ParentFieldType extends MappedFieldType { - - final String documentType; - - ParentFieldType() { - documentType = null; - setEagerGlobalOrdinals(true); - } - - ParentFieldType(ParentFieldType ref, String documentType) { - super(ref); - this.documentType = documentType; - } - - private ParentFieldType(ParentFieldType ref) { - super(ref); - this.documentType = ref.documentType; - } - - @Override - public MappedFieldType clone() { - return new ParentFieldType(this); - } - - @Override - public String typeName() { - return CONTENT_TYPE; - } - - @Override - public Query existsQuery(QueryShardContext context) { - return new DocValuesFieldExistsQuery(name()); - } - - @Override - public Query termQuery(Object value, @Nullable QueryShardContext context) { - return termsQuery(Collections.singletonList(value), context); - } - - @Override - public Query termsQuery(List values, @Nullable QueryShardContext context) { - BytesRef[] ids = new BytesRef[values.size()]; - for (int i = 0; i < ids.length; i++) { - ids[i] = BytesRefs.toBytesRef(values.get(i)); - } - BooleanQuery.Builder query = new BooleanQuery.Builder(); - query.add(new DocValuesTermsQuery(name(), ids), BooleanClause.Occur.MUST); - query.add(new TermQuery(new Term(TypeFieldMapper.NAME, documentType)), BooleanClause.Occur.FILTER); - return query.build(); - } - - @Override - public IndexFieldData.Builder fielddataBuilder(String fullyQualifiedIndexName) { - return new DocValuesIndexFieldData.Builder(); - } - } - - private final String parentType; - // has no impact of field data settings, is just here for creating a join field, - // the parent field mapper in the child type pointing to this type determines the field data settings for this join field - private final KeywordFieldMapper parentJoinField; - - private ParentFieldMapper(KeywordFieldMapper parentJoinField, MappedFieldType childJoinFieldType, String parentType, Settings indexSettings) { - super(NAME, childJoinFieldType, Defaults.FIELD_TYPE, indexSettings); - this.parentType = parentType; - this.parentJoinField = parentJoinField; - } - - public MappedFieldType getParentJoinFieldType() { - return parentJoinField.fieldType(); - } - - public String type() { - return parentType; - } - - @Override - public void preParse(ParseContext context) throws IOException { - } - - @Override - public void postParse(ParseContext context) throws IOException { - parse(context); - } - - @Override - protected void parseCreateField(ParseContext context, List fields) throws IOException { - boolean parent = context.docMapper().isParent(context.sourceToParse().type()); - if (parent) { - fields.add(new SortedDocValuesField(parentJoinField.fieldType().name(), new BytesRef(context.sourceToParse().id()))); - } - - if (!active()) { - return; - } - - if (context.parser().currentName() != null && context.parser().currentName().equals(Defaults.NAME)) { - // we are in the parsing of _parent phase - String parentId = context.parser().text(); - context.sourceToParse().parent(parentId); - fields.add(new SortedDocValuesField(fieldType.name(), new BytesRef(parentId))); - } else { - // otherwise, we are running it post processing of the xcontent - String parsedParentId = context.doc().get(Defaults.NAME); - if (context.sourceToParse().parent() != null) { - String parentId = context.sourceToParse().parent(); - if (parsedParentId == null) { - if (parentId == null) { - throw new MapperParsingException("No parent id provided, not within the document, and not externally"); - } - // we did not add it in the parsing phase, add it now - fields.add(new SortedDocValuesField(fieldType.name(), new BytesRef(parentId))); - } else if (parentId != null && !parsedParentId.equals(Uid.createUid(parentType, parentId))) { - throw new MapperParsingException("Parent id mismatch, document value is [" + Uid.createUid(parsedParentId).id() + "], while external value is [" + parentId + "]"); - } - } - } - // we have parent mapping, yet no value was set, ignore it... - } - - public static String joinField(String parentType) { - return ParentFieldMapper.NAME + "#" + parentType; - } - - @Override - protected String contentType() { - return CONTENT_TYPE; - } - - @Override - public Iterator iterator() { - return Collections.singleton(parentJoinField).iterator(); - } - - @Override - public XContentBuilder toXContent(XContentBuilder builder, Params params) throws IOException { - if (!active()) { - return builder; - } - boolean includeDefaults = params.paramAsBoolean("include_defaults", false); - - builder.startObject(CONTENT_TYPE); - builder.field("type", parentType); - if (includeDefaults || fieldType().eagerGlobalOrdinals() == false) { - builder.field("eager_global_ordinals", fieldType().eagerGlobalOrdinals()); - } - builder.endObject(); - return builder; - } - - @Override - protected void doMerge(Mapper mergeWith) { - ParentFieldMapper fieldMergeWith = (ParentFieldMapper) mergeWith; - if (fieldMergeWith.parentType != null && Objects.equals(parentType, fieldMergeWith.parentType) == false) { - throw new IllegalArgumentException("The _parent field's type option can't be changed: [" + parentType + "]->[" + fieldMergeWith.parentType + "]"); - } - // If fieldMergeWith is not active it means the user provided a mapping - // update that does not explicitly configure the _parent field, so we - // ignore it. - if (fieldMergeWith.active()) { - super.doMerge(mergeWith); - } - - } - - /** - * @return Whether the _parent field is actually configured. - */ - public boolean active() { - return parentType != null; - } - -} diff --git a/server/src/main/java/org/elasticsearch/index/mapper/ParsedDocument.java b/server/src/main/java/org/elasticsearch/index/mapper/ParsedDocument.java index 0c740a0af7c8b..414cb3a98ecab 100644 --- a/server/src/main/java/org/elasticsearch/index/mapper/ParsedDocument.java +++ b/server/src/main/java/org/elasticsearch/index/mapper/ParsedDocument.java @@ -45,8 +45,6 @@ public class ParsedDocument { private Mapping dynamicMappingsUpdate; - private String parent; - public ParsedDocument(Field version, SeqNoFieldMapper.SequenceIDFields seqID, String id, @@ -110,15 +108,6 @@ public void setSource(BytesReference source, XContentType xContentType) { this.xContentType = xContentType; } - public ParsedDocument parent(String parent) { - this.parent = parent; - return this; - } - - public String parent() { - return this.parent; - } - /** * Return dynamic updates to mappings or {@code null} if there were no * updates to the mappings. @@ -137,7 +126,7 @@ public void addDynamicMappingsUpdate(Mapping update) { @Override public String toString() { - return "Document uid[" + Uid.createUidAsBytes(type, id) + "] doc [" + documents + ']'; + return "Document id[" + id + "] doc [" + documents + ']'; } } diff --git a/server/src/main/java/org/elasticsearch/index/mapper/RangeFieldMapper.java b/server/src/main/java/org/elasticsearch/index/mapper/RangeFieldMapper.java index 1b9377a959bca..0a92d0d188477 100644 --- a/server/src/main/java/org/elasticsearch/index/mapper/RangeFieldMapper.java +++ b/server/src/main/java/org/elasticsearch/index/mapper/RangeFieldMapper.java @@ -53,6 +53,7 @@ import org.elasticsearch.common.util.LocaleUtils; import org.elasticsearch.common.xcontent.XContentBuilder; import org.elasticsearch.common.xcontent.XContentParser; +import org.elasticsearch.common.xcontent.support.XContentMapValues; import org.elasticsearch.index.mapper.NumberFieldMapper.NumberType; import org.elasticsearch.index.query.QueryShardContext; import org.joda.time.DateTimeZone; @@ -183,7 +184,7 @@ public Mapper.Builder parse(String name, Map node, throw new MapperParsingException("Property [null_value] is not supported for [" + this.type.name + "] field types."); } else if (propName.equals("coerce")) { - builder.coerce(TypeParsers.nodeBooleanValue(name, "coerce", propNode, parserContext)); + builder.coerce(XContentMapValues.nodeBooleanValue(propNode, name + ".coerce")); iterator.remove(); } else if (propName.equals("locale")) { builder.locale(LocaleUtils.parse(propNode.toString())); @@ -208,7 +209,7 @@ public static final class RangeFieldType extends MappedFieldType { super(); this.rangeType = Objects.requireNonNull(type); setTokenized(false); - setHasDocValues(indexVersionCreated.onOrAfter(Version.V_6_0_0_beta1)); + setHasDocValues(true); setOmitNorms(true); if (rangeType == RangeType.DATE) { setDateTimeFormatter(DateFieldMapper.DEFAULT_DATE_TIME_FORMATTER); diff --git a/server/src/main/java/org/elasticsearch/index/mapper/RoutingFieldMapper.java b/server/src/main/java/org/elasticsearch/index/mapper/RoutingFieldMapper.java index 25cfc71261b0a..a22b9da7da34d 100644 --- a/server/src/main/java/org/elasticsearch/index/mapper/RoutingFieldMapper.java +++ b/server/src/main/java/org/elasticsearch/index/mapper/RoutingFieldMapper.java @@ -28,6 +28,7 @@ import org.elasticsearch.common.lucene.Lucene; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.xcontent.XContentBuilder; +import org.elasticsearch.common.xcontent.support.XContentMapValues; import org.elasticsearch.index.query.QueryShardContext; import java.io.IOException; @@ -88,7 +89,7 @@ public MetadataFieldMapper.Builder parse(String name, Map n String fieldName = entry.getKey(); Object fieldNode = entry.getValue(); if (fieldName.equals("required")) { - builder.required(TypeParsers.nodeBooleanValue(name, "required", fieldNode, parserContext)); + builder.required(XContentMapValues.nodeBooleanValue(fieldNode, name + ".required")); iterator.remove(); } } diff --git a/server/src/main/java/org/elasticsearch/index/mapper/SourceFieldMapper.java b/server/src/main/java/org/elasticsearch/index/mapper/SourceFieldMapper.java index b4a8330e23803..dafbb2e82ac59 100644 --- a/server/src/main/java/org/elasticsearch/index/mapper/SourceFieldMapper.java +++ b/server/src/main/java/org/elasticsearch/index/mapper/SourceFieldMapper.java @@ -113,7 +113,7 @@ public MetadataFieldMapper.Builder parse(String name, Map n String fieldName = entry.getKey(); Object fieldNode = entry.getValue(); if (fieldName.equals("enabled")) { - builder.enabled(TypeParsers.nodeBooleanValue(name, "enabled", fieldNode, parserContext)); + builder.enabled(XContentMapValues.nodeBooleanValue(fieldNode, name + ".enabled")); iterator.remove(); } else if (fieldName.equals("includes")) { List values = (List) fieldNode; diff --git a/server/src/main/java/org/elasticsearch/index/mapper/SourceToParse.java b/server/src/main/java/org/elasticsearch/index/mapper/SourceToParse.java index 52e3001da84cd..0130207c0a78e 100644 --- a/server/src/main/java/org/elasticsearch/index/mapper/SourceToParse.java +++ b/server/src/main/java/org/elasticsearch/index/mapper/SourceToParse.java @@ -42,8 +42,6 @@ public static SourceToParse source(String index, String type, String id, BytesRe private String routing; - private String parentId; - private XContentType xContentType; private SourceToParse(String index, String type, String id, BytesReference source, XContentType xContentType) { @@ -72,15 +70,6 @@ public String id() { return this.id; } - public String parent() { - return this.parentId; - } - - public SourceToParse parent(String parentId) { - this.parentId = parentId; - return this; - } - public String routing() { return this.routing; } diff --git a/server/src/main/java/org/elasticsearch/index/mapper/TypeFieldMapper.java b/server/src/main/java/org/elasticsearch/index/mapper/TypeFieldMapper.java index b47242d02b0f3..ccc49e9b9ea81 100644 --- a/server/src/main/java/org/elasticsearch/index/mapper/TypeFieldMapper.java +++ b/server/src/main/java/org/elasticsearch/index/mapper/TypeFieldMapper.java @@ -144,33 +144,23 @@ public Query termQuery(Object value, QueryShardContext context) { @Override public Query termsQuery(List values, QueryShardContext context) { - if (context.getIndexSettings().isSingleType()) { - Collection indexTypes = context.getMapperService().types(); - if (indexTypes.isEmpty()) { - return new MatchNoDocsQuery("No types"); - } - assert indexTypes.size() == 1; - BytesRef indexType = indexedValueForSearch(indexTypes.iterator().next()); - if (values.stream() - .map(this::indexedValueForSearch) - .anyMatch(indexType::equals)) { - if (context.getMapperService().hasNested()) { - // type filters are expected not to match nested docs - return Queries.newNonNestedFilter(context.indexVersionCreated()); - } else { - return new MatchAllDocsQuery(); - } + Collection indexTypes = context.getMapperService().types(); + if (indexTypes.isEmpty()) { + return new MatchNoDocsQuery("No types"); + } + assert indexTypes.size() == 1; + BytesRef indexType = indexedValueForSearch(indexTypes.iterator().next()); + if (values.stream() + .map(this::indexedValueForSearch) + .anyMatch(indexType::equals)) { + if (context.getMapperService().hasNested()) { + // type filters are expected not to match nested docs + return Queries.newNonNestedFilter(context.indexVersionCreated()); } else { - return new MatchNoDocsQuery("Type list does not contain the index type"); + return new MatchAllDocsQuery(); } } else { - if (indexOptions() == IndexOptions.NONE) { - throw new AssertionError(); - } - final BytesRef[] types = values.stream() - .map(this::indexedValueForSearch) - .toArray(size -> new BytesRef[size]); - return new TypesQuery(types); + return new MatchNoDocsQuery("Type list does not contain the index type"); } } @@ -269,13 +259,8 @@ private TypeFieldMapper(MappedFieldType fieldType, IndexSettings indexSettings) private static MappedFieldType defaultFieldType(IndexSettings indexSettings) { MappedFieldType defaultFieldType = Defaults.FIELD_TYPE.clone(); - if (indexSettings.isSingleType()) { - defaultFieldType.setIndexOptions(IndexOptions.NONE); - defaultFieldType.setHasDocValues(false); - } else { - defaultFieldType.setIndexOptions(IndexOptions.DOCS); - defaultFieldType.setHasDocValues(true); - } + defaultFieldType.setIndexOptions(IndexOptions.NONE); + defaultFieldType.setHasDocValues(false); return defaultFieldType; } diff --git a/server/src/main/java/org/elasticsearch/index/mapper/TypeParsers.java b/server/src/main/java/org/elasticsearch/index/mapper/TypeParsers.java index 37fd1203622b1..52dfadfe27308 100644 --- a/server/src/main/java/org/elasticsearch/index/mapper/TypeParsers.java +++ b/server/src/main/java/org/elasticsearch/index/mapper/TypeParsers.java @@ -21,12 +21,8 @@ import org.apache.lucene.index.IndexOptions; import org.elasticsearch.ElasticsearchParseException; -import org.elasticsearch.Version; -import org.elasticsearch.common.Booleans; import org.elasticsearch.common.joda.FormatDateTimeFormatter; import org.elasticsearch.common.joda.Joda; -import org.elasticsearch.common.logging.DeprecationLogger; -import org.elasticsearch.common.logging.Loggers; import org.elasticsearch.common.xcontent.support.XContentMapValues; import org.elasticsearch.index.analysis.NamedAnalyzer; import org.elasticsearch.index.similarity.SimilarityProvider; @@ -48,35 +44,6 @@ public class TypeParsers { public static final String INDEX_OPTIONS_POSITIONS = "positions"; public static final String INDEX_OPTIONS_OFFSETS = "offsets"; - private static final DeprecationLogger DEPRECATION_LOGGER = new DeprecationLogger(Loggers.getLogger(TypeParsers.class)); - - //TODO 22298: Remove this method and have all call-sites use XContentMapValues.nodeBooleanValue(node) directly. - public static boolean nodeBooleanValue(String fieldName, String propertyName, Object node, - Mapper.TypeParser.ParserContext parserContext) { - if (parserContext.indexVersionCreated().onOrAfter(Version.V_6_0_0_alpha1)) { - return XContentMapValues.nodeBooleanValue(node, fieldName + "." + propertyName); - } else { - return nodeBooleanValueLenient(fieldName, propertyName, node); - } - } - - //TODO 22298: Remove this method and have all call-sites use XContentMapValues.nodeBooleanValue(node) directly. - public static boolean nodeBooleanValueLenient(String fieldName, String propertyName, Object node) { - if (Booleans.isBoolean(node.toString()) == false) { - DEPRECATION_LOGGER.deprecated("Expected a boolean for property [{}] for field [{}] but got [{}]", - propertyName, fieldName, node); - } - if (node instanceof Boolean) { - return (Boolean) node; - } - if (node instanceof Number) { - return ((Number) node).intValue() != 0; - } - @SuppressWarnings("deprecated") - boolean value = Booleans.parseBooleanLenient(node.toString(), false); - return value; - } - private static void parseAnalyzersAndTermVectors(FieldMapper.Builder builder, String name, Map fieldNode, Mapper.TypeParser.ParserContext parserContext) { @@ -92,17 +59,16 @@ private static void parseAnalyzersAndTermVectors(FieldMapper.Builder builder, St parseTermVector(name, propNode.toString(), builder); iterator.remove(); } else if (propName.equals("store_term_vectors")) { - builder.storeTermVectors(nodeBooleanValue(name, "store_term_vectors", propNode, parserContext)); + builder.storeTermVectors(XContentMapValues.nodeBooleanValue(propNode, name + ".store_term_vectors")); iterator.remove(); } else if (propName.equals("store_term_vector_offsets")) { - builder.storeTermVectorOffsets(nodeBooleanValue(name, "store_term_vector_offsets", propNode, parserContext)); + builder.storeTermVectorOffsets(XContentMapValues.nodeBooleanValue(propNode, name + ".store_term_vector_offsets")); iterator.remove(); } else if (propName.equals("store_term_vector_positions")) { - builder.storeTermVectorPositions( - nodeBooleanValue(name, "store_term_vector_positions", propNode, parserContext)); + builder.storeTermVectorPositions(XContentMapValues.nodeBooleanValue(propNode, name + ".store_term_vector_positions")); iterator.remove(); } else if (propName.equals("store_term_vector_payloads")) { - builder.storeTermVectorPayloads(nodeBooleanValue(name,"store_term_vector_payloads", propNode, parserContext)); + builder.storeTermVectorPayloads(XContentMapValues.nodeBooleanValue(propNode, name + ".store_term_vector_payloads")); iterator.remove(); } else if (propName.equals("analyzer")) { NamedAnalyzer analyzer = parserContext.getIndexAnalyzers().get(propNode.toString()); @@ -158,7 +124,7 @@ private static void parseAnalyzersAndTermVectors(FieldMapper.Builder builder, St public static void parseNorms(FieldMapper.Builder builder, String fieldName, Object propNode, Mapper.TypeParser.ParserContext parserContext) { - builder.omitNorms(nodeBooleanValue(fieldName, "norms", propNode, parserContext) == false); + builder.omitNorms(XContentMapValues.nodeBooleanValue(propNode, fieldName + ".norms") == false); } /** @@ -197,13 +163,13 @@ public static void parseField(FieldMapper.Builder builder, String name, Map types, Object id) { - return createUidsForTypesAndIds(types, Collections.singletonList(id)); - } - - public static BytesRef[] createUidsForTypesAndIds(Collection types, Collection ids) { - BytesRef[] uids = new BytesRef[types.size() * ids.size()]; - BytesRefBuilder typeBytes = new BytesRefBuilder(); - BytesRefBuilder idBytes = new BytesRefBuilder(); - int index = 0; - for (String type : types) { - typeBytes.copyChars(type); - for (Object id : ids) { - uids[index++] = Uid.createUidAsBytes(typeBytes.get(), BytesRefs.toBytesRef(id, idBytes)); - } - } - return uids; - } - - public static String createUid(String type, String id) { - return type + DELIMITER + id; + return type + "#" + id; } private static final int UTF8 = 0xff; diff --git a/server/src/main/java/org/elasticsearch/index/mapper/UidFieldMapper.java b/server/src/main/java/org/elasticsearch/index/mapper/UidFieldMapper.java deleted file mode 100644 index 04e791b8cee1e..0000000000000 --- a/server/src/main/java/org/elasticsearch/index/mapper/UidFieldMapper.java +++ /dev/null @@ -1,235 +0,0 @@ -/* - * Licensed to Elasticsearch under one or more contributor - * license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright - * ownership. Elasticsearch licenses this file to you under - * the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package org.elasticsearch.index.mapper; - -import org.apache.lucene.document.Field; -import org.apache.lucene.index.IndexOptions; -import org.apache.lucene.index.IndexableField; -import org.apache.lucene.search.MatchAllDocsQuery; -import org.apache.lucene.search.MatchNoDocsQuery; -import org.apache.lucene.search.Query; -import org.apache.lucene.search.TermInSetQuery; -import org.apache.lucene.util.BytesRef; -import org.elasticsearch.Version; -import org.elasticsearch.common.Nullable; -import org.elasticsearch.common.logging.DeprecationLogger; -import org.elasticsearch.common.logging.Loggers; -import org.elasticsearch.common.lucene.Lucene; -import org.elasticsearch.common.xcontent.XContentBuilder; -import org.elasticsearch.index.IndexSettings; -import org.elasticsearch.index.fielddata.IndexFieldData; -import org.elasticsearch.index.fielddata.IndexFieldDataCache; -import org.elasticsearch.index.fielddata.UidIndexFieldData; -import org.elasticsearch.index.fielddata.plain.PagedBytesIndexFieldData; -import org.elasticsearch.index.query.QueryShardContext; -import org.elasticsearch.indices.breaker.CircuitBreakerService; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.List; -import java.util.Map; - -public class UidFieldMapper extends MetadataFieldMapper { - - public static final String NAME = "_uid"; - - public static final String CONTENT_TYPE = "_uid"; - - public static class Defaults { - public static final String NAME = UidFieldMapper.NAME; - - public static final MappedFieldType FIELD_TYPE = new UidFieldType(); - public static final MappedFieldType NESTED_FIELD_TYPE; - - static { - FIELD_TYPE.setIndexOptions(IndexOptions.DOCS); - FIELD_TYPE.setTokenized(false); - FIELD_TYPE.setStored(true); - FIELD_TYPE.setOmitNorms(true); - FIELD_TYPE.setIndexAnalyzer(Lucene.KEYWORD_ANALYZER); - FIELD_TYPE.setSearchAnalyzer(Lucene.KEYWORD_ANALYZER); - FIELD_TYPE.setName(NAME); - FIELD_TYPE.freeze(); - - NESTED_FIELD_TYPE = FIELD_TYPE.clone(); - NESTED_FIELD_TYPE.setStored(false); - NESTED_FIELD_TYPE.freeze(); - } - } - - private static final DeprecationLogger DEPRECATION_LOGGER = new DeprecationLogger(Loggers.getLogger(UidFieldMapper.class)); - - public static class TypeParser implements MetadataFieldMapper.TypeParser { - @Override - public MetadataFieldMapper.Builder parse(String name, Map node, ParserContext parserContext) throws MapperParsingException { - throw new MapperParsingException(NAME + " is not configurable"); - } - - @Override - public MetadataFieldMapper getDefault(MappedFieldType fieldType, ParserContext context) { - final IndexSettings indexSettings = context.mapperService().getIndexSettings(); - return new UidFieldMapper(indexSettings, fieldType); - } - } - - static final class UidFieldType extends TermBasedFieldType { - - UidFieldType() { - } - - protected UidFieldType(UidFieldType ref) { - super(ref); - } - - @Override - public MappedFieldType clone() { - return new UidFieldType(this); - } - - @Override - public String typeName() { - return CONTENT_TYPE; - } - - @Override - public IndexFieldData.Builder fielddataBuilder(String fullyQualifiedIndexName) { - if (indexOptions() == IndexOptions.NONE) { - DEPRECATION_LOGGER.deprecated("Fielddata access on the _uid field is deprecated, use _id instead"); - return new IndexFieldData.Builder() { - @Override - public IndexFieldData build(IndexSettings indexSettings, MappedFieldType fieldType, IndexFieldDataCache cache, - CircuitBreakerService breakerService, MapperService mapperService) { - MappedFieldType idFieldType = mapperService.fullName(IdFieldMapper.NAME); - IndexFieldData idFieldData = idFieldType.fielddataBuilder(fullyQualifiedIndexName) - .build(indexSettings, idFieldType, cache, breakerService, mapperService); - final String type = mapperService.types().iterator().next(); - return new UidIndexFieldData(indexSettings.getIndex(), type, idFieldData); - } - }; - } else { - // Old index, _uid was indexed - return new PagedBytesIndexFieldData.Builder( - TextFieldMapper.Defaults.FIELDDATA_MIN_FREQUENCY, - TextFieldMapper.Defaults.FIELDDATA_MAX_FREQUENCY, - TextFieldMapper.Defaults.FIELDDATA_MIN_SEGMENT_SIZE); - } - } - - @Override - public Query existsQuery(QueryShardContext context) { - return new MatchAllDocsQuery(); - } - - @Override - public Query termQuery(Object value, @Nullable QueryShardContext context) { - return termsQuery(Arrays.asList(value), context); - } - - @Override - public Query termsQuery(List values, @Nullable QueryShardContext context) { - if (indexOptions() != IndexOptions.NONE) { - return super.termsQuery(values, context); - } - Collection indexTypes = context.getMapperService().types(); - if (indexTypes.isEmpty()) { - return new MatchNoDocsQuery("No types"); - } - assert indexTypes.size() == 1; - final String expectedPrefix = indexTypes.iterator().next() + "#"; - List ids = new ArrayList<>(); - for (Object uid : values) { - if (uid instanceof BytesRef) { - uid = ((BytesRef) uid).utf8ToString(); - } - String uidString = uid.toString(); - if (uidString.startsWith(expectedPrefix)) { - String id = uidString.substring(expectedPrefix.length(), uidString.length()); - BytesRef encodedId; - if (context.indexVersionCreated().onOrAfter(Version.V_6_0_0_beta1)) { - encodedId = Uid.encodeId(id); - } else { - encodedId = new BytesRef(id); - } - ids.add(encodedId); - } - } - return new TermInSetQuery(IdFieldMapper.NAME, ids); - } - } - - static MappedFieldType defaultFieldType(IndexSettings indexSettings) { - MappedFieldType defaultFieldType = Defaults.FIELD_TYPE.clone(); - if (indexSettings.isSingleType()) { - defaultFieldType.setIndexOptions(IndexOptions.NONE); - defaultFieldType.setStored(false); - } else { - defaultFieldType.setIndexOptions(IndexOptions.DOCS); - defaultFieldType.setStored(true); - } - return defaultFieldType; - } - - private UidFieldMapper(IndexSettings indexSettings, MappedFieldType existing) { - this(existing == null ? defaultFieldType(indexSettings) : existing, indexSettings); - } - - private UidFieldMapper(MappedFieldType fieldType, IndexSettings indexSettings) { - super(NAME, fieldType, defaultFieldType(indexSettings), indexSettings.getSettings()); - } - - @Override - public void preParse(ParseContext context) throws IOException { - super.parse(context); - } - - @Override - public void postParse(ParseContext context) throws IOException {} - - @Override - public Mapper parse(ParseContext context) throws IOException { - // nothing to do here, we do everything in preParse - return null; - } - - @Override - protected void parseCreateField(ParseContext context, List fields) throws IOException { - if (fieldType.indexOptions() != IndexOptions.NONE || fieldType.stored()) { - Field uid = new Field(NAME, Uid.createUid(context.sourceToParse().type(), context.sourceToParse().id()), fieldType); - fields.add(uid); - } - } - - @Override - protected String contentType() { - return CONTENT_TYPE; - } - - @Override - public XContentBuilder toXContent(XContentBuilder builder, Params params) throws IOException { - return builder; - } - - @Override - protected void doMerge(Mapper mergeWith) { - // do nothing here, no merging, but also no exception - } -} diff --git a/server/src/main/java/org/elasticsearch/index/query/IdsQueryBuilder.java b/server/src/main/java/org/elasticsearch/index/query/IdsQueryBuilder.java index 9f9b508267224..68c872e9cbb90 100644 --- a/server/src/main/java/org/elasticsearch/index/query/IdsQueryBuilder.java +++ b/server/src/main/java/org/elasticsearch/index/query/IdsQueryBuilder.java @@ -31,11 +31,12 @@ import org.elasticsearch.common.xcontent.ObjectParser; import org.elasticsearch.common.xcontent.XContentBuilder; import org.elasticsearch.common.xcontent.XContentParser; +import org.elasticsearch.index.mapper.IdFieldMapper; import org.elasticsearch.index.mapper.MappedFieldType; import org.elasticsearch.index.mapper.Uid; -import org.elasticsearch.index.mapper.UidFieldMapper; import java.io.IOException; +import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.Collections; @@ -83,6 +84,7 @@ protected void doWriteTo(StreamOutput out) throws IOException { /** * Add types to query */ + // TODO: Remove public IdsQueryBuilder types(String... types) { if (types == null) { throw new IllegalArgumentException("[" + NAME + "] types cannot be null"); @@ -154,13 +156,12 @@ public String getWriteableName() { @Override protected Query doToQuery(QueryShardContext context) throws IOException { - Query query; - MappedFieldType uidField = context.fieldMapper(UidFieldMapper.NAME); - if (uidField == null) { + MappedFieldType idField = context.fieldMapper(IdFieldMapper.NAME); + if (idField == null) { return new MatchNoDocsQuery("No mappings"); } if (this.ids.isEmpty()) { - query = Queries.newMatchNoDocsQuery("Missing ids in \"" + this.getName() + "\" query."); + return Queries.newMatchNoDocsQuery("Missing ids in \"" + this.getName() + "\" query."); } else { Collection typesForQuery; if (types.length == 0) { @@ -172,9 +173,15 @@ protected Query doToQuery(QueryShardContext context) throws IOException { Collections.addAll(typesForQuery, types); } - query = uidField.termsQuery(Arrays.asList(Uid.createUidsForTypesAndIds(typesForQuery, ids)), context); + final Collection mappingTypes = context.getMapperService().types(); + assert mappingTypes.size() == 1; + if (typesForQuery.contains(mappingTypes.iterator().next())) { + return idField.termsQuery(new ArrayList<>(ids), context); + } else { + return new MatchNoDocsQuery("Type mismatch"); + } + } - return query; } @Override diff --git a/server/src/main/java/org/elasticsearch/index/query/MoreLikeThisQueryBuilder.java b/server/src/main/java/org/elasticsearch/index/query/MoreLikeThisQueryBuilder.java index d296db28ad625..b5e3272ab0a6e 100644 --- a/server/src/main/java/org/elasticsearch/index/query/MoreLikeThisQueryBuilder.java +++ b/server/src/main/java/org/elasticsearch/index/query/MoreLikeThisQueryBuilder.java @@ -24,7 +24,6 @@ import org.apache.lucene.search.BooleanClause; import org.apache.lucene.search.BooleanQuery; import org.apache.lucene.search.Query; -import org.apache.lucene.util.BytesRef; import org.elasticsearch.ElasticsearchParseException; import org.elasticsearch.ExceptionsHelper; import org.elasticsearch.Version; @@ -52,10 +51,10 @@ import org.elasticsearch.common.xcontent.XContentParser; import org.elasticsearch.common.xcontent.XContentType; import org.elasticsearch.index.VersionType; +import org.elasticsearch.index.mapper.IdFieldMapper; import org.elasticsearch.index.mapper.KeywordFieldMapper.KeywordFieldType; import org.elasticsearch.index.mapper.MappedFieldType; import org.elasticsearch.index.mapper.TextFieldMapper.TextFieldType; -import org.elasticsearch.index.mapper.UidFieldMapper; import java.io.IOException; import java.io.InputStream; @@ -70,7 +69,6 @@ import java.util.Set; import static org.elasticsearch.common.xcontent.XContentFactory.jsonBuilder; -import static org.elasticsearch.index.mapper.Uid.createUidAsBytes; /** * A more like this query that finds documents that are "like" the provided set of document(s). @@ -1132,21 +1130,21 @@ private static Fields[] getFieldsFor(MultiTermVectorsResponse responses) throws } private static void handleExclude(BooleanQuery.Builder boolQuery, Item[] likeItems, QueryShardContext context) { - MappedFieldType uidField = context.fieldMapper(UidFieldMapper.NAME); - if (uidField == null) { + MappedFieldType idField = context.fieldMapper(IdFieldMapper.NAME); + if (idField == null) { // no mappings, nothing to exclude return; } // artificial docs get assigned a random id and should be disregarded - List uids = new ArrayList<>(); + List ids = new ArrayList<>(); for (Item item : likeItems) { if (item.doc() != null) { continue; } - uids.add(createUidAsBytes(item.type(), item.id())); + ids.add(item.id()); } - if (!uids.isEmpty()) { - Query query = uidField.termsQuery(uids, context); + if (!ids.isEmpty()) { + Query query = idField.termsQuery(ids, context); boolQuery.add(query, BooleanClause.Occur.MUST_NOT); } } diff --git a/server/src/main/java/org/elasticsearch/index/query/functionscore/RandomScoreFunctionBuilder.java b/server/src/main/java/org/elasticsearch/index/query/functionscore/RandomScoreFunctionBuilder.java index d7ce32d9b7628..da2a165258f33 100644 --- a/server/src/main/java/org/elasticsearch/index/query/functionscore/RandomScoreFunctionBuilder.java +++ b/server/src/main/java/org/elasticsearch/index/query/functionscore/RandomScoreFunctionBuilder.java @@ -30,7 +30,6 @@ import org.elasticsearch.common.xcontent.XContentParser; import org.elasticsearch.index.mapper.IdFieldMapper; import org.elasticsearch.index.mapper.MappedFieldType; -import org.elasticsearch.index.mapper.UidFieldMapper; import org.elasticsearch.index.query.QueryShardContext; import java.io.IOException; @@ -170,11 +169,7 @@ protected ScoreFunction doToFunction(QueryShardContext context) { } else { DEPRECATION_LOGGER.deprecated( "As of version 7.0 Elasticsearch will require that a [field] parameter is provided when a [seed] is set"); - if (context.getIndexSettings().isSingleType()) { - fieldType = context.getMapperService().fullName(IdFieldMapper.NAME); - } else { - fieldType = context.getMapperService().fullName(UidFieldMapper.NAME); - } + fieldType = context.getMapperService().fullName(IdFieldMapper.NAME); } if (fieldType == null) { if (context.getMapperService().types().isEmpty()) { diff --git a/server/src/main/java/org/elasticsearch/index/reindex/ClientScrollableHitSource.java b/server/src/main/java/org/elasticsearch/index/reindex/ClientScrollableHitSource.java index 67e0f5400b389..eb8c0e14f4343 100644 --- a/server/src/main/java/org/elasticsearch/index/reindex/ClientScrollableHitSource.java +++ b/server/src/main/java/org/elasticsearch/index/reindex/ClientScrollableHitSource.java @@ -39,7 +39,6 @@ import org.elasticsearch.common.util.concurrent.EsRejectedExecutionException; import org.elasticsearch.common.xcontent.XContentHelper; import org.elasticsearch.common.xcontent.XContentType; -import org.elasticsearch.index.mapper.ParentFieldMapper; import org.elasticsearch.index.mapper.RoutingFieldMapper; import org.elasticsearch.search.SearchHit; import org.elasticsearch.threadpool.ThreadPool; @@ -241,11 +240,6 @@ public long getVersion() { return delegate.getVersion(); } - @Override - public String getParent() { - return fieldValue(ParentFieldMapper.NAME); - } - @Override public String getRouting() { return fieldValue(RoutingFieldMapper.NAME); diff --git a/server/src/main/java/org/elasticsearch/index/reindex/ScrollableHitSource.java b/server/src/main/java/org/elasticsearch/index/reindex/ScrollableHitSource.java index 969bc96e35b95..917b57a9c9745 100644 --- a/server/src/main/java/org/elasticsearch/index/reindex/ScrollableHitSource.java +++ b/server/src/main/java/org/elasticsearch/index/reindex/ScrollableHitSource.java @@ -30,7 +30,6 @@ import org.elasticsearch.common.io.stream.StreamOutput; import org.elasticsearch.common.io.stream.Writeable; import org.elasticsearch.common.unit.TimeValue; -import org.elasticsearch.common.xcontent.ToXContent.Params; import org.elasticsearch.common.xcontent.ToXContentObject; import org.elasticsearch.common.xcontent.XContentBuilder; import org.elasticsearch.common.xcontent.XContentType; @@ -200,10 +199,6 @@ public interface Hit { * The content type of the hit source. Returns null if the source didn't come back from the search. */ @Nullable XContentType getXContentType(); - /** - * The document id of the parent of the hit if there is a parent or null if there isn't. - */ - @Nullable String getParent(); /** * The routing on the hit if there is any or null if there isn't. */ @@ -221,7 +216,6 @@ public static class BasicHit implements Hit { private BytesReference source; private XContentType xContentType; - private String parent; private String routing; public BasicHit(String index, String type, String id, long version) { @@ -267,16 +261,6 @@ public BasicHit setSource(BytesReference source, XContentType xContentType) { return this; } - @Override - public String getParent() { - return parent; - } - - public BasicHit setParent(String parent) { - this.parent = parent; - return this; - } - @Override public String getRouting() { return routing; diff --git a/server/src/main/java/org/elasticsearch/index/shard/IndexShard.java b/server/src/main/java/org/elasticsearch/index/shard/IndexShard.java index e2e8459943c26..46e095ab014d0 100644 --- a/server/src/main/java/org/elasticsearch/index/shard/IndexShard.java +++ b/server/src/main/java/org/elasticsearch/index/shard/IndexShard.java @@ -24,7 +24,6 @@ import org.apache.logging.log4j.message.ParameterizedMessage; import org.apache.lucene.index.CheckIndex; import org.apache.lucene.index.IndexCommit; -import org.apache.lucene.index.IndexOptions; import org.apache.lucene.index.LeafReaderContext; import org.apache.lucene.index.SegmentCommitInfo; import org.apache.lucene.index.SegmentInfos; @@ -99,7 +98,6 @@ import org.elasticsearch.index.mapper.ParsedDocument; import org.elasticsearch.index.mapper.SourceToParse; import org.elasticsearch.index.mapper.Uid; -import org.elasticsearch.index.mapper.UidFieldMapper; import org.elasticsearch.index.merge.MergeStats; import org.elasticsearch.index.recovery.RecoveryStats; import org.elasticsearch.index.refresh.RefreshStats; @@ -683,14 +681,7 @@ public static Engine.Index prepareIndex(DocumentMapperForType docMapper, Version if (docMapper.getMapping() != null) { doc.addDynamicMappingsUpdate(docMapper.getMapping()); } - Term uid; - if (indexCreatedVersion.onOrAfter(Version.V_6_0_0_beta1)) { - uid = new Term(IdFieldMapper.NAME, Uid.encodeId(doc.id())); - } else if (docMapper.getDocumentMapper().idFieldMapper().fieldType().indexOptions() != IndexOptions.NONE) { - uid = new Term(IdFieldMapper.NAME, doc.id()); - } else { - uid = new Term(UidFieldMapper.NAME, Uid.createUidAsBytes(doc.type(), doc.id())); - } + Term uid = new Term(IdFieldMapper.NAME, Uid.encodeId(doc.id())); return new Engine.Index(uid, doc, seqNo, primaryTerm, version, versionType, origin, startTime, autoGeneratedIdTimestamp, isRetry); } @@ -751,22 +742,21 @@ private Engine.DeleteResult applyDeleteOperation(long seqNo, long opPrimaryTerm, assert opPrimaryTerm <= this.primaryTerm : "op term [ " + opPrimaryTerm + " ] > shard term [" + this.primaryTerm + "]"; assert versionType.validateVersionForWrites(version); ensureWriteAllowed(origin); - if (indexSettings().isSingleType()) { - // When there is a single type, the unique identifier is only composed of the _id, - // so there is no way to differenciate foo#1 from bar#1. This is especially an issue - // if a user first deletes foo#1 and then indexes bar#1: since we do not encode the - // _type in the uid it might look like we are reindexing the same document, which - // would fail if bar#1 is indexed with a lower version than foo#1 was deleted with. - // In order to work around this issue, we make deletions create types. This way, we - // fail if index and delete operations do not use the same type. - try { - Mapping update = docMapper(type).getMapping(); - if (update != null) { - onMappingUpdate.accept(update); - } - } catch (MapperParsingException | IllegalArgumentException | TypeMissingException e) { - return new Engine.DeleteResult(e, version, seqNo, false); + // When there is a single type, the unique identifier is only composed of the _id, + // so there is no way to differenciate foo#1 from bar#1. This is especially an issue + // if a user first deletes foo#1 and then indexes bar#1: since we do not encode the + // _type in the uid it might look like we are reindexing the same document, which + // would fail if bar#1 is indexed with a lower version than foo#1 was deleted with. + // In order to work around this issue, we make deletions create types. This way, we + // fail if index and delete operations do not use the same type. + // TODO: clean this up when types are gone + try { + Mapping update = docMapper(type).getMapping(); + if (update != null) { + onMappingUpdate.accept(update); } + } catch (MapperParsingException | IllegalArgumentException | TypeMissingException e) { + return new Engine.DeleteResult(e, version, seqNo, false); } final Term uid = extractUidForDelete(type, id); final Engine.Delete delete = prepareDelete(type, id, uid, seqNo, opPrimaryTerm, version, @@ -781,19 +771,10 @@ private static Engine.Delete prepareDelete(String type, String id, Term uid, lon } private Term extractUidForDelete(String type, String id) { - if (indexSettings.getIndexVersionCreated().onOrAfter(Version.V_6_0_0_beta1)) { - assert indexSettings.isSingleType(); - // This is only correct because we create types dynamically on delete operations - // otherwise this could match the same _id from a different type - BytesRef idBytes = Uid.encodeId(id); - return new Term(IdFieldMapper.NAME, idBytes); - } else if (indexSettings.isSingleType()) { - // This is only correct because we create types dynamically on delete operations - // otherwise this could match the same _id from a different type - return new Term(IdFieldMapper.NAME, id); - } else { - return new Term(UidFieldMapper.NAME, Uid.createUidAsBytes(type, id)); - } + // This is only correct because we create types dynamically on delete operations + // otherwise this could match the same _id from a different type + BytesRef idBytes = Uid.encodeId(id); + return new Term(IdFieldMapper.NAME, idBytes); } private Engine.DeleteResult delete(Engine engine, Engine.Delete delete) throws IOException { @@ -1226,7 +1207,7 @@ public Engine.Result applyTranslogOperation(Translog.Operation operation, Engine index.versionType().versionTypeForReplicationAndRecovery(), index.getAutoGeneratedIdTimestamp(), true, origin, source(shardId.getIndexName(), index.type(), index.id(), index.source(), XContentHelper.xContentType(index.source())) - .routing(index.routing()).parent(index.parent()), onMappingUpdate); + .routing(index.routing()), onMappingUpdate); break; case DELETE: final Translog.Delete delete = (Translog.Delete) operation; diff --git a/server/src/main/java/org/elasticsearch/index/translog/Translog.java b/server/src/main/java/org/elasticsearch/index/translog/Translog.java index 7928ccd97b9f8..9726654c386e3 100644 --- a/server/src/main/java/org/elasticsearch/index/translog/Translog.java +++ b/server/src/main/java/org/elasticsearch/index/translog/Translog.java @@ -23,7 +23,6 @@ import org.apache.lucene.index.Term; import org.apache.lucene.store.AlreadyClosedException; import org.elasticsearch.Version; -import org.elasticsearch.action.index.IndexRequest; import org.elasticsearch.common.UUIDs; import org.elasticsearch.common.bytes.BytesArray; import org.elasticsearch.common.bytes.BytesReference; @@ -41,7 +40,6 @@ import org.elasticsearch.index.IndexSettings; import org.elasticsearch.index.VersionType; import org.elasticsearch.index.engine.Engine; -import org.elasticsearch.index.mapper.Uid; import org.elasticsearch.index.seqno.SequenceNumbers; import org.elasticsearch.index.shard.AbstractIndexShardComponent; import org.elasticsearch.index.shard.IndexShardComponent; @@ -939,22 +937,19 @@ public static class Source { public final BytesReference source; public final String routing; - public final String parent; - public Source(BytesReference source, String routing, String parent) { + public Source(BytesReference source, String routing) { this.source = source; this.routing = routing; - this.parent = parent; } } public static class Index implements Operation { - public static final int FORMAT_2_X = 6; // since 2.0-beta1 and 1.1 - public static final int FORMAT_AUTO_GENERATED_IDS = FORMAT_2_X + 1; // since 5.0.0-beta1 - public static final int FORMAT_SEQ_NO = FORMAT_AUTO_GENERATED_IDS + 1; // since 6.0.0 - public static final int SERIALIZATION_FORMAT = FORMAT_SEQ_NO; + public static final int FORMAT_6_0 = 8; // since 6.0.0 + public static final int FORMAT_NO_PARENT = FORMAT_6_0 + 1; // since 7.0 + public static final int SERIALIZATION_FORMAT = FORMAT_NO_PARENT; private final String id; private final long autoGeneratedIdTimestamp; @@ -965,35 +960,23 @@ public static class Index implements Operation { private final VersionType versionType; private final BytesReference source; private final String routing; - private final String parent; private Index(final StreamInput in) throws IOException { final int format = in.readVInt(); // SERIALIZATION_FORMAT - assert format >= FORMAT_2_X : "format was: " + format; + assert format >= FORMAT_6_0 : "format was: " + format; id = in.readString(); type = in.readString(); source = in.readBytesReference(); routing = in.readOptionalString(); - parent = in.readOptionalString(); - this.version = in.readLong(); - if (format < FORMAT_SEQ_NO) { - in.readLong(); // timestamp - in.readLong(); // ttl + if (format < FORMAT_NO_PARENT) { + in.readOptionalString(); // _parent } + this.version = in.readLong(); this.versionType = VersionType.fromValue(in.readByte()); assert versionType.validateVersionForWrites(this.version) : "invalid version for writes: " + this.version; - if (format >= FORMAT_AUTO_GENERATED_IDS) { - this.autoGeneratedIdTimestamp = in.readLong(); - } else { - this.autoGeneratedIdTimestamp = IndexRequest.UNSET_AUTO_GENERATED_TIMESTAMP; - } - if (format >= FORMAT_SEQ_NO) { - seqNo = in.readLong(); - primaryTerm = in.readLong(); - } else { - seqNo = SequenceNumbers.UNASSIGNED_SEQ_NO; - primaryTerm = 0; - } + this.autoGeneratedIdTimestamp = in.readLong(); + seqNo = in.readLong(); + primaryTerm = in.readLong(); } public Index(Engine.Index index, Engine.IndexResult indexResult) { @@ -1001,7 +984,6 @@ public Index(Engine.Index index, Engine.IndexResult indexResult) { this.type = index.type(); this.source = index.source(); this.routing = index.routing(); - this.parent = index.parent(); this.seqNo = indexResult.getSeqNo(); this.primaryTerm = index.primaryTerm(); this.version = indexResult.getVersion(); @@ -1010,11 +992,11 @@ public Index(Engine.Index index, Engine.IndexResult indexResult) { } public Index(String type, String id, long seqNo, byte[] source) { - this(type, id, seqNo, Versions.MATCH_ANY, VersionType.INTERNAL, source, null, null, -1); + this(type, id, seqNo, Versions.MATCH_ANY, VersionType.INTERNAL, source, null, -1); } public Index(String type, String id, long seqNo, long version, VersionType versionType, byte[] source, String routing, - String parent, long autoGeneratedIdTimestamp) { + long autoGeneratedIdTimestamp) { this.type = type; this.id = id; this.source = new BytesArray(source); @@ -1023,7 +1005,6 @@ public Index(String type, String id, long seqNo, long version, VersionType versi this.version = version; this.versionType = versionType; this.routing = routing; - this.parent = parent; this.autoGeneratedIdTimestamp = autoGeneratedIdTimestamp; } @@ -1049,10 +1030,6 @@ public String routing() { return this.routing; } - public String parent() { - return this.parent; - } - public BytesReference source() { return this.source; } @@ -1077,7 +1054,7 @@ public VersionType versionType() { @Override public Source getSource() { - return new Source(source, routing, parent); + return new Source(source, routing); } private void write(final StreamOutput out) throws IOException { @@ -1086,7 +1063,6 @@ private void write(final StreamOutput out) throws IOException { out.writeString(type); out.writeBytesReference(source); out.writeOptionalString(routing); - out.writeOptionalString(parent); out.writeLong(version); out.writeByte(versionType.getValue()); @@ -1119,7 +1095,7 @@ public boolean equals(Object o) { if (routing != null ? !routing.equals(index.routing) : index.routing != null) { return false; } - return !(parent != null ? !parent.equals(index.parent) : index.parent != null); + return true; } @@ -1133,7 +1109,6 @@ public int hashCode() { result = 31 * result + versionType.hashCode(); result = 31 * result + source.hashCode(); result = 31 * result + (routing != null ? routing.hashCode() : 0); - result = 31 * result + (parent != null ? parent.hashCode() : 0); result = 31 * result + Long.hashCode(autoGeneratedIdTimestamp); return result; } @@ -1156,10 +1131,8 @@ public long getAutoGeneratedIdTimestamp() { public static class Delete implements Operation { - public static final int FORMAT_5_0 = 2; // 5.0 - 5.5 - private static final int FORMAT_SINGLE_TYPE = FORMAT_5_0 + 1; // 5.5 - 6.0 - private static final int FORMAT_SEQ_NO = FORMAT_SINGLE_TYPE + 1; // 6.0 - * - public static final int SERIALIZATION_FORMAT = FORMAT_SEQ_NO; + private static final int FORMAT_6_0 = 4; // 6.0 - * + public static final int SERIALIZATION_FORMAT = FORMAT_6_0; private final String type, id; private final Term uid; @@ -1170,33 +1143,15 @@ public static class Delete implements Operation { private Delete(final StreamInput in) throws IOException { final int format = in.readVInt();// SERIALIZATION_FORMAT - assert format >= FORMAT_5_0 : "format was: " + format; - if (format >= FORMAT_SINGLE_TYPE) { - type = in.readString(); - id = in.readString(); - if (format >= FORMAT_SEQ_NO) { - uid = new Term(in.readString(), in.readBytesRef()); - } else { - uid = new Term(in.readString(), in.readString()); - } - } else { - uid = new Term(in.readString(), in.readString()); - // the uid was constructed from the type and id so we can - // extract them back - Uid uidObject = Uid.createUid(uid.text()); - type = uidObject.type(); - id = uidObject.id(); - } + assert format >= FORMAT_6_0 : "format was: " + format; + type = in.readString(); + id = in.readString(); + uid = new Term(in.readString(), in.readBytesRef()); this.version = in.readLong(); this.versionType = VersionType.fromValue(in.readByte()); assert versionType.validateVersionForWrites(this.version); - if (format >= FORMAT_SEQ_NO) { - seqNo = in.readLong(); - primaryTerm = in.readLong(); - } else { - seqNo = SequenceNumbers.UNASSIGNED_SEQ_NO; - primaryTerm = 0; - } + seqNo = in.readLong(); + primaryTerm = in.readLong(); } public Delete(Engine.Delete delete, Engine.DeleteResult deleteResult) { diff --git a/server/src/main/java/org/elasticsearch/indices/IndicesModule.java b/server/src/main/java/org/elasticsearch/indices/IndicesModule.java index 4e1456548ab88..92faa0a71fda6 100644 --- a/server/src/main/java/org/elasticsearch/indices/IndicesModule.java +++ b/server/src/main/java/org/elasticsearch/indices/IndicesModule.java @@ -42,14 +42,12 @@ import org.elasticsearch.index.mapper.MetadataFieldMapper; import org.elasticsearch.index.mapper.NumberFieldMapper; import org.elasticsearch.index.mapper.ObjectMapper; -import org.elasticsearch.index.mapper.ParentFieldMapper; import org.elasticsearch.index.mapper.RangeFieldMapper; import org.elasticsearch.index.mapper.RoutingFieldMapper; import org.elasticsearch.index.mapper.SeqNoFieldMapper; import org.elasticsearch.index.mapper.SourceFieldMapper; import org.elasticsearch.index.mapper.TextFieldMapper; import org.elasticsearch.index.mapper.TypeFieldMapper; -import org.elasticsearch.index.mapper.UidFieldMapper; import org.elasticsearch.index.mapper.VersionFieldMapper; import org.elasticsearch.index.seqno.GlobalCheckpointSyncAction; import org.elasticsearch.index.shard.PrimaryReplicaSyncer; @@ -132,15 +130,13 @@ private static Map initBuiltInMetadataMa Map builtInMetadataMappers; // Use a LinkedHashMap for metadataMappers because iteration order matters builtInMetadataMappers = new LinkedHashMap<>(); - // UID first so it will be the first stored field to load (so will benefit from "fields: []" early termination - builtInMetadataMappers.put(UidFieldMapper.NAME, new UidFieldMapper.TypeParser()); + // ID first so it will be the first stored field to load (so will benefit from "fields: []" early termination builtInMetadataMappers.put(IdFieldMapper.NAME, new IdFieldMapper.TypeParser()); builtInMetadataMappers.put(RoutingFieldMapper.NAME, new RoutingFieldMapper.TypeParser()); builtInMetadataMappers.put(IndexFieldMapper.NAME, new IndexFieldMapper.TypeParser()); builtInMetadataMappers.put(SourceFieldMapper.NAME, new SourceFieldMapper.TypeParser()); builtInMetadataMappers.put(TypeFieldMapper.NAME, new TypeFieldMapper.TypeParser()); builtInMetadataMappers.put(VersionFieldMapper.NAME, new VersionFieldMapper.TypeParser()); - builtInMetadataMappers.put(ParentFieldMapper.NAME, new ParentFieldMapper.TypeParser()); builtInMetadataMappers.put(SeqNoFieldMapper.NAME, new SeqNoFieldMapper.TypeParser()); //_field_names must be added last so that it has a chance to see all the other mappers builtInMetadataMappers.put(FieldNamesFieldMapper.NAME, new FieldNamesFieldMapper.TypeParser()); diff --git a/server/src/main/java/org/elasticsearch/ingest/IngestDocument.java b/server/src/main/java/org/elasticsearch/ingest/IngestDocument.java index 89e945780c8f5..e31a97dc2c6ce 100644 --- a/server/src/main/java/org/elasticsearch/ingest/IngestDocument.java +++ b/server/src/main/java/org/elasticsearch/ingest/IngestDocument.java @@ -23,7 +23,6 @@ import org.elasticsearch.index.VersionType; import org.elasticsearch.index.mapper.IdFieldMapper; import org.elasticsearch.index.mapper.IndexFieldMapper; -import org.elasticsearch.index.mapper.ParentFieldMapper; import org.elasticsearch.index.mapper.RoutingFieldMapper; import org.elasticsearch.index.mapper.SourceFieldMapper; import org.elasticsearch.index.mapper.TypeFieldMapper; @@ -56,7 +55,7 @@ public final class IngestDocument { private final Map sourceAndMetadata; private final Map ingestMetadata; - public IngestDocument(String index, String type, String id, String routing, String parent, + public IngestDocument(String index, String type, String id, String routing, Long version, VersionType versionType, Map source) { this.sourceAndMetadata = new HashMap<>(); this.sourceAndMetadata.putAll(source); @@ -66,9 +65,6 @@ public IngestDocument(String index, String type, String id, String routing, Stri if (routing != null) { this.sourceAndMetadata.put(MetaData.ROUTING.getFieldName(), routing); } - if (parent != null) { - this.sourceAndMetadata.put(MetaData.PARENT.getFieldName(), parent); - } if (version != null) { sourceAndMetadata.put(MetaData.VERSION.getFieldName(), version); } @@ -656,7 +652,6 @@ public enum MetaData { TYPE(TypeFieldMapper.NAME), ID(IdFieldMapper.NAME), ROUTING(RoutingFieldMapper.NAME), - PARENT(ParentFieldMapper.NAME), VERSION(VersionFieldMapper.NAME), VERSION_TYPE("_version_type"); diff --git a/server/src/main/java/org/elasticsearch/ingest/PipelineExecutionService.java b/server/src/main/java/org/elasticsearch/ingest/PipelineExecutionService.java index 31bedd4ee1777..43f80f5ae711a 100644 --- a/server/src/main/java/org/elasticsearch/ingest/PipelineExecutionService.java +++ b/server/src/main/java/org/elasticsearch/ingest/PipelineExecutionService.java @@ -164,11 +164,10 @@ private void innerExecute(IndexRequest indexRequest, Pipeline pipeline) throws E String type = indexRequest.type(); String id = indexRequest.id(); String routing = indexRequest.routing(); - String parent = indexRequest.parent(); Long version = indexRequest.version(); VersionType versionType = indexRequest.versionType(); Map sourceAsMap = indexRequest.sourceAsMap(); - IngestDocument ingestDocument = new IngestDocument(index, type, id, routing, parent, version, versionType, sourceAsMap); + IngestDocument ingestDocument = new IngestDocument(index, type, id, routing, version, versionType, sourceAsMap); pipeline.execute(ingestDocument); Map metadataMap = ingestDocument.extractMetadata(); @@ -178,7 +177,6 @@ private void innerExecute(IndexRequest indexRequest, Pipeline pipeline) throws E indexRequest.type((String) metadataMap.get(IngestDocument.MetaData.TYPE)); indexRequest.id((String) metadataMap.get(IngestDocument.MetaData.ID)); indexRequest.routing((String) metadataMap.get(IngestDocument.MetaData.ROUTING)); - indexRequest.parent((String) metadataMap.get(IngestDocument.MetaData.PARENT)); indexRequest.version(((Number) metadataMap.get(IngestDocument.MetaData.VERSION)).longValue()); if (metadataMap.get(IngestDocument.MetaData.VERSION_TYPE) != null) { indexRequest.versionType(VersionType.fromString((String) metadataMap.get(IngestDocument.MetaData.VERSION_TYPE))); diff --git a/server/src/main/java/org/elasticsearch/rest/action/document/RestDeleteAction.java b/server/src/main/java/org/elasticsearch/rest/action/document/RestDeleteAction.java index 0db997c1dae5c..f6b0878c03802 100644 --- a/server/src/main/java/org/elasticsearch/rest/action/document/RestDeleteAction.java +++ b/server/src/main/java/org/elasticsearch/rest/action/document/RestDeleteAction.java @@ -49,7 +49,6 @@ public String getName() { public RestChannelConsumer prepareRequest(final RestRequest request, final NodeClient client) throws IOException { DeleteRequest deleteRequest = new DeleteRequest(request.param("index"), request.param("type"), request.param("id")); deleteRequest.routing(request.param("routing")); - deleteRequest.parent(request.param("parent")); deleteRequest.timeout(request.paramAsTime("timeout", DeleteRequest.DEFAULT_TIMEOUT)); deleteRequest.setRefreshPolicy(request.param("refresh")); deleteRequest.version(RestActions.parseVersion(request)); diff --git a/server/src/main/java/org/elasticsearch/rest/action/document/RestGetAction.java b/server/src/main/java/org/elasticsearch/rest/action/document/RestGetAction.java index 8f86d9ae600a9..e1d3f7557783c 100644 --- a/server/src/main/java/org/elasticsearch/rest/action/document/RestGetAction.java +++ b/server/src/main/java/org/elasticsearch/rest/action/document/RestGetAction.java @@ -58,7 +58,6 @@ public RestChannelConsumer prepareRequest(final RestRequest request, final NodeC final GetRequest getRequest = new GetRequest(request.param("index"), request.param("type"), request.param("id")); getRequest.refresh(request.paramAsBoolean("refresh", getRequest.refresh())); getRequest.routing(request.param("routing")); - getRequest.parent(request.param("parent")); getRequest.preference(request.param("preference")); getRequest.realtime(request.paramAsBoolean("realtime", getRequest.realtime())); if (request.param("fields") != null) { diff --git a/server/src/main/java/org/elasticsearch/rest/action/document/RestGetSourceAction.java b/server/src/main/java/org/elasticsearch/rest/action/document/RestGetSourceAction.java index 9e61885cab252..39ff9ff86665a 100644 --- a/server/src/main/java/org/elasticsearch/rest/action/document/RestGetSourceAction.java +++ b/server/src/main/java/org/elasticsearch/rest/action/document/RestGetSourceAction.java @@ -64,7 +64,6 @@ public RestChannelConsumer prepareRequest(final RestRequest request, final NodeC final GetRequest getRequest = new GetRequest(request.param("index"), request.param("type"), request.param("id")); getRequest.refresh(request.paramAsBoolean("refresh", getRequest.refresh())); getRequest.routing(request.param("routing")); - getRequest.parent(request.param("parent")); getRequest.preference(request.param("preference")); getRequest.realtime(request.paramAsBoolean("realtime", getRequest.realtime())); diff --git a/server/src/main/java/org/elasticsearch/rest/action/document/RestIndexAction.java b/server/src/main/java/org/elasticsearch/rest/action/document/RestIndexAction.java index b29df7a281a86..5cc514f744098 100644 --- a/server/src/main/java/org/elasticsearch/rest/action/document/RestIndexAction.java +++ b/server/src/main/java/org/elasticsearch/rest/action/document/RestIndexAction.java @@ -80,7 +80,6 @@ void validateOpType(String opType) { public RestChannelConsumer prepareRequest(final RestRequest request, final NodeClient client) throws IOException { IndexRequest indexRequest = new IndexRequest(request.param("index"), request.param("type"), request.param("id")); indexRequest.routing(request.param("routing")); - indexRequest.parent(request.param("parent")); indexRequest.setPipeline(request.param("pipeline")); indexRequest.source(request.requiredContent(), request.getXContentType()); indexRequest.timeout(request.paramAsTime("timeout", IndexRequest.DEFAULT_TIMEOUT)); diff --git a/server/src/main/java/org/elasticsearch/rest/action/document/RestTermVectorsAction.java b/server/src/main/java/org/elasticsearch/rest/action/document/RestTermVectorsAction.java index a12b7ce16a724..2a93b5d390c19 100644 --- a/server/src/main/java/org/elasticsearch/rest/action/document/RestTermVectorsAction.java +++ b/server/src/main/java/org/elasticsearch/rest/action/document/RestTermVectorsAction.java @@ -85,7 +85,6 @@ public static void readURIParameters(TermVectorsRequest termVectorsRequest, Rest termVectorsRequest.realtime(request.paramAsBoolean("realtime", termVectorsRequest.realtime())); termVectorsRequest.version(RestActions.parseVersion(request, termVectorsRequest.version())); termVectorsRequest.versionType(VersionType.fromString(request.param("version_type"), termVectorsRequest.versionType())); - termVectorsRequest.parent(request.param("parent")); termVectorsRequest.preference(request.param("preference")); termVectorsRequest.termStatistics(request.paramAsBoolean("termStatistics", termVectorsRequest.termStatistics())); termVectorsRequest.termStatistics(request.paramAsBoolean("term_statistics", termVectorsRequest.termStatistics())); diff --git a/server/src/main/java/org/elasticsearch/rest/action/document/RestUpdateAction.java b/server/src/main/java/org/elasticsearch/rest/action/document/RestUpdateAction.java index 3204ce68abbc1..cec8101ad9bf8 100644 --- a/server/src/main/java/org/elasticsearch/rest/action/document/RestUpdateAction.java +++ b/server/src/main/java/org/elasticsearch/rest/action/document/RestUpdateAction.java @@ -57,7 +57,6 @@ public String getName() { public RestChannelConsumer prepareRequest(final RestRequest request, final NodeClient client) throws IOException { UpdateRequest updateRequest = new UpdateRequest(request.param("index"), request.param("type"), request.param("id")); updateRequest.routing(request.param("routing")); - updateRequest.parent(request.param("parent")); updateRequest.timeout(request.paramAsTime("timeout", updateRequest.timeout())); updateRequest.setRefreshPolicy(request.param("refresh")); String waitForActiveShards = request.param("wait_for_active_shards"); @@ -88,14 +87,12 @@ public RestChannelConsumer prepareRequest(final RestRequest request, final NodeC IndexRequest upsertRequest = updateRequest.upsertRequest(); if (upsertRequest != null) { upsertRequest.routing(request.param("routing")); - upsertRequest.parent(request.param("parent")); upsertRequest.version(RestActions.parseVersion(request)); upsertRequest.versionType(VersionType.fromString(request.param("version_type"), upsertRequest.versionType())); } IndexRequest doc = updateRequest.doc(); if (doc != null) { doc.routing(request.param("routing")); - doc.parent(request.param("parent")); // order is important, set it after routing, so it will set the routing doc.version(RestActions.parseVersion(request)); doc.versionType(VersionType.fromString(request.param("version_type"), doc.versionType())); } diff --git a/server/src/main/java/org/elasticsearch/search/SearchModule.java b/server/src/main/java/org/elasticsearch/search/SearchModule.java index 323cca7961737..8b61742845de1 100644 --- a/server/src/main/java/org/elasticsearch/search/SearchModule.java +++ b/server/src/main/java/org/elasticsearch/search/SearchModule.java @@ -228,7 +228,6 @@ import org.elasticsearch.search.fetch.subphase.ExplainFetchSubPhase; import org.elasticsearch.search.fetch.subphase.FetchSourceSubPhase; import org.elasticsearch.search.fetch.subphase.MatchedQueriesFetchSubPhase; -import org.elasticsearch.search.fetch.subphase.ParentFieldSubFetchPhase; import org.elasticsearch.search.fetch.subphase.ScriptFieldsFetchSubPhase; import org.elasticsearch.search.fetch.subphase.VersionFetchSubPhase; import org.elasticsearch.search.fetch.subphase.highlight.FastVectorHighlighter; @@ -688,7 +687,6 @@ private void registerFetchSubPhases(List plugins) { registerFetchSubPhase(new VersionFetchSubPhase()); registerFetchSubPhase(new MatchedQueriesFetchSubPhase()); registerFetchSubPhase(new HighlightPhase(settings, highlighters)); - registerFetchSubPhase(new ParentFieldSubFetchPhase()); FetchPhaseConstructionContext context = new FetchPhaseConstructionContext(highlighters); registerFromPlugin(plugins, p -> p.getFetchSubPhases(context), this::registerFetchSubPhase); diff --git a/server/src/main/java/org/elasticsearch/search/fetch/subphase/ParentFieldSubFetchPhase.java b/server/src/main/java/org/elasticsearch/search/fetch/subphase/ParentFieldSubFetchPhase.java deleted file mode 100644 index 6015e3c90211d..0000000000000 --- a/server/src/main/java/org/elasticsearch/search/fetch/subphase/ParentFieldSubFetchPhase.java +++ /dev/null @@ -1,111 +0,0 @@ -/* - * Licensed to Elasticsearch under one or more contributor - * license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright - * ownership. Elasticsearch licenses this file to you under - * the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package org.elasticsearch.search.fetch.subphase; - -import org.apache.lucene.index.LeafReader; -import org.apache.lucene.index.LeafReaderContext; -import org.apache.lucene.index.ReaderUtil; -import org.apache.lucene.index.SortedDocValues; -import org.apache.lucene.util.BytesRef; -import org.elasticsearch.ExceptionsHelper; -import org.elasticsearch.common.document.DocumentField; -import org.elasticsearch.index.mapper.MapperService; -import org.elasticsearch.index.mapper.ParentFieldMapper; -import org.elasticsearch.search.SearchHit; -import org.elasticsearch.search.fetch.FetchSubPhase; -import org.elasticsearch.search.internal.SearchContext; - -import java.io.IOException; -import java.util.Arrays; -import java.util.Collections; -import java.util.Comparator; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Map; -import java.util.Set; - -public final class ParentFieldSubFetchPhase implements FetchSubPhase { - @Override - public void hitsExecute(SearchContext context, SearchHit[] hits) throws IOException { - if (context.storedFieldsContext() != null && context.storedFieldsContext().fetchFields() == false) { - return ; - } - - hits = hits.clone(); // don't modify the incoming hits - Arrays.sort(hits, Comparator.comparingInt(SearchHit::docId)); - - MapperService mapperService = context.mapperService(); - Set parentFields = new HashSet<>(); - for (SearchHit hit : hits) { - ParentFieldMapper parentFieldMapper = mapperService.documentMapper(hit.getType()).parentFieldMapper(); - if (parentFieldMapper.active()) { - parentFields.add(parentFieldMapper.name()); - } - } - - int lastReaderId = -1; - Map docValuesMap = new HashMap<>(); - for (SearchHit hit : hits) { - ParentFieldMapper parentFieldMapper = mapperService.documentMapper(hit.getType()).parentFieldMapper(); - if (parentFieldMapper.active() == false) { - continue; - } - int readerId = ReaderUtil.subIndex(hit.docId(), context.searcher().getIndexReader().leaves()); - LeafReaderContext subReaderContext = context.searcher().getIndexReader().leaves().get(readerId); - if (lastReaderId != readerId) { - docValuesMap.clear(); - for (String field : parentFields) { - docValuesMap.put(field, subReaderContext.reader().getSortedDocValues(field)); - } - lastReaderId = readerId; - } - int docId = hit.docId() - subReaderContext.docBase; - SortedDocValues values = docValuesMap.get(parentFieldMapper.name()); - if (values != null && values.advanceExact(docId)) { - BytesRef binaryValue = values.binaryValue(); - String value = binaryValue.length > 0 ? binaryValue.utf8ToString() : null; - if (value == null) { - // hit has no _parent field. Can happen for nested inner hits if parent hit is a p/c document. - continue; - } - Map fields = hit.fieldsOrNull(); - if (fields == null) { - fields = new HashMap<>(); - hit.fields(fields); - } - fields.put(ParentFieldMapper.NAME, new DocumentField(ParentFieldMapper.NAME, Collections.singletonList(value))); - } - } - } - - public static String getParentId(ParentFieldMapper fieldMapper, LeafReader reader, int docId) { - try { - SortedDocValues docValues = reader.getSortedDocValues(fieldMapper.name()); - if (docValues == null || docValues.advanceExact(docId) == false) { - // hit has no _parent field. - return null; - } - BytesRef parentId = docValues.binaryValue(); - return parentId.length > 0 ? parentId.utf8ToString() : null; - } catch (IOException e) { - throw ExceptionsHelper.convertToElastic(e); - } - } -} diff --git a/server/src/main/java/org/elasticsearch/search/lookup/LeafFieldsLookup.java b/server/src/main/java/org/elasticsearch/search/lookup/LeafFieldsLookup.java index 4a104797d7c1b..2e04443f9e526 100644 --- a/server/src/main/java/org/elasticsearch/search/lookup/LeafFieldsLookup.java +++ b/server/src/main/java/org/elasticsearch/search/lookup/LeafFieldsLookup.java @@ -22,10 +22,8 @@ import org.elasticsearch.ElasticsearchParseException; import org.elasticsearch.common.Nullable; import org.elasticsearch.index.fieldvisitor.SingleFieldsVisitor; -import org.elasticsearch.index.mapper.IdFieldMapper; import org.elasticsearch.index.mapper.MappedFieldType; import org.elasticsearch.index.mapper.MapperService; -import org.elasticsearch.index.mapper.UidFieldMapper; import java.io.IOException; import java.util.Arrays; @@ -40,7 +38,6 @@ public class LeafFieldsLookup implements Map { private final MapperService mapperService; - private final boolean singleType; @Nullable private final String[] types; @@ -55,7 +52,6 @@ public class LeafFieldsLookup implements Map { LeafFieldsLookup(MapperService mapperService, @Nullable String[] types, LeafReader reader) { this.mapperService = mapperService; - this.singleType = mapperService.getIndexSettings().isSingleType(); this.types = types; this.reader = reader; this.fieldVisitor = new SingleFieldsVisitor(null); @@ -147,9 +143,6 @@ private FieldLookup loadFieldData(String name) { } if (data.fields() == null) { String fieldName = data.fieldType().name(); - if (singleType && UidFieldMapper.NAME.equals(fieldName)) { - fieldName = IdFieldMapper.NAME; - } fieldVisitor.reset(fieldName); try { reader.document(docId, fieldVisitor); diff --git a/server/src/main/java/org/elasticsearch/search/slice/SliceBuilder.java b/server/src/main/java/org/elasticsearch/search/slice/SliceBuilder.java index 71709475481b7..aabf0c3fd0c69 100644 --- a/server/src/main/java/org/elasticsearch/search/slice/SliceBuilder.java +++ b/server/src/main/java/org/elasticsearch/search/slice/SliceBuilder.java @@ -38,7 +38,6 @@ import org.elasticsearch.index.fielddata.IndexNumericFieldData; import org.elasticsearch.index.mapper.IdFieldMapper; import org.elasticsearch.index.mapper.MappedFieldType; -import org.elasticsearch.index.mapper.UidFieldMapper; import org.elasticsearch.index.query.QueryShardContext; import java.io.IOException; @@ -98,7 +97,7 @@ public SliceBuilder(String field, int id, int max) { public SliceBuilder(StreamInput in) throws IOException { String field = in.readString(); - if (UidFieldMapper.NAME.equals(field) && in.getVersion().before(Version.V_6_3_0)) { + if ("_uid".equals(field) && in.getVersion().before(Version.V_6_3_0)) { // This is safe because _id and _uid are handled the same way in #toFilter field = IdFieldMapper.NAME; } @@ -110,7 +109,7 @@ public SliceBuilder(StreamInput in) throws IOException { @Override public void writeTo(StreamOutput out) throws IOException { if (IdFieldMapper.NAME.equals(field) && out.getVersion().before(Version.V_6_3_0)) { - out.writeString(UidFieldMapper.NAME); + out.writeString("_uid"); } else { out.writeString(field); } @@ -212,19 +211,15 @@ public Query toFilter(QueryShardContext context, int shardId, int numShards) { String field = this.field; boolean useTermQuery = false; - if (UidFieldMapper.NAME.equals(field)) { - if (context.getIndexSettings().isSingleType()) { - // on new indices, the _id acts as a _uid - field = IdFieldMapper.NAME; - DEPRECATION_LOG.deprecated("Computing slices on the [_uid] field is deprecated for 6.x indices, use [_id] instead"); + if ("_uid".equals(field)) { + // on new indices, the _id acts as a _uid + field = IdFieldMapper.NAME; + if (context.getIndexSettings().getIndexVersionCreated().onOrAfter(Version.V_7_0_0_alpha1)) { + throw new IllegalArgumentException("Computing slices on the [_uid] field is illegal for 7.x indices, use [_id] instead"); } + DEPRECATION_LOG.deprecated("Computing slices on the [_uid] field is deprecated for 6.x indices, use [_id] instead"); useTermQuery = true; } else if (IdFieldMapper.NAME.equals(field)) { - if (context.getIndexSettings().isSingleType() == false) { - // on old indices, we need _uid. We maintain this so that users - // can use _id to slice even if they still have 5.x indices. - field = UidFieldMapper.NAME; - } useTermQuery = true; } else if (type.hasDocValues() == false) { throw new IllegalArgumentException("cannot load numeric doc values on " + field); diff --git a/server/src/test/java/org/elasticsearch/action/bulk/BulkWithUpdatesIT.java b/server/src/test/java/org/elasticsearch/action/bulk/BulkWithUpdatesIT.java index 6656faf1e194e..c4857b7b09484 100644 --- a/server/src/test/java/org/elasticsearch/action/bulk/BulkWithUpdatesIT.java +++ b/server/src/test/java/org/elasticsearch/action/bulk/BulkWithUpdatesIT.java @@ -450,76 +450,6 @@ public void testBulkIndexingWhileInitializing() throws Exception { assertHitCount(countResponse, numDocs); } - - - /* - * Test for https://github.com/elastic/elasticsearch/issues/8365 - */ - public void testBulkUpdateChildMissingParentRouting() throws Exception { - assertAcked(prepareCreate("test") - .setSettings(Settings.builder().put("index.version.created", Version.V_5_6_0.id)) // allows for multiple types - .addMapping("parent", "{\"parent\":{}}", XContentType.JSON) - .addMapping("child", "{\"child\": {\"_parent\": {\"type\": \"parent\"}}}", XContentType.JSON)); - ensureGreen(); - - BulkRequestBuilder builder = client().prepareBulk(); - - byte[] addParent = ( - "{" + - " \"index\" : {" + - " \"_index\" : \"test\"," + - " \"_type\" : \"parent\"," + - " \"_id\" : \"parent1\"" + - " }" + - "}" + - "\n" + - "{" + - " \"field1\" : \"value1\"" + - "}" + - "\n").getBytes(StandardCharsets.UTF_8); - - byte[] addChildOK = ( - "{" + - " \"index\" : {" + - " \"_index\" : \"test\"," + - " \"_type\" : \"child\"," + - " \"_id\" : \"child1\"," + - " \"parent\" : \"parent1\"" + - " }" + - "}" + - "\n" + - "{" + - " \"field1\" : \"value1\"" + - "}" + - "\n").getBytes(StandardCharsets.UTF_8); - - byte[] addChildMissingRouting = ( - "{" + - " \"index\" : {" + - " \"_index\" : \"test\"," + - " \"_type\" : \"child\"," + - " \"_id\" : \"child1\"" + - " }" + - "}" + - "\n" + - "{" + - " \"field1\" : \"value1\"" + - "}" + - "\n").getBytes(StandardCharsets.UTF_8); - - builder.add(addParent, 0, addParent.length, XContentType.JSON); - builder.add(addChildOK, 0, addChildOK.length, XContentType.JSON); - builder.add(addChildMissingRouting, 0, addChildMissingRouting.length, XContentType.JSON); - builder.add(addChildOK, 0, addChildOK.length, XContentType.JSON); - - BulkResponse bulkResponse = builder.get(); - assertThat(bulkResponse.getItems().length, equalTo(4)); - assertThat(bulkResponse.getItems()[0].isFailed(), equalTo(false)); - assertThat(bulkResponse.getItems()[1].isFailed(), equalTo(false)); - assertThat(bulkResponse.getItems()[2].isFailed(), equalTo(true)); - assertThat(bulkResponse.getItems()[3].isFailed(), equalTo(false)); - } - public void testFailingVersionedUpdatedOnBulk() throws Exception { createIndex("test"); index("test", "type", "1", "field", "1"); diff --git a/server/src/test/java/org/elasticsearch/action/get/MultiGetRequestTests.java b/server/src/test/java/org/elasticsearch/action/get/MultiGetRequestTests.java index 8834ee203fba0..f1de226704e53 100644 --- a/server/src/test/java/org/elasticsearch/action/get/MultiGetRequestTests.java +++ b/server/src/test/java/org/elasticsearch/action/get/MultiGetRequestTests.java @@ -182,9 +182,6 @@ private MultiGetRequest createTestInstance() { if (randomBoolean()) { item.routing(randomAlphaOfLength(4)); } - if (randomBoolean()) { - item.parent(randomAlphaOfLength(4)); - } request.add(item); } return request; diff --git a/server/src/test/java/org/elasticsearch/action/ingest/SimulatePipelineRequestParsingTests.java b/server/src/test/java/org/elasticsearch/action/ingest/SimulatePipelineRequestParsingTests.java index 00815807eee8a..b0c6d717bb38e 100644 --- a/server/src/test/java/org/elasticsearch/action/ingest/SimulatePipelineRequestParsingTests.java +++ b/server/src/test/java/org/elasticsearch/action/ingest/SimulatePipelineRequestParsingTests.java @@ -42,7 +42,6 @@ import static org.elasticsearch.action.ingest.SimulatePipelineRequest.SIMULATED_PIPELINE_ID; import static org.elasticsearch.ingest.IngestDocument.MetaData.ID; import static org.elasticsearch.ingest.IngestDocument.MetaData.INDEX; -import static org.elasticsearch.ingest.IngestDocument.MetaData.PARENT; import static org.elasticsearch.ingest.IngestDocument.MetaData.ROUTING; import static org.elasticsearch.ingest.IngestDocument.MetaData.TYPE; import static org.elasticsearch.ingest.IngestDocument.MetaData.VERSION; @@ -123,7 +122,7 @@ public void testParseWithProvidedPipeline() throws Exception { for (int i = 0; i < numDocs; i++) { Map doc = new HashMap<>(); Map expectedDoc = new HashMap<>(); - List fields = Arrays.asList(INDEX, TYPE, ID, ROUTING, PARENT, VERSION, VERSION_TYPE); + List fields = Arrays.asList(INDEX, TYPE, ID, ROUTING, VERSION, VERSION_TYPE); for(IngestDocument.MetaData field : fields) { if (field == VERSION) { Long value = randomLong(); @@ -194,7 +193,6 @@ public void testParseWithProvidedPipeline() throws Exception { assertThat(metadataMap.get(TYPE), equalTo(expectedDocument.get(TYPE.getFieldName()))); assertThat(metadataMap.get(ID), equalTo(expectedDocument.get(ID.getFieldName()))); assertThat(metadataMap.get(ROUTING), equalTo(expectedDocument.get(ROUTING.getFieldName()))); - assertThat(metadataMap.get(PARENT), equalTo(expectedDocument.get(PARENT.getFieldName()))); assertThat(metadataMap.get(VERSION), equalTo(expectedDocument.get(VERSION.getFieldName()))); assertThat(metadataMap.get(VERSION_TYPE), equalTo(expectedDocument.get(VERSION_TYPE.getFieldName()))); assertThat(ingestDocument.getSourceAndMetadata(), equalTo(expectedDocument.get(Fields.SOURCE))); diff --git a/server/src/test/java/org/elasticsearch/action/resync/ResyncReplicationRequestTests.java b/server/src/test/java/org/elasticsearch/action/resync/ResyncReplicationRequestTests.java index f1f9fec34de59..8c834770b08d7 100644 --- a/server/src/test/java/org/elasticsearch/action/resync/ResyncReplicationRequestTests.java +++ b/server/src/test/java/org/elasticsearch/action/resync/ResyncReplicationRequestTests.java @@ -37,7 +37,7 @@ public class ResyncReplicationRequestTests extends ESTestCase { public void testSerialization() throws IOException { final byte[] bytes = "{}".getBytes(Charset.forName("UTF-8")); - final Translog.Index index = new Translog.Index("type", "id", 0, Versions.MATCH_ANY, VersionType.INTERNAL, bytes, null, null, -1); + final Translog.Index index = new Translog.Index("type", "id", 0, Versions.MATCH_ANY, VersionType.INTERNAL, bytes, null, -1); final ShardId shardId = new ShardId(new Index("index", "uuid"), 0); final ResyncReplicationRequest before = new ResyncReplicationRequest(shardId, new Translog.Operation[]{index}); diff --git a/server/src/test/java/org/elasticsearch/action/termvectors/TermVectorsUnitTests.java b/server/src/test/java/org/elasticsearch/action/termvectors/TermVectorsUnitTests.java index d110d12e4fc39..a16a8f628f98b 100644 --- a/server/src/test/java/org/elasticsearch/action/termvectors/TermVectorsUnitTests.java +++ b/server/src/test/java/org/elasticsearch/action/termvectors/TermVectorsUnitTests.java @@ -237,8 +237,6 @@ public void testStreamRequest() throws IOException { request.payloads(random().nextBoolean()); request.positions(random().nextBoolean()); request.termStatistics(random().nextBoolean()); - String parent = random().nextBoolean() ? "someParent" : null; - request.parent(parent); String pref = random().nextBoolean() ? "somePreference" : null; request.preference(pref); request.doc(new BytesArray("{}"), randomBoolean(), XContentType.JSON); @@ -282,7 +280,6 @@ public void testStreamRequestWithXContentBwc() throws IOException { assertTrue(request.payloads()); assertFalse(request.positions()); assertTrue(request.termStatistics()); - assertNull(request.parent()); assertEquals("somePreference", request.preference()); assertEquals("{}", request.doc().utf8ToString()); assertEquals(XContentType.JSON, request.xContentType()); diff --git a/server/src/test/java/org/elasticsearch/action/update/UpdateRequestTests.java b/server/src/test/java/org/elasticsearch/action/update/UpdateRequestTests.java index ddf4f32c2c2b4..de97cf7b7e9e1 100644 --- a/server/src/test/java/org/elasticsearch/action/update/UpdateRequestTests.java +++ b/server/src/test/java/org/elasticsearch/action/update/UpdateRequestTests.java @@ -512,27 +512,23 @@ public void testToValidateUpsertRequestWithVersion() { assertThat(updateRequest.validate().validationErrors(), contains("can't provide version in upsert request")); } - public void testParentAndRoutingExtraction() throws Exception { + public void testRoutingExtraction() throws Exception { GetResult getResult = new GetResult("test", "type", "1", 0, false, null, null); IndexRequest indexRequest = new IndexRequest("test", "type", "1"); // There is no routing and parent because the document doesn't exist assertNull(UpdateHelper.calculateRouting(getResult, null)); - assertNull(UpdateHelper.calculateParent(getResult, null)); // There is no routing and parent the indexing request assertNull(UpdateHelper.calculateRouting(getResult, indexRequest)); - assertNull(UpdateHelper.calculateParent(getResult, indexRequest)); // Doc exists but has no source or fields getResult = new GetResult("test", "type", "1", 0, true, null, null); // There is no routing and parent on either request assertNull(UpdateHelper.calculateRouting(getResult, indexRequest)); - assertNull(UpdateHelper.calculateParent(getResult, indexRequest)); Map fields = new HashMap<>(); - fields.put("_parent", new DocumentField("_parent", Collections.singletonList("parent1"))); fields.put("_routing", new DocumentField("_routing", Collections.singletonList("routing1"))); // Doc exists and has the parent and routing fields @@ -540,14 +536,6 @@ public void testParentAndRoutingExtraction() throws Exception { // Use the get result parent and routing assertThat(UpdateHelper.calculateRouting(getResult, indexRequest), equalTo("routing1")); - assertThat(UpdateHelper.calculateParent(getResult, indexRequest), equalTo("parent1")); - - // Index request has overriding parent and routing values - indexRequest = new IndexRequest("test", "type", "1").parent("parent2").routing("routing2"); - - // Use the request's parent and routing - assertThat(UpdateHelper.calculateRouting(getResult, indexRequest), equalTo("routing2")); - assertThat(UpdateHelper.calculateParent(getResult, indexRequest), equalTo("parent2")); } @SuppressWarnings("deprecated") // VersionType.FORCE is deprecated diff --git a/server/src/test/java/org/elasticsearch/cluster/metadata/IndexCreationTaskTests.java b/server/src/test/java/org/elasticsearch/cluster/metadata/IndexCreationTaskTests.java index 307b9716fa3f9..211ae48d04355 100644 --- a/server/src/test/java/org/elasticsearch/cluster/metadata/IndexCreationTaskTests.java +++ b/server/src/test/java/org/elasticsearch/cluster/metadata/IndexCreationTaskTests.java @@ -47,7 +47,6 @@ import org.elasticsearch.index.IndexService; import org.elasticsearch.index.mapper.DocumentMapper; import org.elasticsearch.index.mapper.MapperService; -import org.elasticsearch.index.mapper.ParentFieldMapper; import org.elasticsearch.index.mapper.RoutingFieldMapper; import org.elasticsearch.index.shard.IndexEventListener; import org.elasticsearch.indices.IndicesService; @@ -433,7 +432,6 @@ private void setupIndicesService() throws Exception { when(routingMapper.required()).thenReturn(false); when(docMapper.routingFieldMapper()).thenReturn(routingMapper); - when(docMapper.parentFieldMapper()).thenReturn(mock(ParentFieldMapper.class)); when(mapper.docMappers(anyBoolean())).thenReturn(Collections.singletonList(docMapper)); diff --git a/server/src/test/java/org/elasticsearch/cluster/metadata/MetaDataMappingServiceTests.java b/server/src/test/java/org/elasticsearch/cluster/metadata/MetaDataMappingServiceTests.java index 428d9488dc2c6..1e46c2c428663 100644 --- a/server/src/test/java/org/elasticsearch/cluster/metadata/MetaDataMappingServiceTests.java +++ b/server/src/test/java/org/elasticsearch/cluster/metadata/MetaDataMappingServiceTests.java @@ -18,16 +18,11 @@ */ package org.elasticsearch.cluster.metadata; -import org.elasticsearch.Version; import org.elasticsearch.action.admin.indices.mapping.put.PutMappingClusterStateUpdateRequest; import org.elasticsearch.cluster.ClusterState; import org.elasticsearch.cluster.service.ClusterService; import org.elasticsearch.common.compress.CompressedXContent; -import org.elasticsearch.common.settings.Settings; -import org.elasticsearch.common.xcontent.XContentType; import org.elasticsearch.index.IndexService; -import org.elasticsearch.index.mapper.DocumentMapper; -import org.elasticsearch.index.mapper.MapperParsingException; import org.elasticsearch.plugins.Plugin; import org.elasticsearch.test.ESSingleNodeTestCase; import org.elasticsearch.test.InternalSettingsPlugin; @@ -36,7 +31,6 @@ import java.util.Collections; import static org.hamcrest.Matchers.equalTo; -import static org.hamcrest.Matchers.is; public class MetaDataMappingServiceTests extends ESSingleNodeTestCase { @@ -45,51 +39,6 @@ protected Collection> getPlugins() { return Collections.singleton(InternalSettingsPlugin.class); } - // Tests _parent meta field logic, because part of the validation is in MetaDataMappingService - public void testAddChildTypePointingToAlreadyExistingType() throws Exception { - createIndex("test", Settings.EMPTY, "type", "field", "type=keyword"); - - // Shouldn't be able the add the _parent field pointing to an already existing type, which isn't a parent type - IllegalArgumentException e = expectThrows(IllegalArgumentException.class, () -> client().admin() - .indices() - .preparePutMapping("test") - .setType("child") - .setSource("_parent", "type=type") - .get()); - assertThat(e.getMessage(), - equalTo("can't add a _parent field that points to an already existing type, that isn't already a parent")); - } - - // Tests _parent meta field logic, because part of the validation is in MetaDataMappingService - public void testAddExtraChildTypePointingToAlreadyParentExistingType() throws Exception { - IndexService indexService = createIndex("test", client().admin().indices().prepareCreate("test") - .setSettings(Settings.builder().put("index.version.created", Version.V_5_6_0.id)) - .addMapping("parent") - .addMapping("child1", "_parent", "type=parent") - ); - - // adding the extra child type that points to an already existing parent type is allowed: - client().admin() - .indices() - .preparePutMapping("test") - .setType("child2") - .setSource("_parent", "type=parent") - .get(); - - DocumentMapper documentMapper = indexService.mapperService().documentMapper("child2"); - assertThat(documentMapper.parentFieldMapper().type(), equalTo("parent")); - assertThat(documentMapper.parentFieldMapper().active(), is(true)); - } - - public void testParentIsAString() throws Exception { - // Shouldn't be able the add the _parent field pointing to an already existing type, which isn't a parent type - Exception e = expectThrows(MapperParsingException.class, () -> client().admin().indices().prepareCreate("test") - .addMapping("parent", "{\"properties\":{}}", XContentType.JSON) - .addMapping("child", "{\"_parent\": \"parent\",\"properties\":{}}", XContentType.JSON) - .get()); - assertEquals("Failed to parse mapping [child]: [_parent] must be an object containing [type]", e.getMessage()); - } - public void testMappingClusterStateUpdateDoesntChangeExistingIndices() throws Exception { final IndexService indexService = createIndex("test", client().admin().indices().prepareCreate("test").addMapping("type")); final CompressedXContent currentMapping = indexService.mapperService().documentMapper("type").mappingSource(); diff --git a/server/src/test/java/org/elasticsearch/cluster/metadata/MetaDataTests.java b/server/src/test/java/org/elasticsearch/cluster/metadata/MetaDataTests.java index 74d13a2aab046..3a83580dc1cdd 100644 --- a/server/src/test/java/org/elasticsearch/cluster/metadata/MetaDataTests.java +++ b/server/src/test/java/org/elasticsearch/cluster/metadata/MetaDataTests.java @@ -110,36 +110,21 @@ public void testResolveIndexRouting() { MetaData metaData = MetaData.builder().put(builder).build(); // no alias, no index - assertEquals(metaData.resolveIndexRouting(null, null, null), null); - assertEquals(metaData.resolveIndexRouting(null, "0", null), "0"); - assertEquals(metaData.resolveIndexRouting("32", "0", null), "0"); - assertEquals(metaData.resolveIndexRouting("32", null, null), "32"); + assertEquals(metaData.resolveIndexRouting(null, null), null); + assertEquals(metaData.resolveIndexRouting("0", null), "0"); // index, no alias - assertEquals(metaData.resolveIndexRouting("32", "0", "index"), "0"); - assertEquals(metaData.resolveIndexRouting("32", null, "index"), "32"); - assertEquals(metaData.resolveIndexRouting(null, null, "index"), null); - assertEquals(metaData.resolveIndexRouting(null, "0", "index"), "0"); + assertEquals(metaData.resolveIndexRouting(null, "index"), null); + assertEquals(metaData.resolveIndexRouting("0", "index"), "0"); // alias with no index routing - assertEquals(metaData.resolveIndexRouting(null, null, "alias0"), null); - assertEquals(metaData.resolveIndexRouting(null, "0", "alias0"), "0"); - assertEquals(metaData.resolveIndexRouting("32", null, "alias0"), "32"); - assertEquals(metaData.resolveIndexRouting("32", "0", "alias0"), "0"); + assertEquals(metaData.resolveIndexRouting(null, "alias0"), null); + assertEquals(metaData.resolveIndexRouting("0", "alias0"), "0"); // alias with index routing. - assertEquals(metaData.resolveIndexRouting(null, null, "alias1"), "1"); - assertEquals(metaData.resolveIndexRouting("32", null, "alias1"), "1"); - assertEquals(metaData.resolveIndexRouting("32", "1", "alias1"), "1"); + assertEquals(metaData.resolveIndexRouting(null, "alias1"), "1"); try { - metaData.resolveIndexRouting(null, "0", "alias1"); - fail("should fail"); - } catch (IllegalArgumentException ex) { - assertThat(ex.getMessage(), is("Alias [alias1] has index routing associated with it [1], and was provided with routing value [0], rejecting operation")); - } - - try { - metaData.resolveIndexRouting("32", "0", "alias1"); + metaData.resolveIndexRouting("0", "alias1"); fail("should fail"); } catch (IllegalArgumentException ex) { assertThat(ex.getMessage(), is("Alias [alias1] has index routing associated with it [1], and was provided with routing value [0], rejecting operation")); @@ -147,21 +132,14 @@ public void testResolveIndexRouting() { // alias with invalid index routing. try { - metaData.resolveIndexRouting(null, null, "alias2"); - fail("should fail"); - } catch (IllegalArgumentException ex) { - assertThat(ex.getMessage(), is("index/alias [alias2] provided with routing value [1,2] that resolved to several routing values, rejecting operation")); - } - - try { - metaData.resolveIndexRouting(null, "1", "alias2"); + metaData.resolveIndexRouting(null, "alias2"); fail("should fail"); } catch (IllegalArgumentException ex) { assertThat(ex.getMessage(), is("index/alias [alias2] provided with routing value [1,2] that resolved to several routing values, rejecting operation")); } try { - metaData.resolveIndexRouting("32", null, "alias2"); + metaData.resolveIndexRouting("1", "alias2"); fail("should fail"); } catch (IllegalArgumentException ex) { assertThat(ex.getMessage(), is("index/alias [alias2] provided with routing value [1,2] that resolved to several routing values, rejecting operation")); diff --git a/server/src/test/java/org/elasticsearch/common/lucene/uid/VersionsTests.java b/server/src/test/java/org/elasticsearch/common/lucene/uid/VersionsTests.java index c5e66a3bf2ad5..115cfcdf26f9c 100644 --- a/server/src/test/java/org/elasticsearch/common/lucene/uid/VersionsTests.java +++ b/server/src/test/java/org/elasticsearch/common/lucene/uid/VersionsTests.java @@ -28,7 +28,7 @@ import org.apache.lucene.store.Directory; import org.elasticsearch.common.lucene.Lucene; import org.elasticsearch.common.lucene.index.ElasticsearchDirectoryReader; -import org.elasticsearch.index.mapper.UidFieldMapper; +import org.elasticsearch.index.mapper.IdFieldMapper; import org.elasticsearch.index.mapper.VersionFieldMapper; import org.elasticsearch.index.shard.ShardId; import org.elasticsearch.test.ESTestCase; @@ -63,41 +63,41 @@ public void testVersions() throws Exception { Directory dir = newDirectory(); IndexWriter writer = new IndexWriter(dir, new IndexWriterConfig(Lucene.STANDARD_ANALYZER)); DirectoryReader directoryReader = ElasticsearchDirectoryReader.wrap(DirectoryReader.open(writer), new ShardId("foo", "_na_", 1)); - MatcherAssert.assertThat(loadVersion(directoryReader, new Term(UidFieldMapper.NAME, "1")), equalTo(Versions.NOT_FOUND)); + MatcherAssert.assertThat(loadVersion(directoryReader, new Term(IdFieldMapper.NAME, "1")), equalTo(Versions.NOT_FOUND)); Document doc = new Document(); - doc.add(new Field(UidFieldMapper.NAME, "1", UidFieldMapper.Defaults.FIELD_TYPE)); + doc.add(new Field(IdFieldMapper.NAME, "1", IdFieldMapper.Defaults.FIELD_TYPE)); doc.add(new NumericDocValuesField(VersionFieldMapper.NAME, 1)); - writer.updateDocument(new Term(UidFieldMapper.NAME, "1"), doc); + writer.updateDocument(new Term(IdFieldMapper.NAME, "1"), doc); directoryReader = reopen(directoryReader); - assertThat(loadVersion(directoryReader, new Term(UidFieldMapper.NAME, "1")), equalTo(1L)); - assertThat(loadDocIdAndVersion(directoryReader, new Term(UidFieldMapper.NAME, "1")).version, equalTo(1L)); + assertThat(loadVersion(directoryReader, new Term(IdFieldMapper.NAME, "1")), equalTo(1L)); + assertThat(loadDocIdAndVersion(directoryReader, new Term(IdFieldMapper.NAME, "1")).version, equalTo(1L)); doc = new Document(); - Field uid = new Field(UidFieldMapper.NAME, "1", UidFieldMapper.Defaults.FIELD_TYPE); + Field uid = new Field(IdFieldMapper.NAME, "1", IdFieldMapper.Defaults.FIELD_TYPE); Field version = new NumericDocValuesField(VersionFieldMapper.NAME, 2); doc.add(uid); doc.add(version); - writer.updateDocument(new Term(UidFieldMapper.NAME, "1"), doc); + writer.updateDocument(new Term(IdFieldMapper.NAME, "1"), doc); directoryReader = reopen(directoryReader); - assertThat(loadVersion(directoryReader, new Term(UidFieldMapper.NAME, "1")), equalTo(2L)); - assertThat(loadDocIdAndVersion(directoryReader, new Term(UidFieldMapper.NAME, "1")).version, equalTo(2L)); + assertThat(loadVersion(directoryReader, new Term(IdFieldMapper.NAME, "1")), equalTo(2L)); + assertThat(loadDocIdAndVersion(directoryReader, new Term(IdFieldMapper.NAME, "1")).version, equalTo(2L)); // test reuse of uid field doc = new Document(); version.setLongValue(3); doc.add(uid); doc.add(version); - writer.updateDocument(new Term(UidFieldMapper.NAME, "1"), doc); + writer.updateDocument(new Term(IdFieldMapper.NAME, "1"), doc); directoryReader = reopen(directoryReader); - assertThat(loadVersion(directoryReader, new Term(UidFieldMapper.NAME, "1")), equalTo(3L)); - assertThat(loadDocIdAndVersion(directoryReader, new Term(UidFieldMapper.NAME, "1")).version, equalTo(3L)); + assertThat(loadVersion(directoryReader, new Term(IdFieldMapper.NAME, "1")), equalTo(3L)); + assertThat(loadDocIdAndVersion(directoryReader, new Term(IdFieldMapper.NAME, "1")).version, equalTo(3L)); - writer.deleteDocuments(new Term(UidFieldMapper.NAME, "1")); + writer.deleteDocuments(new Term(IdFieldMapper.NAME, "1")); directoryReader = reopen(directoryReader); - assertThat(loadVersion(directoryReader, new Term(UidFieldMapper.NAME, "1")), equalTo(Versions.NOT_FOUND)); - assertThat(loadDocIdAndVersion(directoryReader, new Term(UidFieldMapper.NAME, "1")), nullValue()); + assertThat(loadVersion(directoryReader, new Term(IdFieldMapper.NAME, "1")), equalTo(Versions.NOT_FOUND)); + assertThat(loadDocIdAndVersion(directoryReader, new Term(IdFieldMapper.NAME, "1")), nullValue()); directoryReader.close(); writer.close(); dir.close(); @@ -111,33 +111,33 @@ public void testNestedDocuments() throws IOException { for (int i = 0; i < 4; ++i) { // Nested Document doc = new Document(); - doc.add(new Field(UidFieldMapper.NAME, "1", UidFieldMapper.Defaults.NESTED_FIELD_TYPE)); + doc.add(new Field(IdFieldMapper.NAME, "1", IdFieldMapper.Defaults.NESTED_FIELD_TYPE)); docs.add(doc); } // Root Document doc = new Document(); - doc.add(new Field(UidFieldMapper.NAME, "1", UidFieldMapper.Defaults.FIELD_TYPE)); + doc.add(new Field(IdFieldMapper.NAME, "1", IdFieldMapper.Defaults.FIELD_TYPE)); NumericDocValuesField version = new NumericDocValuesField(VersionFieldMapper.NAME, 5L); doc.add(version); docs.add(doc); - writer.updateDocuments(new Term(UidFieldMapper.NAME, "1"), docs); + writer.updateDocuments(new Term(IdFieldMapper.NAME, "1"), docs); DirectoryReader directoryReader = ElasticsearchDirectoryReader.wrap(DirectoryReader.open(writer), new ShardId("foo", "_na_", 1)); - assertThat(loadVersion(directoryReader, new Term(UidFieldMapper.NAME, "1")), equalTo(5L)); - assertThat(loadDocIdAndVersion(directoryReader, new Term(UidFieldMapper.NAME, "1")).version, equalTo(5L)); + assertThat(loadVersion(directoryReader, new Term(IdFieldMapper.NAME, "1")), equalTo(5L)); + assertThat(loadDocIdAndVersion(directoryReader, new Term(IdFieldMapper.NAME, "1")).version, equalTo(5L)); version.setLongValue(6L); - writer.updateDocuments(new Term(UidFieldMapper.NAME, "1"), docs); + writer.updateDocuments(new Term(IdFieldMapper.NAME, "1"), docs); version.setLongValue(7L); - writer.updateDocuments(new Term(UidFieldMapper.NAME, "1"), docs); + writer.updateDocuments(new Term(IdFieldMapper.NAME, "1"), docs); directoryReader = reopen(directoryReader); - assertThat(loadVersion(directoryReader, new Term(UidFieldMapper.NAME, "1")), equalTo(7L)); - assertThat(loadDocIdAndVersion(directoryReader, new Term(UidFieldMapper.NAME, "1")).version, equalTo(7L)); + assertThat(loadVersion(directoryReader, new Term(IdFieldMapper.NAME, "1")), equalTo(7L)); + assertThat(loadDocIdAndVersion(directoryReader, new Term(IdFieldMapper.NAME, "1")).version, equalTo(7L)); - writer.deleteDocuments(new Term(UidFieldMapper.NAME, "1")); + writer.deleteDocuments(new Term(IdFieldMapper.NAME, "1")); directoryReader = reopen(directoryReader); - assertThat(loadVersion(directoryReader, new Term(UidFieldMapper.NAME, "1")), equalTo(Versions.NOT_FOUND)); - assertThat(loadDocIdAndVersion(directoryReader, new Term(UidFieldMapper.NAME, "1")), nullValue()); + assertThat(loadVersion(directoryReader, new Term(IdFieldMapper.NAME, "1")), equalTo(Versions.NOT_FOUND)); + assertThat(loadDocIdAndVersion(directoryReader, new Term(IdFieldMapper.NAME, "1")), nullValue()); directoryReader.close(); writer.close(); dir.close(); @@ -150,15 +150,15 @@ public void testCache() throws Exception { Directory dir = newDirectory(); IndexWriter writer = new IndexWriter(dir, new IndexWriterConfig(Lucene.STANDARD_ANALYZER)); Document doc = new Document(); - doc.add(new Field(UidFieldMapper.NAME, "6", UidFieldMapper.Defaults.FIELD_TYPE)); + doc.add(new Field(IdFieldMapper.NAME, "6", IdFieldMapper.Defaults.FIELD_TYPE)); doc.add(new NumericDocValuesField(VersionFieldMapper.NAME, 87)); writer.addDocument(doc); DirectoryReader reader = DirectoryReader.open(writer); // should increase cache size by 1 - assertEquals(87, loadVersion(reader, new Term(UidFieldMapper.NAME, "6"))); + assertEquals(87, loadVersion(reader, new Term(IdFieldMapper.NAME, "6"))); assertEquals(size+1, VersionsAndSeqNoResolver.lookupStates.size()); // should be cache hit - assertEquals(87, loadVersion(reader, new Term(UidFieldMapper.NAME, "6"))); + assertEquals(87, loadVersion(reader, new Term(IdFieldMapper.NAME, "6"))); assertEquals(size+1, VersionsAndSeqNoResolver.lookupStates.size()); reader.close(); @@ -175,15 +175,15 @@ public void testCacheFilterReader() throws Exception { Directory dir = newDirectory(); IndexWriter writer = new IndexWriter(dir, new IndexWriterConfig(Lucene.STANDARD_ANALYZER)); Document doc = new Document(); - doc.add(new Field(UidFieldMapper.NAME, "6", UidFieldMapper.Defaults.FIELD_TYPE)); + doc.add(new Field(IdFieldMapper.NAME, "6", IdFieldMapper.Defaults.FIELD_TYPE)); doc.add(new NumericDocValuesField(VersionFieldMapper.NAME, 87)); writer.addDocument(doc); DirectoryReader reader = DirectoryReader.open(writer); - assertEquals(87, loadVersion(reader, new Term(UidFieldMapper.NAME, "6"))); + assertEquals(87, loadVersion(reader, new Term(IdFieldMapper.NAME, "6"))); assertEquals(size+1, VersionsAndSeqNoResolver.lookupStates.size()); // now wrap the reader DirectoryReader wrapped = ElasticsearchDirectoryReader.wrap(reader, new ShardId("bogus", "_na_", 5)); - assertEquals(87, loadVersion(wrapped, new Term(UidFieldMapper.NAME, "6"))); + assertEquals(87, loadVersion(wrapped, new Term(IdFieldMapper.NAME, "6"))); // same size map: core cache key is shared assertEquals(size+1, VersionsAndSeqNoResolver.lookupStates.size()); diff --git a/server/src/test/java/org/elasticsearch/get/GetActionIT.java b/server/src/test/java/org/elasticsearch/get/GetActionIT.java index 7e3645b33ce58..30f86241cbd6d 100644 --- a/server/src/test/java/org/elasticsearch/get/GetActionIT.java +++ b/server/src/test/java/org/elasticsearch/get/GetActionIT.java @@ -288,79 +288,6 @@ public void testGetDocWithMultivaluedFields() throws Exception { assertThat(response.getFields().get("field").getValues().get(1).toString(), equalTo("2")); } - public void testGetDocWithMultivaluedFieldsMultiTypeBWC() throws Exception { - assertTrue("remove this multi type test", Version.CURRENT.before(Version.fromString("7.0.0"))); - String mapping1 = Strings.toString(XContentFactory.jsonBuilder().startObject().startObject("type1") - .startObject("properties") - .startObject("field").field("type", "text").field("store", true).endObject() - .endObject() - .endObject().endObject()); - String mapping2 = Strings.toString(XContentFactory.jsonBuilder().startObject().startObject("type2") - .startObject("properties") - .startObject("field").field("type", "text").field("store", true).endObject() - .endObject() - .endObject().endObject()); - assertAcked(prepareCreate("test") - .addMapping("type1", mapping1, XContentType.JSON) - .addMapping("type2", mapping2, XContentType.JSON) - // multi types in 5.6 - .setSettings(Settings.builder().put("index.refresh_interval", -1).put("index.version.created", Version.V_5_6_0.id))); - - ensureGreen(); - - GetResponse response = client().prepareGet("test", "type1", "1").get(); - assertThat(response.isExists(), equalTo(false)); - response = client().prepareGet("test", "type2", "1").get(); - assertThat(response.isExists(), equalTo(false)); - - client().prepareIndex("test", "type1", "1") - .setSource(jsonBuilder().startObject().array("field", "1", "2").endObject()).get(); - - client().prepareIndex("test", "type2", "1") - .setSource(jsonBuilder().startObject().array("field", "1", "2").endObject()).get(); - - response = client().prepareGet("test", "type1", "1").setStoredFields("field").get(); - assertThat(response.isExists(), equalTo(true)); - assertThat(response.getId(), equalTo("1")); - assertThat(response.getType(), equalTo("type1")); - Set fields = new HashSet<>(response.getFields().keySet()); - assertThat(fields, equalTo(singleton("field"))); - assertThat(response.getFields().get("field").getValues().size(), equalTo(2)); - assertThat(response.getFields().get("field").getValues().get(0).toString(), equalTo("1")); - assertThat(response.getFields().get("field").getValues().get(1).toString(), equalTo("2")); - - - response = client().prepareGet("test", "type2", "1").setStoredFields("field").get(); - assertThat(response.isExists(), equalTo(true)); - assertThat(response.getType(), equalTo("type2")); - assertThat(response.getId(), equalTo("1")); - fields = new HashSet<>(response.getFields().keySet()); - assertThat(fields, equalTo(singleton("field"))); - assertThat(response.getFields().get("field").getValues().size(), equalTo(2)); - assertThat(response.getFields().get("field").getValues().get(0).toString(), equalTo("1")); - assertThat(response.getFields().get("field").getValues().get(1).toString(), equalTo("2")); - - // Now test values being fetched from stored fields. - refresh(); - response = client().prepareGet("test", "type1", "1").setStoredFields("field").get(); - assertThat(response.isExists(), equalTo(true)); - assertThat(response.getId(), equalTo("1")); - fields = new HashSet<>(response.getFields().keySet()); - assertThat(fields, equalTo(singleton("field"))); - assertThat(response.getFields().get("field").getValues().size(), equalTo(2)); - assertThat(response.getFields().get("field").getValues().get(0).toString(), equalTo("1")); - assertThat(response.getFields().get("field").getValues().get(1).toString(), equalTo("2")); - - response = client().prepareGet("test", "type2", "1").setStoredFields("field").get(); - assertThat(response.isExists(), equalTo(true)); - assertThat(response.getId(), equalTo("1")); - fields = new HashSet<>(response.getFields().keySet()); - assertThat(fields, equalTo(singleton("field"))); - assertThat(response.getFields().get("field").getValues().size(), equalTo(2)); - assertThat(response.getFields().get("field").getValues().get(0).toString(), equalTo("1")); - assertThat(response.getFields().get("field").getValues().get(1).toString(), equalTo("2")); - } - public void testGetWithVersion() { assertAcked(prepareCreate("test").addAlias(new Alias("alias")) .setSettings(Settings.builder().put("index.refresh_interval", -1))); @@ -610,48 +537,6 @@ public void testGetFieldsMetaDataWithRouting() throws Exception { assertThat(getResponse.getField("_routing").getValue().toString(), equalTo("1")); } - public void testGetFieldsMetaDataWithParentChild() throws Exception { - assertTrue("remove this multi type test", Version.CURRENT.before(Version.fromString("7.0.0"))); - assertAcked(prepareCreate("test") - .addMapping("parent") - .addMapping("my-type1", "_parent", "type=parent", "field1", "type=keyword,store=true") - .addAlias(new Alias("alias")) - .setSettings(Settings.builder().put("index.refresh_interval", -1).put("index.version.created", Version.V_5_6_0.id))); - // multi types in 5.6 - - client().prepareIndex("test", "my-type1", "1") - .setRouting("1") - .setParent("parent_1") - .setSource(jsonBuilder().startObject().field("field1", "value").endObject()) - .get(); - - GetResponse getResponse = client().prepareGet(indexOrAlias(), "my-type1", "1") - .setRouting("1") - .setStoredFields("field1") - .get(); - assertThat(getResponse.isExists(), equalTo(true)); - assertThat(getResponse.getField("field1").isMetadataField(), equalTo(false)); - assertThat(getResponse.getField("field1").getValue().toString(), equalTo("value")); - assertThat(getResponse.getField("_routing").isMetadataField(), equalTo(true)); - assertThat(getResponse.getField("_routing").getValue().toString(), equalTo("1")); - assertThat(getResponse.getField("_parent").isMetadataField(), equalTo(true)); - assertThat(getResponse.getField("_parent").getValue().toString(), equalTo("parent_1")); - - flush(); - - getResponse = client().prepareGet(indexOrAlias(), "my-type1", "1") - .setStoredFields("field1") - .setRouting("1") - .get(); - assertThat(getResponse.isExists(), equalTo(true)); - assertThat(getResponse.getField("field1").isMetadataField(), equalTo(false)); - assertThat(getResponse.getField("field1").getValue().toString(), equalTo("value")); - assertThat(getResponse.getField("_routing").isMetadataField(), equalTo(true)); - assertThat(getResponse.getField("_routing").getValue().toString(), equalTo("1")); - assertThat(getResponse.getField("_parent").isMetadataField(), equalTo(true)); - assertThat(getResponse.getField("_parent").getValue().toString(), equalTo("parent_1")); - } - public void testGetFieldsNonLeafField() throws Exception { assertAcked(prepareCreate("test").addAlias(new Alias("alias")) .addMapping("my-type1", jsonBuilder().startObject().startObject("my-type1").startObject("properties") @@ -682,8 +567,8 @@ public void testGetFieldsNonLeafField() throws Exception { public void testGetFieldsComplexField() throws Exception { assertAcked(prepareCreate("my-index") // multi types in 5.6 - .setSettings(Settings.builder().put("index.refresh_interval", -1).put("index.version.created", Version.V_5_6_0.id)) - .addMapping("my-type2", jsonBuilder().startObject().startObject("my-type2").startObject("properties") + .setSettings(Settings.builder().put("index.refresh_interval", -1)) + .addMapping("my-type", jsonBuilder().startObject().startObject("my-type").startObject("properties") .startObject("field1").field("type", "object").startObject("properties") .startObject("field2").field("type", "object").startObject("properties") .startObject("field3").field("type", "object").startObject("properties") @@ -718,20 +603,19 @@ public void testGetFieldsComplexField() throws Exception { logger.info("indexing documents"); - client().prepareIndex("my-index", "my-type1", "1").setSource(source, XContentType.JSON).get(); - client().prepareIndex("my-index", "my-type2", "1").setSource(source, XContentType.JSON).get(); + client().prepareIndex("my-index", "my-type", "1").setSource(source, XContentType.JSON).get(); logger.info("checking real time retrieval"); String field = "field1.field2.field3.field4"; - GetResponse getResponse = client().prepareGet("my-index", "my-type1", "1").setStoredFields(field).get(); + GetResponse getResponse = client().prepareGet("my-index", "my-type", "1").setStoredFields(field).get(); assertThat(getResponse.isExists(), equalTo(true)); assertThat(getResponse.getField(field).isMetadataField(), equalTo(false)); assertThat(getResponse.getField(field).getValues().size(), equalTo(2)); assertThat(getResponse.getField(field).getValues().get(0).toString(), equalTo("value1")); assertThat(getResponse.getField(field).getValues().get(1).toString(), equalTo("value2")); - getResponse = client().prepareGet("my-index", "my-type2", "1").setStoredFields(field).get(); + getResponse = client().prepareGet("my-index", "my-type", "1").setStoredFields(field).get(); assertThat(getResponse.isExists(), equalTo(true)); assertThat(getResponse.getField(field).isMetadataField(), equalTo(false)); assertThat(getResponse.getField(field).getValues().size(), equalTo(2)); @@ -756,14 +640,7 @@ public void testGetFieldsComplexField() throws Exception { logger.info("checking post-flush retrieval"); - getResponse = client().prepareGet("my-index", "my-type1", "1").setStoredFields(field).get(); - assertThat(getResponse.isExists(), equalTo(true)); - assertThat(getResponse.getField(field).isMetadataField(), equalTo(false)); - assertThat(getResponse.getField(field).getValues().size(), equalTo(2)); - assertThat(getResponse.getField(field).getValues().get(0).toString(), equalTo("value1")); - assertThat(getResponse.getField(field).getValues().get(1).toString(), equalTo("value2")); - - getResponse = client().prepareGet("my-index", "my-type2", "1").setStoredFields(field).get(); + getResponse = client().prepareGet("my-index", "my-type", "1").setStoredFields(field).get(); assertThat(getResponse.isExists(), equalTo(true)); assertThat(getResponse.getField(field).isMetadataField(), equalTo(false)); assertThat(getResponse.getField(field).getValues().size(), equalTo(2)); diff --git a/server/src/test/java/org/elasticsearch/index/IndexModuleTests.java b/server/src/test/java/org/elasticsearch/index/IndexModuleTests.java index dde9c1ca3bdb6..6af1a79249e26 100644 --- a/server/src/test/java/org/elasticsearch/index/IndexModuleTests.java +++ b/server/src/test/java/org/elasticsearch/index/IndexModuleTests.java @@ -242,7 +242,7 @@ public Engine.Index preIndex(ShardId shardId, Engine.Index operation) { assertSame(listener, indexService.getIndexOperationListeners().get(1)); ParsedDocument doc = InternalEngineTests.createParsedDoc("1", null); - Engine.Index index = new Engine.Index(new Term("_uid", Uid.createUidAsBytes(doc.type(), doc.id())), doc); + Engine.Index index = new Engine.Index(new Term("_id", Uid.encodeId(doc.id())), doc); ShardId shardId = new ShardId(new Index("foo", "bar"), 0); for (IndexingOperationListener l : indexService.getIndexOperationListeners()) { l.preIndex(shardId, index); diff --git a/server/src/test/java/org/elasticsearch/index/IndexSettingsTests.java b/server/src/test/java/org/elasticsearch/index/IndexSettingsTests.java index a923a4b80992d..d7ee689b9db56 100644 --- a/server/src/test/java/org/elasticsearch/index/IndexSettingsTests.java +++ b/server/src/test/java/org/elasticsearch/index/IndexSettingsTests.java @@ -560,51 +560,6 @@ public void testArchiveBrokenIndexSettings() { assertEquals("2s", settings.get("index.refresh_interval")); } - public void testSingleTypeSetting() { - { - IndexSettings index = newIndexSettings(newIndexMeta("index", Settings.EMPTY), Settings.EMPTY); - IndexScopedSettings scopedSettings = index.getScopedSettings(); - Settings build = Settings.builder().put(IndexSettings.INDEX_MAPPING_SINGLE_TYPE_SETTING_KEY, randomBoolean()).build(); - scopedSettings.archiveUnknownOrInvalidSettings(build, e -> fail("unexpected unknown setting " + e), - (e, ex) -> fail("unexpected illegal setting")); - assertTrue(index.isSingleType()); - expectThrows(IllegalArgumentException.class, () -> { - index.getScopedSettings() - .validate(Settings.builder().put(IndexSettings.INDEX_MAPPING_SINGLE_TYPE_SETTING_KEY, randomBoolean()).build(), false); - }); - } - { - boolean single_type = randomBoolean(); - Settings settings = Settings.builder().put(IndexMetaData.SETTING_VERSION_CREATED, Version.V_5_6_0) - .put(IndexMetaData.SETTING_NUMBER_OF_REPLICAS, 1) - .put(IndexMetaData.SETTING_NUMBER_OF_SHARDS, 1) - .put(IndexSettings.INDEX_MAPPING_SINGLE_TYPE_SETTING_KEY, single_type) - .build(); - IndexMetaData meta = IndexMetaData.builder("index").settings(settings).build(); - IndexSettings index = newIndexSettings(meta, Settings.EMPTY); - IndexScopedSettings scopedSettings = index.getScopedSettings(); - Settings build = Settings.builder().put(IndexSettings.INDEX_MAPPING_SINGLE_TYPE_SETTING_KEY, randomBoolean()).build(); - scopedSettings.archiveUnknownOrInvalidSettings(build, e -> fail("unexpected unknown setting " + e), - (e, ex) -> fail("unexpected illegal setting")); - assertEquals(single_type, index.isSingleType()); - } - - { - Settings settings = Settings.builder().put(IndexMetaData.SETTING_VERSION_CREATED, Version.CURRENT) - .put(IndexMetaData.SETTING_NUMBER_OF_REPLICAS, 1) - .put(IndexMetaData.SETTING_NUMBER_OF_SHARDS, 1) - .put(IndexSettings.INDEX_MAPPING_SINGLE_TYPE_SETTING_KEY, false) - .build(); - IndexMetaData meta = IndexMetaData.builder("index").settings(settings).build(); - try { - newIndexSettings(meta, Settings.EMPTY); - fail("should fail with assertion error"); - } catch (AssertionError e) { - // all is well - } - } - } - public void testQueryDefaultField() { IndexSettings index = newIndexSettings( newIndexMeta("index", Settings.EMPTY), Settings.EMPTY diff --git a/server/src/test/java/org/elasticsearch/index/fielddata/AbstractFieldDataTestCase.java b/server/src/test/java/org/elasticsearch/index/fielddata/AbstractFieldDataTestCase.java index 482f8d90bedfd..c204690c76e07 100644 --- a/server/src/test/java/org/elasticsearch/index/fielddata/AbstractFieldDataTestCase.java +++ b/server/src/test/java/org/elasticsearch/index/fielddata/AbstractFieldDataTestCase.java @@ -31,7 +31,6 @@ import org.apache.lucene.search.IndexSearcher; import org.apache.lucene.search.Query; import org.apache.lucene.store.RAMDirectory; -import org.elasticsearch.common.compress.CompressedXContent; import org.elasticsearch.common.lucene.index.ElasticsearchDirectoryReader; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.index.IndexService; @@ -43,10 +42,8 @@ import org.elasticsearch.index.mapper.KeywordFieldMapper; import org.elasticsearch.index.mapper.MappedFieldType; import org.elasticsearch.index.mapper.Mapper.BuilderContext; -import org.elasticsearch.index.mapper.MapperService.MergeReason; import org.elasticsearch.index.mapper.MapperService; import org.elasticsearch.index.mapper.NumberFieldMapper; -import org.elasticsearch.index.mapper.ParentFieldMapper; import org.elasticsearch.index.mapper.TextFieldMapper; import org.elasticsearch.index.query.QueryShardContext; import org.elasticsearch.index.shard.ShardId; @@ -124,8 +121,6 @@ public > IFD getForField(String type, String field .docValues(docValues).build(context).fieldType(); } else if (type.equals("geo_point")) { fieldType = new GeoPointFieldMapper.Builder(fieldName).docValues(docValues).build(context).fieldType(); - } else if (type.equals("_parent")) { - fieldType = new ParentFieldMapper.Builder("_type").type(fieldName).build(context).fieldType(); } else if (type.equals("binary")) { fieldType = new BinaryFieldMapper.Builder(fieldName).docValues(docValues).build(context).fieldType(); } else { diff --git a/server/src/test/java/org/elasticsearch/index/fielddata/UidFieldDataTests.java b/server/src/test/java/org/elasticsearch/index/fielddata/UidFieldDataTests.java deleted file mode 100644 index 240c7fc37faee..0000000000000 --- a/server/src/test/java/org/elasticsearch/index/fielddata/UidFieldDataTests.java +++ /dev/null @@ -1,128 +0,0 @@ -/* - * Licensed to Elasticsearch under one or more contributor - * license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright - * ownership. Elasticsearch licenses this file to you under - * the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package org.elasticsearch.index.fielddata; - -import org.apache.lucene.index.DocValues; -import org.apache.lucene.index.SortedDocValues; -import org.apache.lucene.index.SortedSetDocValues; -import org.apache.lucene.util.BytesRef; -import org.elasticsearch.test.ESTestCase; - -import java.io.IOException; -import java.util.Collections; -import java.util.Locale; - -public class UidFieldDataTests extends ESTestCase { - - private static class DummySortedDocValues extends SortedDocValues { - - private int doc = -1; - - @Override - public int ordValue() throws IOException { - return doc; - } - - @Override - public BytesRef lookupOrd(int ord) throws IOException { - return new BytesRef(String.format(Locale.ENGLISH, "%03d", ord)); - } - - @Override - public int getValueCount() { - return 100; - } - - @Override - public boolean advanceExact(int target) throws IOException { - doc = target; - return true; - } - - @Override - public int docID() { - return doc; - } - - @Override - public int nextDoc() throws IOException { - return advance(doc + 1); - } - - @Override - public int advance(int target) throws IOException { - if (target >= getValueCount()) { - return doc = NO_MORE_DOCS; - } else { - return doc = target; - } - } - - @Override - public long cost() { - return getValueCount(); - } - - } - - private static class DummyAtomicOrdinalsFieldData implements AtomicOrdinalsFieldData { - - @Override - public ScriptDocValues getScriptValues() { - throw new UnsupportedOperationException(); - } - - @Override - public SortedBinaryDocValues getBytesValues() { - return FieldData.toString(getOrdinalsValues()); - } - - @Override - public long ramBytesUsed() { - return 0; - } - - @Override - public void close() { - } - - @Override - public SortedSetDocValues getOrdinalsValues() { - return DocValues.singleton(new DummySortedDocValues()); - } - - } - - public void testSortedSetValues() throws Exception { - AtomicFieldData fd = new UidIndexFieldData.UidAtomicFieldData(new BytesRef("type#"), new DummyAtomicOrdinalsFieldData()); - SortedBinaryDocValues dv = fd.getBytesValues(); - assertTrue(dv.advanceExact(30)); - assertEquals(1, dv.docValueCount()); - assertEquals(new BytesRef("type#030"), dv.nextValue()); - } - - public void testScriptValues() throws IOException { - AtomicFieldData fd = new UidIndexFieldData.UidAtomicFieldData(new BytesRef("type#"), new DummyAtomicOrdinalsFieldData()); - ScriptDocValues values = fd.getScriptValues(); - values.setNextDocId(30); - assertEquals(Collections.singletonList("type#030"), values); - } - -} diff --git a/server/src/test/java/org/elasticsearch/index/get/DocumentFieldTests.java b/server/src/test/java/org/elasticsearch/index/get/DocumentFieldTests.java index 9d581054f46b8..51153d28d29d3 100644 --- a/server/src/test/java/org/elasticsearch/index/get/DocumentFieldTests.java +++ b/server/src/test/java/org/elasticsearch/index/get/DocumentFieldTests.java @@ -26,9 +26,8 @@ import org.elasticsearch.common.xcontent.ToXContent; import org.elasticsearch.common.xcontent.XContentParser; import org.elasticsearch.common.xcontent.XContentType; -import org.elasticsearch.index.mapper.ParentFieldMapper; +import org.elasticsearch.index.mapper.IdFieldMapper; import org.elasticsearch.index.mapper.RoutingFieldMapper; -import org.elasticsearch.index.mapper.UidFieldMapper; import org.elasticsearch.test.ESTestCase; import org.elasticsearch.test.RandomObjects; @@ -100,7 +99,7 @@ private static DocumentField mutateDocumentField(DocumentField documentField) { public static Tuple randomDocumentField(XContentType xContentType) { if (randomBoolean()) { - String fieldName = randomFrom(ParentFieldMapper.NAME, RoutingFieldMapper.NAME, UidFieldMapper.NAME); + String fieldName = randomFrom(RoutingFieldMapper.NAME); DocumentField documentField = new DocumentField(fieldName, Collections.singletonList(randomAlphaOfLengthBetween(3, 10))); return Tuple.tuple(documentField, documentField); } diff --git a/server/src/test/java/org/elasticsearch/index/mapper/BooleanFieldMapperTests.java b/server/src/test/java/org/elasticsearch/index/mapper/BooleanFieldMapperTests.java index 81c8397c036d3..668d3432e957a 100644 --- a/server/src/test/java/org/elasticsearch/index/mapper/BooleanFieldMapperTests.java +++ b/server/src/test/java/org/elasticsearch/index/mapper/BooleanFieldMapperTests.java @@ -64,10 +64,6 @@ public class BooleanFieldMapperTests extends ESSingleNodeTestCase { public void setup() { indexService = createIndex("test"); parser = indexService.mapperService().documentMapperParser(); - - IndexService preEs6IndexService = createIndex("legacy", - Settings.builder().put(IndexMetaData.SETTING_VERSION_CREATED, Version.V_5_0_0).build()); - preEs6Parser = preEs6IndexService.mapperService().documentMapperParser(); } @Override @@ -134,50 +130,7 @@ public void testSerialization() throws IOException { assertEquals("{\"field\":{\"type\":\"boolean\",\"doc_values\":false,\"null_value\":true}}", Strings.toString(builder)); } - public void testParsesPreEs6BooleansLenient() throws IOException { - String mapping = Strings.toString(XContentFactory.jsonBuilder() - .startObject() - .startObject("type") - .startObject("properties") - .startObject("field1") - .field("type", "boolean") - .endObject() - .startObject("field2") - .field("type", "boolean") - .endObject() - .endObject() - .endObject() - .endObject()); - DocumentMapper defaultMapper = preEs6Parser.parse("type", new CompressedXContent(mapping)); - - String falsy = randomFrom("false", "off", "no", "0"); - String truthy = randomFrom("true", "on", "yes", "1"); - - ParsedDocument parsedDoc = defaultMapper.parse(SourceToParse.source("legacy", "type", "1", BytesReference - .bytes(XContentFactory.jsonBuilder() - .startObject() - .field("field1", falsy) - .field("field2", truthy) - .endObject()), - XContentType.JSON)); - Document doc = parsedDoc.rootDoc(); - assertEquals("F", doc.getField("field1").stringValue()); - assertEquals("T", doc.getField("field2").stringValue()); - - List expectedDeprecationWarnings = new ArrayList<>(); - if (Booleans.isBoolean(falsy) == false) { - expectedDeprecationWarnings.add("Expected a boolean for property [field1] but got ["+ falsy + "]"); - } - if (Booleans.isBoolean(truthy) == false) { - expectedDeprecationWarnings.add("Expected a boolean for property [field2] but got [" + truthy + "]"); - } - - if (expectedDeprecationWarnings.isEmpty() == false) { - assertWarnings(expectedDeprecationWarnings.toArray(new String[1])); - } - } - - public void testParsesEs6BooleansStrict() throws IOException { + public void testParsesBooleansStrict() throws IOException { String mapping = Strings.toString(XContentFactory.jsonBuilder() .startObject() .startObject("type") diff --git a/server/src/test/java/org/elasticsearch/index/mapper/DocumentMapperMergeTests.java b/server/src/test/java/org/elasticsearch/index/mapper/DocumentMapperMergeTests.java index 41d98aa173df7..e69d48b7b44b7 100644 --- a/server/src/test/java/org/elasticsearch/index/mapper/DocumentMapperMergeTests.java +++ b/server/src/test/java/org/elasticsearch/index/mapper/DocumentMapperMergeTests.java @@ -230,67 +230,6 @@ public void testDoNotRepeatOriginalMapping() throws IOException { assertFalse(mapper.sourceMapper().enabled()); } - public void testMergeChildType() throws IOException { - DocumentMapperParser parser = createIndex("test").mapperService().documentMapperParser(); - - String initMapping = Strings.toString(XContentFactory.jsonBuilder().startObject().startObject("child") - .startObject("_parent").field("type", "parent").endObject() - .endObject().endObject()); - DocumentMapper initMapper = parser.parse("child", new CompressedXContent(initMapping)); - - assertThat(initMapper.mappers().getMapper("_parent#parent"), notNullValue()); - - String updatedMapping1 = Strings.toString(XContentFactory.jsonBuilder().startObject().startObject("child") - .startObject("properties") - .startObject("name").field("type", "text").endObject() - .endObject().endObject().endObject()); - DocumentMapper updatedMapper1 = parser.parse("child", new CompressedXContent(updatedMapping1)); - DocumentMapper mergedMapper1 = initMapper.merge(updatedMapper1.mapping()); - - assertThat(mergedMapper1.mappers().getMapper("_parent#parent"), notNullValue()); - assertThat(mergedMapper1.mappers().getMapper("name"), notNullValue()); - - String updatedMapping2 = Strings.toString(XContentFactory.jsonBuilder().startObject().startObject("child") - .startObject("_parent").field("type", "parent").endObject() - .startObject("properties") - .startObject("age").field("type", "byte").endObject() - .endObject().endObject().endObject()); - DocumentMapper updatedMapper2 = parser.parse("child", new CompressedXContent(updatedMapping2)); - DocumentMapper mergedMapper2 = mergedMapper1.merge(updatedMapper2.mapping()); - - assertThat(mergedMapper2.mappers().getMapper("_parent#parent"), notNullValue()); - assertThat(mergedMapper2.mappers().getMapper("name"), notNullValue()); - assertThat(mergedMapper2.mappers().getMapper("age"), notNullValue()); - - String modParentMapping = Strings.toString(XContentFactory.jsonBuilder().startObject().startObject("child") - .startObject("_parent").field("type", "new_parent").endObject() - .endObject().endObject()); - DocumentMapper modParentMapper = parser.parse("child", new CompressedXContent(modParentMapping)); - Exception e = expectThrows(IllegalArgumentException.class, () -> initMapper.merge(modParentMapper.mapping())); - assertThat(e.getMessage(), containsString("The _parent field's type option can't be changed: [parent]->[new_parent]")); - } - - public void testMergeAddingParent() throws IOException { - DocumentMapperParser parser = createIndex("test").mapperService().documentMapperParser(); - - String initMapping = Strings.toString(XContentFactory.jsonBuilder().startObject().startObject("cowboy") - .startObject("properties") - .startObject("name").field("type", "text").endObject() - .endObject().endObject().endObject()); - DocumentMapper initMapper = parser.parse("cowboy", new CompressedXContent(initMapping)); - - assertThat(initMapper.mappers().getMapper("name"), notNullValue()); - - String updatedMapping = Strings.toString(XContentFactory.jsonBuilder().startObject().startObject("cowboy") - .startObject("_parent").field("type", "parent").endObject() - .startObject("properties") - .startObject("age").field("type", "byte").endObject() - .endObject().endObject().endObject()); - DocumentMapper updatedMapper = parser.parse("cowboy", new CompressedXContent(updatedMapping)); - Exception e = expectThrows(IllegalArgumentException.class, () -> initMapper.merge(updatedMapper.mapping())); - assertThat(e.getMessage(), containsString("The _parent field's type option can't be changed: [null]->[parent]")); - } - public void testMergeMeta() throws IOException { DocumentMapperParser parser = createIndex("test").mapperService().documentMapperParser(); diff --git a/server/src/test/java/org/elasticsearch/index/mapper/DocumentParserTests.java b/server/src/test/java/org/elasticsearch/index/mapper/DocumentParserTests.java index dd4717a1a0f6a..11f69c738e949 100644 --- a/server/src/test/java/org/elasticsearch/index/mapper/DocumentParserTests.java +++ b/server/src/test/java/org/elasticsearch/index/mapper/DocumentParserTests.java @@ -152,10 +152,6 @@ public void testDotsWithDynamicNestedMapper() throws Exception { } public void testNestedHaveIdAndTypeFields() throws Exception { - DocumentMapperParser mapperParser1 = createIndex("index1", Settings.builder() - .put("index.version.created", Version.V_5_6_0) // allows for multiple types - .build() - ).mapperService().documentMapperParser(); DocumentMapperParser mapperParser2 = createIndex("index2").mapperService().documentMapperParser(); XContentBuilder mapping = XContentFactory.jsonBuilder().startObject().startObject("type").startObject("properties"); @@ -180,8 +176,7 @@ public void testNestedHaveIdAndTypeFields() throws Exception { mapping.endObject(); } mapping.endObject().endObject().endObject(); - DocumentMapper mapper1 = mapperParser1.parse("type", new CompressedXContent(Strings.toString(mapping))); - DocumentMapper mapper2 = mapperParser2.parse("type", new CompressedXContent(Strings.toString(mapping))); + DocumentMapper mapper = mapperParser2.parse("type", new CompressedXContent(Strings.toString(mapping))); XContentBuilder doc = XContentFactory.jsonBuilder().startObject(); { @@ -196,31 +191,10 @@ public void testNestedHaveIdAndTypeFields() throws Exception { } doc.endObject(); - // Verify in the case where multiple types are allowed that the _uid field is added to nested documents: - ParsedDocument result = mapper1.parse(SourceToParse.source("index1", "type", "1", BytesReference.bytes(doc), XContentType.JSON)); - assertEquals(2, result.docs().size()); - // Nested document: - assertNull(result.docs().get(0).getField(IdFieldMapper.NAME)); - assertNotNull(result.docs().get(0).getField(UidFieldMapper.NAME)); - assertEquals("type#1", result.docs().get(0).getField(UidFieldMapper.NAME).stringValue()); - assertEquals(UidFieldMapper.Defaults.NESTED_FIELD_TYPE, result.docs().get(0).getField(UidFieldMapper.NAME).fieldType()); - assertNotNull(result.docs().get(0).getField(TypeFieldMapper.NAME)); - assertEquals("__foo", result.docs().get(0).getField(TypeFieldMapper.NAME).stringValue()); - assertEquals("value1", result.docs().get(0).getField("foo.bar").binaryValue().utf8ToString()); - // Root document: - assertNull(result.docs().get(1).getField(IdFieldMapper.NAME)); - assertNotNull(result.docs().get(1).getField(UidFieldMapper.NAME)); - assertEquals("type#1", result.docs().get(1).getField(UidFieldMapper.NAME).stringValue()); - assertEquals(UidFieldMapper.Defaults.FIELD_TYPE, result.docs().get(1).getField(UidFieldMapper.NAME).fieldType()); - assertNotNull(result.docs().get(1).getField(TypeFieldMapper.NAME)); - assertEquals("type", result.docs().get(1).getField(TypeFieldMapper.NAME).stringValue()); - assertEquals("value2", result.docs().get(1).getField("baz").binaryValue().utf8ToString()); - // Verify in the case where only a single type is allowed that the _id field is added to nested documents: - result = mapper2.parse(SourceToParse.source("index2", "type", "1", BytesReference.bytes(doc), XContentType.JSON)); + ParsedDocument result = mapper.parse(SourceToParse.source("index2", "type", "1", BytesReference.bytes(doc), XContentType.JSON)); assertEquals(2, result.docs().size()); // Nested document: - assertNull(result.docs().get(0).getField(UidFieldMapper.NAME)); assertNotNull(result.docs().get(0).getField(IdFieldMapper.NAME)); assertEquals(Uid.encodeId("1"), result.docs().get(0).getField(IdFieldMapper.NAME).binaryValue()); assertEquals(IdFieldMapper.Defaults.NESTED_FIELD_TYPE, result.docs().get(0).getField(IdFieldMapper.NAME).fieldType()); @@ -228,7 +202,6 @@ public void testNestedHaveIdAndTypeFields() throws Exception { assertEquals("__foo", result.docs().get(0).getField(TypeFieldMapper.NAME).stringValue()); assertEquals("value1", result.docs().get(0).getField("foo.bar").binaryValue().utf8ToString()); // Root document: - assertNull(result.docs().get(1).getField(UidFieldMapper.NAME)); assertNotNull(result.docs().get(1).getField(IdFieldMapper.NAME)); assertEquals(Uid.encodeId("1"), result.docs().get(1).getField(IdFieldMapper.NAME).binaryValue()); assertEquals(IdFieldMapper.Defaults.FIELD_TYPE, result.docs().get(1).getField(IdFieldMapper.NAME).fieldType()); diff --git a/server/src/test/java/org/elasticsearch/index/mapper/DynamicMappingIT.java b/server/src/test/java/org/elasticsearch/index/mapper/DynamicMappingIT.java index 5ee0740505cb8..94a7f60120d1b 100644 --- a/server/src/test/java/org/elasticsearch/index/mapper/DynamicMappingIT.java +++ b/server/src/test/java/org/elasticsearch/index/mapper/DynamicMappingIT.java @@ -97,26 +97,6 @@ public void testMappingsPropagatedToMasterNodeImmediately() throws IOException { assertMappingsHaveField(mappings, "index", "type", "bar"); } - public void testMappingsPropagatedToMasterNodeImmediatelyMultiType() throws IOException { - assertAcked(prepareCreate("index").setSettings(Settings.builder().put("index.version.created", Version.V_5_6_0.id))); - // allows for multiple types - - // works when the type has been dynamically created - client().prepareIndex("index", "type", "1").setSource("foo", 3).get(); - GetMappingsResponse mappings = client().admin().indices().prepareGetMappings("index").setTypes("type").get(); - assertMappingsHaveField(mappings, "index", "type", "foo"); - - // works if the type already existed - client().prepareIndex("index", "type", "1").setSource("bar", "baz").get(); - mappings = client().admin().indices().prepareGetMappings("index").setTypes("type").get(); - assertMappingsHaveField(mappings, "index", "type", "bar"); - - // works if we indexed an empty document - client().prepareIndex("index", "type2", "1").setSource().get(); - mappings = client().admin().indices().prepareGetMappings("index").setTypes("type2").get(); - assertTrue(mappings.getMappings().get("index").toString(), mappings.getMappings().get("index").containsKey("type2")); - } - public void testConcurrentDynamicUpdates() throws Throwable { createIndex("index"); final Thread[] indexThreads = new Thread[32]; diff --git a/server/src/test/java/org/elasticsearch/index/mapper/DynamicMappingTests.java b/server/src/test/java/org/elasticsearch/index/mapper/DynamicMappingTests.java index aaca31aeea3e6..30923b5a6559b 100644 --- a/server/src/test/java/org/elasticsearch/index/mapper/DynamicMappingTests.java +++ b/server/src/test/java/org/elasticsearch/index/mapper/DynamicMappingTests.java @@ -574,53 +574,6 @@ public void testMixTemplateMultiFieldAndMappingReuse() throws Exception { assertNull(parsed.dynamicMappingsUpdate()); } - public void testMixTemplateMultiFieldMultiTypeAndMappingReuse() throws Exception { - IndexService indexService = createIndex("test", Settings.builder().put("index.version.created", Version.V_5_6_0).build()); - XContentBuilder mappings1 = jsonBuilder().startObject() - .startObject("type1") - .startArray("dynamic_templates") - .startObject() - .startObject("template1") - .field("match_mapping_type", "string") - .startObject("mapping") - .field("type", "text") - .startObject("fields") - .startObject("raw") - .field("type", "keyword") - .endObject() - .endObject() - .endObject() - .endObject() - .endObject() - .endArray() - .endObject().endObject(); - indexService.mapperService().merge("type1", new CompressedXContent(BytesReference.bytes(mappings1)), MapperService.MergeReason.MAPPING_UPDATE); - XContentBuilder mappings2 = jsonBuilder().startObject() - .startObject("type2") - .startObject("properties") - .startObject("field") - .field("type", "text") - .endObject() - .endObject() - .endObject().endObject(); - indexService.mapperService().merge("type2", new CompressedXContent(BytesReference.bytes(mappings2)), MapperService.MergeReason.MAPPING_UPDATE); - - XContentBuilder json = XContentFactory.jsonBuilder().startObject() - .field("field", "foo") - .endObject(); - SourceToParse source = SourceToParse.source("test", "type1", "1", BytesReference.bytes(json), json.contentType()); - DocumentMapper mapper = indexService.mapperService().documentMapper("type1"); - assertNull(mapper.mappers().getMapper("field.raw")); - ParsedDocument parsed = mapper.parse(source); - assertNotNull(parsed.dynamicMappingsUpdate()); - - indexService.mapperService().merge("type1", new CompressedXContent(parsed.dynamicMappingsUpdate().toString()), MapperService.MergeReason.MAPPING_UPDATE); - mapper = indexService.mapperService().documentMapper("type1"); - assertNotNull(mapper.mappers().getMapper("field.raw")); - parsed = mapper.parse(source); - assertNull(parsed.dynamicMappingsUpdate()); - } - public void testDefaultFloatingPointMappings() throws IOException { MapperService mapperService = createIndex("test").mapperService(); String mapping = Strings.toString(jsonBuilder().startObject() diff --git a/server/src/test/java/org/elasticsearch/index/mapper/IdFieldMapperTests.java b/server/src/test/java/org/elasticsearch/index/mapper/IdFieldMapperTests.java index 764cabf65363b..18413100418ed 100644 --- a/server/src/test/java/org/elasticsearch/index/mapper/IdFieldMapperTests.java +++ b/server/src/test/java/org/elasticsearch/index/mapper/IdFieldMapperTests.java @@ -59,17 +59,7 @@ public void testIncludeInObjectNotAllowed() throws Exception { } } - public void testDefaultsMultipleTypes() throws IOException { - Settings indexSettings = Settings.builder() - .put("index.version.created", Version.V_5_6_0) - .build(); - MapperService mapperService = createIndex("test", indexSettings).mapperService(); - DocumentMapper mapper = mapperService.merge("type", new CompressedXContent("{\"type\":{}}"), MergeReason.MAPPING_UPDATE); - ParsedDocument document = mapper.parse(SourceToParse.source("index", "type", "id", new BytesArray("{}"), XContentType.JSON)); - assertEquals(Collections.emptyList(), Arrays.asList(document.rootDoc().getFields(IdFieldMapper.NAME))); - } - - public void testDefaultsSingleType() throws IOException { + public void testDefaults() throws IOException { Settings indexSettings = Settings.EMPTY; MapperService mapperService = createIndex("test", indexSettings).mapperService(); DocumentMapper mapper = mapperService.merge("type", new CompressedXContent("{\"type\":{}}"), MergeReason.MAPPING_UPDATE); diff --git a/server/src/test/java/org/elasticsearch/index/mapper/IdFieldTypeTests.java b/server/src/test/java/org/elasticsearch/index/mapper/IdFieldTypeTests.java index 5be1923cbed3c..f8b60db0e5da2 100644 --- a/server/src/test/java/org/elasticsearch/index/mapper/IdFieldTypeTests.java +++ b/server/src/test/java/org/elasticsearch/index/mapper/IdFieldTypeTests.java @@ -46,55 +46,6 @@ public void testRangeQuery() { assertEquals("Field [_id] of type [_id] does not support range queries", e.getMessage()); } - public void testTermsQueryWhenTypesAreEnabled() throws Exception { - QueryShardContext context = Mockito.mock(QueryShardContext.class); - Settings indexSettings = Settings.builder() - .put(IndexMetaData.SETTING_VERSION_CREATED, Version.V_5_6_0) // allows for multiple types - .put(IndexMetaData.SETTING_NUMBER_OF_REPLICAS, 0) - .put(IndexMetaData.SETTING_NUMBER_OF_SHARDS, 1) - .put(IndexMetaData.SETTING_INDEX_UUID, UUIDs.randomBase64UUID()).build(); - IndexMetaData indexMetaData = IndexMetaData.builder(IndexMetaData.INDEX_UUID_NA_VALUE).settings(indexSettings).build(); - IndexSettings mockSettings = new IndexSettings(indexMetaData, Settings.EMPTY); - Mockito.when(context.getIndexSettings()).thenReturn(mockSettings); - - MapperService mapperService = Mockito.mock(MapperService.class); - Collection types = Collections.emptySet(); - Mockito.when(context.queryTypes()).thenReturn(types); - Mockito.when(context.getMapperService()).thenReturn(mapperService); - - MappedFieldType ft = IdFieldMapper.defaultFieldType(mockSettings); - ft.setName(IdFieldMapper.NAME); - Query query = ft.termQuery("id", context); - assertEquals(new TermInSetQuery("_uid"), query); - - types = Collections.singleton("type"); - Mockito.when(context.queryTypes()).thenReturn(types); - query = ft.termQuery("id", context); - assertEquals(new TermInSetQuery("_uid", new BytesRef("type#id")), query); - } - - public void testTermsQueryWhenTypesAreDisabled() throws Exception { - QueryShardContext context = Mockito.mock(QueryShardContext.class); - Settings indexSettings = Settings.builder() - .put(IndexSettings.INDEX_MAPPING_SINGLE_TYPE_SETTING_KEY, true) - .put(IndexMetaData.SETTING_VERSION_CREATED, Version.V_5_6_0) - .put(IndexMetaData.SETTING_NUMBER_OF_REPLICAS, 0) - .put(IndexMetaData.SETTING_NUMBER_OF_SHARDS, 1) - .put(IndexMetaData.SETTING_INDEX_UUID, UUIDs.randomBase64UUID()).build(); - IndexMetaData indexMetaData = IndexMetaData.builder(IndexMetaData.INDEX_UUID_NA_VALUE).settings(indexSettings).build(); - IndexSettings mockSettings = new IndexSettings(indexMetaData, Settings.EMPTY); - Mockito.when(context.getIndexSettings()).thenReturn(mockSettings); - Mockito.when(context.indexVersionCreated()).thenReturn(indexSettings.getAsVersion(IndexMetaData.SETTING_VERSION_CREATED, null)); - - MapperService mapperService = Mockito.mock(MapperService.class); - Collection types = Collections.singleton("type"); - Mockito.when(context.queryTypes()).thenReturn(types); - Mockito.when(context.getMapperService()).thenReturn(mapperService); - MappedFieldType ft = IdFieldMapper.defaultFieldType(mockSettings); - Query query = ft.termQuery("id", context); - assertEquals(new TermInSetQuery("_id", new BytesRef("id")), query); - } - public void testTermsQuery() throws Exception { QueryShardContext context = Mockito.mock(QueryShardContext.class); Settings indexSettings = Settings.builder() diff --git a/server/src/test/java/org/elasticsearch/index/mapper/MapperServiceTests.java b/server/src/test/java/org/elasticsearch/index/mapper/MapperServiceTests.java index 732fa9bad184c..59ef784aea3a2 100644 --- a/server/src/test/java/org/elasticsearch/index/mapper/MapperServiceTests.java +++ b/server/src/test/java/org/elasticsearch/index/mapper/MapperServiceTests.java @@ -195,51 +195,6 @@ public void testMergeWithMap() throws Throwable { assertThat(e.getMessage(), startsWith("Failed to parse mapping [type1]: ")); } - public void testMergeParentTypesSame() { - // Verifies that a merge (absent a DocumentMapper change) - // doesn't change the parentTypes reference. - // The collection was being rewrapped with each merge - // in v5.2 resulting in eventual StackOverflowErrors. - // https://github.com/elastic/elasticsearch/issues/23604 - - IndexService indexService1 = createIndex("index1"); - MapperService mapperService = indexService1.mapperService(); - Set parentTypes = mapperService.getParentTypes(); - - Map> mappings = new HashMap<>(); - mapperService.merge(mappings, MergeReason.MAPPING_UPDATE); - assertSame(parentTypes, mapperService.getParentTypes()); - } - - public void testOtherDocumentMappersOnlyUpdatedWhenChangingFieldType() throws IOException { - IndexService indexService = createIndex("test", - Settings.builder().put("index.version.created", Version.V_5_6_0).build()); // multiple types - - CompressedXContent simpleMapping = new CompressedXContent(BytesReference.bytes(XContentFactory.jsonBuilder().startObject() - .startObject("properties") - .startObject("field") - .field("type", "text") - .endObject() - .endObject().endObject())); - - indexService.mapperService().merge("type1", simpleMapping, MergeReason.MAPPING_UPDATE); - DocumentMapper documentMapper = indexService.mapperService().documentMapper("type1"); - - indexService.mapperService().merge("type2", simpleMapping, MergeReason.MAPPING_UPDATE); - assertSame(indexService.mapperService().documentMapper("type1"), documentMapper); - - CompressedXContent normsDisabledMapping = new CompressedXContent(BytesReference.bytes(XContentFactory.jsonBuilder().startObject() - .startObject("properties") - .startObject("field") - .field("type", "text") - .field("norms", false) - .endObject() - .endObject().endObject())); - - indexService.mapperService().merge("type3", normsDisabledMapping, MergeReason.MAPPING_UPDATE); - assertNotSame(indexService.mapperService().documentMapper("type1"), documentMapper); - } - public void testPartitionedConstraints() { // partitioned index must have routing IllegalArgumentException noRoutingException = expectThrows(IllegalArgumentException.class, () -> { @@ -252,18 +207,6 @@ public void testPartitionedConstraints() { }); assertTrue(noRoutingException.getMessage(), noRoutingException.getMessage().contains("must have routing")); - // partitioned index cannot have parent/child relationships - IllegalArgumentException parentException = expectThrows(IllegalArgumentException.class, () -> { - client().admin().indices().prepareCreate("test-index") - .addMapping("child", "{\"child\": {\"_routing\":{\"required\":true}, \"_parent\": {\"type\": \"parent\"}}}", - XContentType.JSON) - .setSettings(Settings.builder() - .put("index.number_of_shards", 4) - .put("index.routing_partition_size", 2)) - .execute().actionGet(); - }); - assertTrue(parentException.getMessage(), parentException.getMessage().contains("cannot have a _parent field")); - // valid partitioned index assertTrue(client().admin().indices().prepareCreate("test-index") .addMapping("type", "{\"type\":{\"_routing\":{\"required\":true}}}", XContentType.JSON) diff --git a/server/src/test/java/org/elasticsearch/index/mapper/NestedObjectMapperTests.java b/server/src/test/java/org/elasticsearch/index/mapper/NestedObjectMapperTests.java index 8bb9d84f576d9..916a9d093d12a 100644 --- a/server/src/test/java/org/elasticsearch/index/mapper/NestedObjectMapperTests.java +++ b/server/src/test/java/org/elasticsearch/index/mapper/NestedObjectMapperTests.java @@ -465,37 +465,6 @@ public void testLimitOfNestedFieldsPerIndex() throws Exception { .mapperService().merge("type", new CompressedXContent(mapping.apply("type")), MergeReason.MAPPING_RECOVERY); } - public void testLimitOfNestedFieldsWithMultiTypePerIndex() throws Exception { - Function mapping = type -> { - try { - return Strings.toString(XContentFactory.jsonBuilder().startObject().startObject(type).startObject("properties") - .startObject("nested1").field("type", "nested").startObject("properties") - .startObject("nested2").field("type", "nested") - .endObject().endObject().endObject() - .endObject().endObject().endObject()); - } catch (IOException e) { - throw new UncheckedIOException(e); - } - }; - - MapperService mapperService = createIndex("test4", Settings.builder() - .put("index.version.created", Version.V_5_6_0) - .put(MapperService.INDEX_MAPPING_NESTED_FIELDS_LIMIT_SETTING.getKey(), 2).build()).mapperService(); - mapperService.merge("type1", new CompressedXContent(mapping.apply("type1")), MergeReason.MAPPING_UPDATE); - // merging same fields, but different type is ok - mapperService.merge("type2", new CompressedXContent(mapping.apply("type2")), MergeReason.MAPPING_UPDATE); - // adding new fields from different type is not ok - String mapping2 = Strings.toString(XContentFactory.jsonBuilder().startObject().startObject("type3").startObject("properties").startObject("nested3") - .field("type", "nested").startObject("properties").endObject().endObject().endObject().endObject().endObject()); - IllegalArgumentException e = expectThrows(IllegalArgumentException.class, () -> - mapperService.merge("type3", new CompressedXContent(mapping2), MergeReason.MAPPING_UPDATE)); - assertThat(e.getMessage(), containsString("Limit of nested fields [2] in index [test4] has been exceeded")); - - // do not check nested fields limit if mapping is not updated - createIndex("test5", Settings.builder().put(MapperService.INDEX_MAPPING_NESTED_FIELDS_LIMIT_SETTING.getKey(), 0).build()) - .mapperService().merge("type", new CompressedXContent(mapping.apply("type")), MergeReason.MAPPING_RECOVERY); - } - public void testParentObjectMapperAreNested() throws Exception { MapperService mapperService = createIndex("index1", Settings.EMPTY, "_doc", jsonBuilder().startObject() .startObject("properties") diff --git a/server/src/test/java/org/elasticsearch/index/mapper/ParentFieldMapperTests.java b/server/src/test/java/org/elasticsearch/index/mapper/ParentFieldMapperTests.java deleted file mode 100644 index f399902920e33..0000000000000 --- a/server/src/test/java/org/elasticsearch/index/mapper/ParentFieldMapperTests.java +++ /dev/null @@ -1,163 +0,0 @@ -/* - * Licensed to Elasticsearch under one or more contributor - * license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright - * ownership. Elasticsearch licenses this file to you under - * the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.elasticsearch.index.mapper; - -import org.apache.lucene.analysis.standard.StandardAnalyzer; -import org.apache.lucene.index.IndexableField; -import org.elasticsearch.Version; -import org.elasticsearch.common.Strings; -import org.elasticsearch.common.bytes.BytesArray; -import org.elasticsearch.common.bytes.BytesReference; -import org.elasticsearch.common.compress.CompressedXContent; -import org.elasticsearch.common.settings.Settings; -import org.elasticsearch.common.xcontent.XContentBuilder; -import org.elasticsearch.common.xcontent.XContentFactory; -import org.elasticsearch.common.xcontent.XContentType; -import org.elasticsearch.index.Index; -import org.elasticsearch.index.IndexService; -import org.elasticsearch.index.IndexSettings; -import org.elasticsearch.index.analysis.AnalyzerScope; -import org.elasticsearch.index.analysis.IndexAnalyzers; -import org.elasticsearch.index.analysis.NamedAnalyzer; -import org.elasticsearch.index.mapper.MapperService.MergeReason; -import org.elasticsearch.index.similarity.SimilarityService; -import org.elasticsearch.indices.IndicesModule; -import org.elasticsearch.plugins.Plugin; -import org.elasticsearch.test.ESSingleNodeTestCase; -import org.elasticsearch.test.IndexSettingsModule; -import org.elasticsearch.test.InternalSettingsPlugin; - -import java.io.IOException; -import java.util.Collection; -import java.util.Collections; -import java.util.HashSet; -import java.util.Set; - -import static java.util.Collections.emptyList; -import static org.elasticsearch.common.xcontent.XContentFactory.jsonBuilder; - -public class ParentFieldMapperTests extends ESSingleNodeTestCase { - - @Override - protected Collection> getPlugins() { - return Collections.singleton(InternalSettingsPlugin.class); - } - - public void testParentSetInDocNotAllowed() throws Exception { - String mapping = Strings.toString(XContentFactory.jsonBuilder().startObject().startObject("type") - .endObject().endObject()); - DocumentMapper docMapper = createIndex("test").mapperService().documentMapperParser().parse("type", new CompressedXContent(mapping)); - - try { - docMapper.parse(SourceToParse.source("test", "type", "1", BytesReference.bytes(XContentFactory.jsonBuilder() - .startObject().field("_parent", "1122").endObject()), XContentType.JSON)); - fail("Expected failure to parse metadata field"); - } catch (MapperParsingException e) { - assertTrue(e.getMessage(), e.getMessage().contains("Field [_parent] is a metadata field and cannot be added inside a document")); - } - } - - public void testJoinFieldSet() throws Exception { - String parentMapping = Strings.toString(XContentFactory.jsonBuilder().startObject().startObject("parent_type") - .endObject().endObject()); - String childMapping = Strings.toString(XContentFactory.jsonBuilder().startObject().startObject("child_type") - .startObject("_parent").field("type", "parent_type").endObject() - .endObject().endObject()); - IndexService indexService = createIndex("test", Settings.builder().put("index.version.created", Version.V_5_6_0).build()); - indexService.mapperService().merge("parent_type", new CompressedXContent(parentMapping), MergeReason.MAPPING_UPDATE); - indexService.mapperService().merge("child_type", new CompressedXContent(childMapping), MergeReason.MAPPING_UPDATE); - - // Indexing parent doc: - DocumentMapper parentDocMapper = indexService.mapperService().documentMapper("parent_type"); - ParsedDocument doc = - parentDocMapper.parse(SourceToParse.source("test", "parent_type", "1122", new BytesArray("{}"), XContentType.JSON)); - assertEquals(1, getNumberOfFieldWithParentPrefix(doc.rootDoc())); - assertEquals("1122", doc.rootDoc().getBinaryValue("_parent#parent_type").utf8ToString()); - - // Indexing child doc: - DocumentMapper childDocMapper = indexService.mapperService().documentMapper("child_type"); - doc = childDocMapper.parse(SourceToParse.source("test", "child_type", "1", new BytesArray("{}"), XContentType.JSON).parent("1122")); - - assertEquals(1, getNumberOfFieldWithParentPrefix(doc.rootDoc())); - assertEquals("1122", doc.rootDoc().getBinaryValue("_parent#parent_type").utf8ToString()); - } - - public void testJoinFieldNotSet() throws Exception { - String mapping = Strings.toString(XContentFactory.jsonBuilder().startObject().startObject("type") - .endObject().endObject()); - DocumentMapper docMapper = createIndex("test").mapperService().documentMapperParser().parse("type", new CompressedXContent(mapping)); - ParsedDocument doc = docMapper.parse(SourceToParse.source("test", "type", "1", BytesReference - .bytes(XContentFactory.jsonBuilder() - .startObject() - .field("x_field", "x_value") - .endObject()), XContentType.JSON)); - assertEquals(0, getNumberOfFieldWithParentPrefix(doc.rootDoc())); - } - - public void testNoParentNullFieldCreatedIfNoParentSpecified() throws Exception { - Index index = new Index("_index", "testUUID"); - IndexSettings indexSettings = IndexSettingsModule.newIndexSettings(index, Settings.EMPTY); - NamedAnalyzer namedAnalyzer = new NamedAnalyzer("default", AnalyzerScope.INDEX, new StandardAnalyzer()); - IndexAnalyzers indexAnalyzers = new IndexAnalyzers(indexSettings, namedAnalyzer, namedAnalyzer, namedAnalyzer, - Collections.emptyMap(), Collections.emptyMap()); - SimilarityService similarityService = new SimilarityService(indexSettings, null, Collections.emptyMap()); - MapperService mapperService = new MapperService(indexSettings, indexAnalyzers, xContentRegistry(), similarityService, - new IndicesModule(emptyList()).getMapperRegistry(), () -> null); - XContentBuilder mappingSource = jsonBuilder().startObject().startObject("some_type") - .startObject("properties") - .endObject() - .endObject().endObject(); - mapperService.merge("some_type", new CompressedXContent(Strings.toString(mappingSource)), MergeReason.MAPPING_UPDATE); - Set allFields = new HashSet<>(mapperService.simpleMatchToIndexNames("*")); - assertTrue(allFields.contains("_parent")); - assertFalse(allFields.contains("_parent#null")); - MappedFieldType fieldType = mapperService.fullName("_parent"); - assertFalse(fieldType.eagerGlobalOrdinals()); - } - - private static int getNumberOfFieldWithParentPrefix(ParseContext.Document doc) { - int numFieldWithParentPrefix = 0; - for (IndexableField field : doc) { - if (field.name().startsWith("_parent")) { - numFieldWithParentPrefix++; - } - } - return numFieldWithParentPrefix; - } - - public void testUpdateEagerGlobalOrds() throws IOException { - String parentMapping = Strings.toString(XContentFactory.jsonBuilder().startObject().startObject("parent_type") - .endObject().endObject()); - String childMapping = Strings.toString(XContentFactory.jsonBuilder().startObject().startObject("child_type") - .startObject("_parent").field("type", "parent_type").endObject() - .endObject().endObject()); - IndexService indexService = createIndex("test", Settings.builder().put("index.version.created", Version.V_5_6_0).build()); - indexService.mapperService().merge("parent_type", new CompressedXContent(parentMapping), MergeReason.MAPPING_UPDATE); - indexService.mapperService().merge("child_type", new CompressedXContent(childMapping), MergeReason.MAPPING_UPDATE); - - assertTrue(indexService.mapperService().documentMapper("child_type").parentFieldMapper().fieldType().eagerGlobalOrdinals()); - - String childMappingUpdate = Strings.toString(XContentFactory.jsonBuilder().startObject().startObject("child_type") - .startObject("_parent").field("type", "parent_type").field("eager_global_ordinals", false).endObject() - .endObject().endObject()); - indexService.mapperService().merge("child_type", new CompressedXContent(childMappingUpdate), MergeReason.MAPPING_UPDATE); - - assertFalse(indexService.mapperService().documentMapper("child_type").parentFieldMapper().fieldType().eagerGlobalOrdinals()); - } -} diff --git a/server/src/test/java/org/elasticsearch/index/mapper/ParentFieldTypeTests.java b/server/src/test/java/org/elasticsearch/index/mapper/ParentFieldTypeTests.java deleted file mode 100644 index 64adad9aa4818..0000000000000 --- a/server/src/test/java/org/elasticsearch/index/mapper/ParentFieldTypeTests.java +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Licensed to Elasticsearch under one or more contributor - * license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright - * ownership. Elasticsearch licenses this file to you under - * the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.elasticsearch.index.mapper; - -import org.elasticsearch.index.mapper.MappedFieldType; -import org.elasticsearch.index.mapper.ParentFieldMapper; - -public class ParentFieldTypeTests extends FieldTypeTestCase { - @Override - protected MappedFieldType createDefaultFieldType() { - return new ParentFieldMapper.ParentFieldType(); - } -} diff --git a/server/src/test/java/org/elasticsearch/index/mapper/TypeFieldMapperTests.java b/server/src/test/java/org/elasticsearch/index/mapper/TypeFieldMapperTests.java index 4687a3a24ef74..4e30d9c92aed6 100644 --- a/server/src/test/java/org/elasticsearch/index/mapper/TypeFieldMapperTests.java +++ b/server/src/test/java/org/elasticsearch/index/mapper/TypeFieldMapperTests.java @@ -88,19 +88,7 @@ public void testDocValues(boolean singleType) throws IOException { dir.close(); } - public void testDefaultsMultipleTypes() throws IOException { - Settings indexSettings = Settings.builder() - .put("index.version.created", Version.V_5_6_0) - .build(); - MapperService mapperService = createIndex("test", indexSettings).mapperService(); - DocumentMapper mapper = mapperService.merge("type", new CompressedXContent("{\"type\":{}}"), MergeReason.MAPPING_UPDATE); - ParsedDocument document = mapper.parse(SourceToParse.source("index", "type", "id", new BytesArray("{}"), XContentType.JSON)); - IndexableField[] fields = document.rootDoc().getFields(TypeFieldMapper.NAME); - assertEquals(IndexOptions.DOCS, fields[0].fieldType().indexOptions()); - assertEquals(DocValuesType.SORTED_SET, fields[1].fieldType().docValuesType()); - } - - public void testDefaultsSingleType() throws IOException { + public void testDefaults() throws IOException { Settings indexSettings = Settings.EMPTY; MapperService mapperService = createIndex("test", indexSettings).mapperService(); DocumentMapper mapper = mapperService.merge("type", new CompressedXContent("{\"type\":{}}"), MergeReason.MAPPING_UPDATE); diff --git a/server/src/test/java/org/elasticsearch/index/mapper/TypeFieldTypeTests.java b/server/src/test/java/org/elasticsearch/index/mapper/TypeFieldTypeTests.java index 1fdfb52b47f67..e8bf09ca5fa61 100644 --- a/server/src/test/java/org/elasticsearch/index/mapper/TypeFieldTypeTests.java +++ b/server/src/test/java/org/elasticsearch/index/mapper/TypeFieldTypeTests.java @@ -22,21 +22,10 @@ import org.apache.lucene.document.Field.Store; import org.apache.lucene.document.StringField; import org.apache.lucene.index.DirectoryReader; -import org.apache.lucene.index.IndexReader; import org.apache.lucene.index.IndexWriter; -import org.apache.lucene.index.Term; -import org.apache.lucene.search.BooleanClause.Occur; -import org.apache.lucene.search.BooleanQuery; -import org.apache.lucene.search.ConstantScoreQuery; -import org.apache.lucene.search.IndexSearcher; import org.apache.lucene.search.MatchAllDocsQuery; import org.apache.lucene.search.MatchNoDocsQuery; -import org.apache.lucene.search.PhraseQuery; import org.apache.lucene.search.Query; -import org.apache.lucene.search.TermQuery; -import org.apache.lucene.store.Directory; -import org.apache.lucene.util.BytesRef; -import org.elasticsearch.core.internal.io.IOUtils; import org.elasticsearch.Version; import org.elasticsearch.cluster.metadata.IndexMetaData; import org.elasticsearch.common.UUIDs; @@ -57,7 +46,7 @@ protected MappedFieldType createDefaultFieldType() { return new TypeFieldMapper.TypeFieldType(); } - public void testTermsQueryWhenTypesAreDisabled() throws Exception { + public void testTermsQuery() throws Exception { QueryShardContext context = Mockito.mock(QueryShardContext.class); Version indexVersionCreated = VersionUtils.randomVersionBetween(random(), Version.V_6_0_0, Version.CURRENT); Settings indexSettings = Settings.builder() @@ -95,76 +84,6 @@ public void testTermsQueryWhenTypesAreDisabled() throws Exception { assertEquals(new MatchNoDocsQuery(), query); } - public void testTermsQueryWhenTypesAreEnabled() throws Exception { - Directory dir = newDirectory(); - IndexWriter w = new IndexWriter(dir, newIndexWriterConfig()); - IndexReader reader = openReaderWithNewType("my_type", w); - - QueryShardContext context = Mockito.mock(QueryShardContext.class); - Settings indexSettings = Settings.builder() - .put(IndexMetaData.SETTING_VERSION_CREATED, Version.V_5_6_0) // to allow for multiple types - .put(IndexMetaData.SETTING_NUMBER_OF_REPLICAS, 0) - .put(IndexMetaData.SETTING_NUMBER_OF_SHARDS, 1) - .put(IndexMetaData.SETTING_INDEX_UUID, UUIDs.randomBase64UUID()) - .build(); - IndexMetaData indexMetaData = IndexMetaData.builder(IndexMetaData.INDEX_UUID_NA_VALUE).settings(indexSettings).build(); - IndexSettings mockSettings = new IndexSettings(indexMetaData, Settings.EMPTY); - Mockito.when(context.getIndexSettings()).thenReturn(mockSettings); - - TypeFieldMapper.TypeFieldType ft = new TypeFieldMapper.TypeFieldType(); - ft.setName(TypeFieldMapper.NAME); - Query query = ft.termQuery("my_type", context); - assertEquals(new MatchAllDocsQuery(), query.rewrite(reader)); - - // Make sure that Lucene actually simplifies the query when there is a single type - Query userQuery = new PhraseQuery("body", "quick", "fox"); - Query filteredQuery = new BooleanQuery.Builder().add(userQuery, Occur.MUST).add(query, Occur.FILTER).build(); - Query rewritten = new IndexSearcher(reader).rewrite(filteredQuery); - assertEquals(userQuery, rewritten); - - // ... and does not rewrite it if there is more than one type - reader.close(); - reader = openReaderWithNewType("my_type2", w); - Query expected = new ConstantScoreQuery( - new BooleanQuery.Builder() - .add(new TermQuery(new Term(TypeFieldMapper.NAME, "my_type")), Occur.SHOULD) - .build() - ); - assertEquals(expected, query.rewrite(reader)); - - BytesRef[] types = - new BytesRef[] {new BytesRef("my_type"), new BytesRef("my_type2"), new BytesRef("my_type3")}; - // the query should match all documents - query = new TypeFieldMapper.TypesQuery(types); - assertEquals(new MatchAllDocsQuery(), query.rewrite(reader)); - - reader.close(); - reader = openReaderWithNewType("unknown_type", w); - // the query cannot rewrite to a match all docs sinc unknown_type is not queried. - query = new TypeFieldMapper.TypesQuery(types); - expected = - new ConstantScoreQuery( - new BooleanQuery.Builder() - .add(new TermQuery(new Term(TypeFieldMapper.CONTENT_TYPE, types[0])), Occur.SHOULD) - .add(new TermQuery(new Term(TypeFieldMapper.CONTENT_TYPE, types[1])), Occur.SHOULD) - .build() - ); - rewritten = query.rewrite(reader); - assertEquals(expected, rewritten); - - // make sure that redundant types does not rewrite to MatchAllDocsQuery - query = new TypeFieldMapper.TypesQuery(new BytesRef("my_type"), new BytesRef("my_type"), new BytesRef("my_type")); - expected = - new ConstantScoreQuery( - new BooleanQuery.Builder() - .add(new TermQuery(new Term(TypeFieldMapper.CONTENT_TYPE, "my_type")), Occur.SHOULD) - .build() - ); - rewritten = query.rewrite(reader); - assertEquals(expected, rewritten); - - IOUtils.close(reader, w, dir); - } static DirectoryReader openReaderWithNewType(String type, IndexWriter writer) throws IOException { Document doc = new Document(); diff --git a/server/src/test/java/org/elasticsearch/index/mapper/UidFieldMapperTests.java b/server/src/test/java/org/elasticsearch/index/mapper/UidFieldMapperTests.java deleted file mode 100644 index 4128cec082e0a..0000000000000 --- a/server/src/test/java/org/elasticsearch/index/mapper/UidFieldMapperTests.java +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Licensed to Elasticsearch under one or more contributor - * license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright - * ownership. Elasticsearch licenses this file to you under - * the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package org.elasticsearch.index.mapper; - -import org.apache.lucene.index.IndexOptions; -import org.apache.lucene.index.IndexableField; -import org.elasticsearch.Version; -import org.elasticsearch.common.bytes.BytesArray; -import org.elasticsearch.common.compress.CompressedXContent; -import org.elasticsearch.common.settings.Settings; -import org.elasticsearch.common.xcontent.XContentType; -import org.elasticsearch.index.mapper.MapperService.MergeReason; -import org.elasticsearch.plugins.Plugin; -import org.elasticsearch.test.ESSingleNodeTestCase; -import org.elasticsearch.test.InternalSettingsPlugin; - -import java.io.IOException; -import java.util.Arrays; -import java.util.Collection; -import java.util.Collections; - -public class UidFieldMapperTests extends ESSingleNodeTestCase { - - @Override - protected Collection> getPlugins() { - return Collections.singleton(InternalSettingsPlugin.class); - } - - public void testDefaultsMultipleTypes() throws IOException { - Settings indexSettings = Settings.builder() - .put("index.version.created", Version.V_5_6_0) - .build(); - MapperService mapperService = createIndex("test", indexSettings).mapperService(); - DocumentMapper mapper = mapperService.merge("type", new CompressedXContent("{\"type\":{}}"), MergeReason.MAPPING_UPDATE); - ParsedDocument document = mapper.parse(SourceToParse.source("index", "type", "id", new BytesArray("{}"), XContentType.JSON)); - IndexableField[] fields = document.rootDoc().getFields(UidFieldMapper.NAME); - assertEquals(1, fields.length); - assertEquals(IndexOptions.DOCS, fields[0].fieldType().indexOptions()); - assertTrue(fields[0].fieldType().stored()); - assertEquals("type#id", fields[0].stringValue()); - } - - public void testDefaultsSingleType() throws IOException { - Settings indexSettings = Settings.EMPTY; - MapperService mapperService = createIndex("test", indexSettings).mapperService(); - DocumentMapper mapper = mapperService.merge("type", new CompressedXContent("{\"type\":{}}"), MergeReason.MAPPING_UPDATE); - ParsedDocument document = mapper.parse(SourceToParse.source("index", "type", "id", new BytesArray("{}"), XContentType.JSON)); - assertEquals(Collections.emptyList(), Arrays.asList(document.rootDoc().getFields(UidFieldMapper.NAME))); - } -} diff --git a/server/src/test/java/org/elasticsearch/index/mapper/UidFieldTypeTests.java b/server/src/test/java/org/elasticsearch/index/mapper/UidFieldTypeTests.java deleted file mode 100644 index 9b2e0ceb0721f..0000000000000 --- a/server/src/test/java/org/elasticsearch/index/mapper/UidFieldTypeTests.java +++ /dev/null @@ -1,135 +0,0 @@ -/* - * Licensed to Elasticsearch under one or more contributor - * license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright - * ownership. Elasticsearch licenses this file to you under - * the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.elasticsearch.index.mapper; - -import org.apache.lucene.search.MatchNoDocsQuery; -import org.apache.lucene.search.Query; -import org.apache.lucene.search.TermInSetQuery; -import org.apache.lucene.util.BytesRef; -import org.elasticsearch.Version; -import org.elasticsearch.cluster.metadata.IndexMetaData; -import org.elasticsearch.common.UUIDs; -import org.elasticsearch.common.settings.Settings; -import org.elasticsearch.index.IndexSettings; -import org.elasticsearch.index.mapper.MappedFieldType; -import org.elasticsearch.index.mapper.UidFieldMapper; -import org.elasticsearch.index.query.QueryShardContext; -import org.mockito.Mockito; - -import java.util.Collection; -import java.util.Collections; - -public class UidFieldTypeTests extends FieldTypeTestCase { - @Override - protected MappedFieldType createDefaultFieldType() { - return new UidFieldMapper.UidFieldType(); - } - - public void testRangeQuery() { - MappedFieldType ft = createDefaultFieldType(); - ft.setName("_uid"); - IllegalArgumentException e = expectThrows(IllegalArgumentException.class, - () -> ft.rangeQuery(null, null, randomBoolean(), randomBoolean(), null, null, null, null)); - assertEquals("Field [_uid] of type [_uid] does not support range queries", e.getMessage()); - } - - public void testTermsQueryWhenTypesAreEnabled() throws Exception { - QueryShardContext context = Mockito.mock(QueryShardContext.class); - Settings indexSettings = Settings.builder() - .put(IndexMetaData.SETTING_VERSION_CREATED, Version.V_5_6_0) // to allow for multipel types - .put(IndexMetaData.SETTING_NUMBER_OF_REPLICAS, 0) - .put(IndexMetaData.SETTING_NUMBER_OF_SHARDS, 1) - .put(IndexMetaData.SETTING_INDEX_UUID, UUIDs.randomBase64UUID()) - .build(); - IndexMetaData indexMetaData = IndexMetaData.builder(IndexMetaData.INDEX_UUID_NA_VALUE).settings(indexSettings).build(); - IndexSettings mockSettings = new IndexSettings(indexMetaData, Settings.EMPTY); - Mockito.when(context.getIndexSettings()).thenReturn(mockSettings); - - MapperService mapperService = Mockito.mock(MapperService.class); - Collection types = Collections.emptySet(); - Mockito.when(context.queryTypes()).thenReturn(types); - Mockito.when(context.getMapperService()).thenReturn(mapperService); - - MappedFieldType ft = UidFieldMapper.defaultFieldType(mockSettings); - ft.setName(UidFieldMapper.NAME); - Query query = ft.termQuery("type#id", context); - assertEquals(new TermInSetQuery("_uid", new BytesRef("type#id")), query); - } - - public void testTermsQueryWhenTypesAreDisabled() throws Exception { - QueryShardContext context = Mockito.mock(QueryShardContext.class); - Settings indexSettings = Settings.builder() - .put(IndexSettings.INDEX_MAPPING_SINGLE_TYPE_SETTING_KEY, true) - .put(IndexMetaData.SETTING_VERSION_CREATED, Version.V_5_6_0) - .put(IndexMetaData.SETTING_NUMBER_OF_REPLICAS, 0) - .put(IndexMetaData.SETTING_NUMBER_OF_SHARDS, 1) - .put(IndexMetaData.SETTING_INDEX_UUID, UUIDs.randomBase64UUID()).build(); - IndexMetaData indexMetaData = IndexMetaData.builder(IndexMetaData.INDEX_UUID_NA_VALUE).settings(indexSettings).build(); - IndexSettings mockSettings = new IndexSettings(indexMetaData, Settings.EMPTY); - Mockito.when(context.getIndexSettings()).thenReturn(mockSettings); - - MapperService mapperService = Mockito.mock(MapperService.class); - Collection types = Collections.emptySet(); - Mockito.when(mapperService.types()).thenReturn(types); - Mockito.when(context.getMapperService()).thenReturn(mapperService); - Mockito.when(context.indexVersionCreated()).thenReturn(indexSettings.getAsVersion(IndexMetaData.SETTING_VERSION_CREATED, null)); - - MappedFieldType ft = UidFieldMapper.defaultFieldType(mockSettings); - ft.setName(UidFieldMapper.NAME); - Query query = ft.termQuery("type#id", context); - assertEquals(new MatchNoDocsQuery(), query); - - types = Collections.singleton("type"); - Mockito.when(mapperService.types()).thenReturn(types); - query = ft.termQuery("type#id", context); - assertEquals(new TermInSetQuery("_id", new BytesRef("id")), query); - query = ft.termQuery("type2#id", context); - assertEquals(new TermInSetQuery("_id"), query); - } - - public void testTermsQuery() throws Exception { - QueryShardContext context = Mockito.mock(QueryShardContext.class); - Settings indexSettings = Settings.builder() - .put(IndexMetaData.SETTING_VERSION_CREATED, Version.CURRENT) - .put(IndexMetaData.SETTING_NUMBER_OF_REPLICAS, 0) - .put(IndexMetaData.SETTING_NUMBER_OF_SHARDS, 1) - .put(IndexMetaData.SETTING_INDEX_UUID, UUIDs.randomBase64UUID()).build(); - IndexMetaData indexMetaData = IndexMetaData.builder(IndexMetaData.INDEX_UUID_NA_VALUE).settings(indexSettings).build(); - IndexSettings mockSettings = new IndexSettings(indexMetaData, Settings.EMPTY); - Mockito.when(context.getIndexSettings()).thenReturn(mockSettings); - - MapperService mapperService = Mockito.mock(MapperService.class); - Collection types = Collections.emptySet(); - Mockito.when(mapperService.types()).thenReturn(types); - Mockito.when(context.getMapperService()).thenReturn(mapperService); - Mockito.when(context.indexVersionCreated()).thenReturn(indexSettings.getAsVersion(IndexMetaData.SETTING_VERSION_CREATED, null)); - - MappedFieldType ft = UidFieldMapper.defaultFieldType(mockSettings); - ft.setName(UidFieldMapper.NAME); - Query query = ft.termQuery("type#id", context); - assertEquals(new MatchNoDocsQuery(), query); - - types = Collections.singleton("type"); - Mockito.when(mapperService.types()).thenReturn(types); - query = ft.termQuery("type#id", context); - assertEquals(new TermInSetQuery("_id", Uid.encodeId("id")), query); - query = ft.termQuery("type2#id", context); - assertEquals(new TermInSetQuery("_id"), query); - } -} diff --git a/server/src/test/java/org/elasticsearch/index/mapper/UidTests.java b/server/src/test/java/org/elasticsearch/index/mapper/UidTests.java index c4fb94abd3846..35e54d6caa8b5 100644 --- a/server/src/test/java/org/elasticsearch/index/mapper/UidTests.java +++ b/server/src/test/java/org/elasticsearch/index/mapper/UidTests.java @@ -25,23 +25,7 @@ import java.util.Arrays; import java.util.Base64; -import static org.hamcrest.Matchers.equalTo; - public class UidTests extends ESTestCase { - public void testCreateAndSplitId() { - BytesRef createUid = Uid.createUidAsBytes("foo", "bar"); - BytesRef[] splitUidIntoTypeAndId = splitUidIntoTypeAndId(createUid); - assertThat("foo", equalTo(splitUidIntoTypeAndId[0].utf8ToString())); - assertThat("bar", equalTo(splitUidIntoTypeAndId[1].utf8ToString())); - // split also with an offset - BytesRef ref = new BytesRef(createUid.length+10); - ref.offset = 9; - ref.length = createUid.length; - System.arraycopy(createUid.bytes, createUid.offset, ref.bytes, ref.offset, ref.length); - splitUidIntoTypeAndId = splitUidIntoTypeAndId(ref); - assertThat("foo", equalTo(splitUidIntoTypeAndId[0].utf8ToString())); - assertThat("bar", equalTo(splitUidIntoTypeAndId[1].utf8ToString())); - } public static BytesRef[] splitUidIntoTypeAndId(BytesRef uid) { int loc = -1; diff --git a/server/src/test/java/org/elasticsearch/index/mapper/UpdateMappingTests.java b/server/src/test/java/org/elasticsearch/index/mapper/UpdateMappingTests.java index 311257b837d1b..f21a1d97798b3 100644 --- a/server/src/test/java/org/elasticsearch/index/mapper/UpdateMappingTests.java +++ b/server/src/test/java/org/elasticsearch/index/mapper/UpdateMappingTests.java @@ -138,44 +138,6 @@ public void testConflictNewType() throws Exception { equalTo("long")); } - // same as the testConflictNewType except that the mapping update is on an existing type - public void testConflictNewTypeUpdate() throws Exception { - XContentBuilder mapping1 = XContentFactory.jsonBuilder().startObject().startObject("type1") - .startObject("properties").startObject("foo").field("type", "long").endObject() - .endObject().endObject().endObject(); - XContentBuilder mapping2 = XContentFactory.jsonBuilder().startObject().startObject("type2").endObject().endObject(); - MapperService mapperService = createIndex("test", Settings.builder().put("index.version.created", - Version.V_5_6_0).build()).mapperService(); - - mapperService.merge("type1", new CompressedXContent(Strings.toString(mapping1)), MapperService.MergeReason.MAPPING_UPDATE); - mapperService.merge("type2", new CompressedXContent(Strings.toString(mapping2)), MapperService.MergeReason.MAPPING_UPDATE); - - XContentBuilder update = XContentFactory.jsonBuilder().startObject().startObject("type2") - .startObject("properties").startObject("foo").field("type", "double").endObject() - .endObject().endObject().endObject(); - - try { - mapperService.merge("type2", new CompressedXContent(Strings.toString(update)), MapperService.MergeReason.MAPPING_UPDATE); - fail(); - } catch (IllegalArgumentException e) { - // expected - assertTrue(e.getMessage(), e.getMessage().contains("mapper [foo] cannot be changed from type [long] to [double]")); - } - - try { - mapperService.merge("type2", new CompressedXContent(Strings.toString(update)), MapperService.MergeReason.MAPPING_UPDATE); - fail(); - } catch (IllegalArgumentException e) { - // expected - assertTrue(e.getMessage(), e.getMessage().contains("mapper [foo] cannot be changed from type [long] to [double]")); - } - - assertThat(((FieldMapper) mapperService.documentMapper("type1").mapping().root().getMapper("foo")).fieldType().typeName(), - equalTo("long")); - assertNotNull(mapperService.documentMapper("type2")); - assertNull(mapperService.documentMapper("type2").mapping().root().getMapper("foo")); - } - public void testReuseMetaField() throws IOException { XContentBuilder mapping = XContentFactory.jsonBuilder().startObject().startObject("type") .startObject("properties").startObject("_id").field("type", "text").endObject() diff --git a/server/src/test/java/org/elasticsearch/index/query/IdsQueryBuilderTests.java b/server/src/test/java/org/elasticsearch/index/query/IdsQueryBuilderTests.java index a3c3aa3627c80..dab25b0ce3d96 100644 --- a/server/src/test/java/org/elasticsearch/index/query/IdsQueryBuilderTests.java +++ b/server/src/test/java/org/elasticsearch/index/query/IdsQueryBuilderTests.java @@ -25,11 +25,13 @@ import org.apache.lucene.search.TermInSetQuery; import org.elasticsearch.cluster.metadata.MetaData; import org.elasticsearch.common.ParsingException; -import org.elasticsearch.index.mapper.UidFieldMapper; +import org.elasticsearch.index.mapper.IdFieldMapper; import org.elasticsearch.search.internal.SearchContext; import org.elasticsearch.test.AbstractQueryTestCase; import java.io.IOException; +import java.util.Arrays; +import java.util.Collections; import static org.hamcrest.CoreMatchers.instanceOf; import static org.hamcrest.Matchers.contains; @@ -75,7 +77,14 @@ protected IdsQueryBuilder doCreateTestQueryBuilder() { @Override protected void doAssertLuceneQuery(IdsQueryBuilder queryBuilder, Query query, SearchContext context) throws IOException { - if (queryBuilder.ids().size() == 0 || context.getQueryShardContext().fieldMapper(UidFieldMapper.NAME) == null) { + boolean allTypes = queryBuilder.types().length == 0 || + queryBuilder.types().length == 1 && "_all".equals(queryBuilder.types()[0]); + if (queryBuilder.ids().size() == 0 + // no types + || context.getQueryShardContext().fieldMapper(IdFieldMapper.NAME) == null + // there are types, but disjoint from the query + || (allTypes == false && + Arrays.asList(queryBuilder.types()).indexOf(context.mapperService().types().iterator().next()) == -1)) { assertThat(query, instanceOf(MatchNoDocsQuery.class)); } else { assertThat(query, instanceOf(TermInSetQuery.class)); diff --git a/server/src/test/java/org/elasticsearch/index/shard/IndexShardTests.java b/server/src/test/java/org/elasticsearch/index/shard/IndexShardTests.java index 7aa597c2d4d42..10c769199669d 100644 --- a/server/src/test/java/org/elasticsearch/index/shard/IndexShardTests.java +++ b/server/src/test/java/org/elasticsearch/index/shard/IndexShardTests.java @@ -2060,11 +2060,11 @@ public void testRecoverFromTranslog() throws IOException { for (int i = 0; i < numTotalEntries; i++) { if (randomBoolean()) { operations.add(new Translog.Index("test", "1", 0, 1, VersionType.INTERNAL, - "{\"foo\" : \"bar\"}".getBytes(Charset.forName("UTF-8")), null, null, -1)); + "{\"foo\" : \"bar\"}".getBytes(Charset.forName("UTF-8")), null, -1)); } else { // corrupt entry operations.add(new Translog.Index("test", "2", 1, 1, VersionType.INTERNAL, - "{\"foo\" : \"bar}".getBytes(Charset.forName("UTF-8")), null, null, -1)); + "{\"foo\" : \"bar}".getBytes(Charset.forName("UTF-8")), null, -1)); numCorruptEntries++; } } diff --git a/server/src/test/java/org/elasticsearch/index/shard/IndexingOperationListenerTests.java b/server/src/test/java/org/elasticsearch/index/shard/IndexingOperationListenerTests.java index f3bf76c57a550..ed60d38dfa4fd 100644 --- a/server/src/test/java/org/elasticsearch/index/shard/IndexingOperationListenerTests.java +++ b/server/src/test/java/org/elasticsearch/index/shard/IndexingOperationListenerTests.java @@ -136,8 +136,8 @@ public void postDelete(ShardId shardId, Engine.Delete delete, Exception ex) { IndexingOperationListener.CompositeListener compositeListener = new IndexingOperationListener.CompositeListener(indexingOperationListeners, logger); ParsedDocument doc = InternalEngineTests.createParsedDoc("1", null); - Engine.Delete delete = new Engine.Delete("test", "1", new Term("_uid", Uid.createUidAsBytes(doc.type(), doc.id()))); - Engine.Index index = new Engine.Index(new Term("_uid", Uid.createUidAsBytes(doc.type(), doc.id())), doc); + Engine.Delete delete = new Engine.Delete("test", "1", new Term("_id", Uid.encodeId(doc.id()))); + Engine.Index index = new Engine.Index(new Term("_id", Uid.encodeId(doc.id())), doc); compositeListener.postDelete(randomShardId, delete, new Engine.DeleteResult(1, SequenceNumbers.UNASSIGNED_SEQ_NO, true)); assertEquals(0, preIndex.get()); assertEquals(0, postIndex.get()); diff --git a/server/src/test/java/org/elasticsearch/index/shard/ShardGetServiceTests.java b/server/src/test/java/org/elasticsearch/index/shard/ShardGetServiceTests.java index c626f2d18522c..95772910747c4 100644 --- a/server/src/test/java/org/elasticsearch/index/shard/ShardGetServiceTests.java +++ b/server/src/test/java/org/elasticsearch/index/shard/ShardGetServiceTests.java @@ -25,7 +25,6 @@ import org.elasticsearch.index.VersionType; import org.elasticsearch.index.engine.Engine; import org.elasticsearch.index.get.GetResult; -import org.elasticsearch.index.mapper.ParentFieldMapper; import org.elasticsearch.index.mapper.RoutingFieldMapper; import java.io.IOException; @@ -54,12 +53,11 @@ public void testGetForUpdate() throws IOException { assertEquals(searcher.reader().maxDoc(), 1); // we refreshed } - Engine.IndexResult test1 = indexDoc(primary, "test", "1", "{\"foo\" : \"baz\"}", XContentType.JSON, "foobar", null); + Engine.IndexResult test1 = indexDoc(primary, "test", "1", "{\"foo\" : \"baz\"}", XContentType.JSON, "foobar"); assertTrue(primary.getEngine().refreshNeeded()); GetResult testGet1 = primary.getService().getForUpdate("test", "1", test1.getVersion(), VersionType.INTERNAL); assertEquals(new String(testGet1.source(), StandardCharsets.UTF_8), "{\"foo\" : \"baz\"}"); assertTrue(testGet1.getFields().containsKey(RoutingFieldMapper.NAME)); - assertFalse(testGet1.getFields().containsKey(ParentFieldMapper.NAME)); assertEquals("foobar", testGet1.getFields().get(RoutingFieldMapper.NAME).getValue()); try (Engine.Searcher searcher = primary.getEngine().acquireSearcher("test", Engine.SearcherScope.INTERNAL)) { assertEquals(searcher.reader().maxDoc(), 1); // we read from the translog @@ -70,12 +68,11 @@ public void testGetForUpdate() throws IOException { } // now again from the reader - test1 = indexDoc(primary, "test", "1", "{\"foo\" : \"baz\"}", XContentType.JSON, "foobar", null); + test1 = indexDoc(primary, "test", "1", "{\"foo\" : \"baz\"}", XContentType.JSON, "foobar"); assertTrue(primary.getEngine().refreshNeeded()); testGet1 = primary.getService().getForUpdate("test", "1", test1.getVersion(), VersionType.INTERNAL); assertEquals(new String(testGet1.source(), StandardCharsets.UTF_8), "{\"foo\" : \"baz\"}"); assertTrue(testGet1.getFields().containsKey(RoutingFieldMapper.NAME)); - assertFalse(testGet1.getFields().containsKey(ParentFieldMapper.NAME)); assertEquals("foobar", testGet1.getFields().get(RoutingFieldMapper.NAME).getValue()); closeShards(primary); @@ -88,8 +85,7 @@ public void testGetForUpdateWithParentField() throws IOException { .put("index.version.created", Version.V_5_6_0) // for parent field mapper .build(); IndexMetaData metaData = IndexMetaData.builder("test") - .putMapping("parent", "{ \"properties\": {}}") - .putMapping("test", "{ \"properties\": { \"foo\": { \"type\": \"text\"}}, \"_parent\": { \"type\": \"parent\"}}") + .putMapping("test", "{ \"properties\": { \"foo\": { \"type\": \"text\"}}}") .settings(settings) .primaryTerm(0, 1).build(); IndexShard primary = newShard(new ShardId(metaData.getIndex(), 0), true, "n1", metaData, null); @@ -103,13 +99,11 @@ public void testGetForUpdateWithParentField() throws IOException { assertEquals(searcher.reader().maxDoc(), 1); // we refreshed } - Engine.IndexResult test1 = indexDoc(primary, "test", "1", "{\"foo\" : \"baz\"}", XContentType.JSON, null, "foobar"); + Engine.IndexResult test1 = indexDoc(primary, "test", "1", "{\"foo\" : \"baz\"}", XContentType.JSON, null); assertTrue(primary.getEngine().refreshNeeded()); GetResult testGet1 = primary.getService().getForUpdate("test", "1", test1.getVersion(), VersionType.INTERNAL); assertEquals(new String(testGet1.source(), StandardCharsets.UTF_8), "{\"foo\" : \"baz\"}"); - assertTrue(testGet1.getFields().containsKey(ParentFieldMapper.NAME)); assertFalse(testGet1.getFields().containsKey(RoutingFieldMapper.NAME)); - assertEquals("foobar", testGet1.getFields().get(ParentFieldMapper.NAME).getValue()); try (Engine.Searcher searcher = primary.getEngine().acquireSearcher("test", Engine.SearcherScope.INTERNAL)) { assertEquals(searcher.reader().maxDoc(), 1); // we read from the translog } @@ -119,13 +113,11 @@ public void testGetForUpdateWithParentField() throws IOException { } // now again from the reader - test1 = indexDoc(primary, "test", "1", "{\"foo\" : \"baz\"}", XContentType.JSON, null, "foobar"); + test1 = indexDoc(primary, "test", "1", "{\"foo\" : \"baz\"}", XContentType.JSON, null); assertTrue(primary.getEngine().refreshNeeded()); testGet1 = primary.getService().getForUpdate("test", "1", test1.getVersion(), VersionType.INTERNAL); assertEquals(new String(testGet1.source(), StandardCharsets.UTF_8), "{\"foo\" : \"baz\"}"); - assertTrue(testGet1.getFields().containsKey(ParentFieldMapper.NAME)); assertFalse(testGet1.getFields().containsKey(RoutingFieldMapper.NAME)); - assertEquals("foobar", testGet1.getFields().get(ParentFieldMapper.NAME).getValue()); closeShards(primary); } diff --git a/server/src/test/java/org/elasticsearch/index/translog/TranslogTests.java b/server/src/test/java/org/elasticsearch/index/translog/TranslogTests.java index 61e5cdcfd953a..faff540028237 100644 --- a/server/src/test/java/org/elasticsearch/index/translog/TranslogTests.java +++ b/server/src/test/java/org/elasticsearch/index/translog/TranslogTests.java @@ -20,6 +20,7 @@ package org.elasticsearch.index.translog; import com.carrotsearch.randomizedtesting.generators.RandomPicks; + import org.apache.logging.log4j.message.ParameterizedMessage; import org.apache.lucene.codecs.CodecUtil; import org.apache.lucene.document.Field; @@ -30,7 +31,6 @@ import org.apache.lucene.store.AlreadyClosedException; import org.apache.lucene.store.ByteArrayDataOutput; import org.apache.lucene.store.MockDirectoryWrapper; -import org.elasticsearch.core.internal.io.IOUtils; import org.apache.lucene.util.LineFileDocs; import org.apache.lucene.util.LuceneTestCase; import org.elasticsearch.cluster.metadata.IndexMetaData; @@ -53,15 +53,16 @@ import org.elasticsearch.common.xcontent.XContentBuilder; import org.elasticsearch.common.xcontent.XContentFactory; import org.elasticsearch.common.xcontent.XContentType; +import org.elasticsearch.core.internal.io.IOUtils; import org.elasticsearch.index.IndexSettings; import org.elasticsearch.index.VersionType; import org.elasticsearch.index.engine.Engine; import org.elasticsearch.index.engine.Engine.Operation.Origin; +import org.elasticsearch.index.mapper.IdFieldMapper; import org.elasticsearch.index.mapper.ParseContext.Document; import org.elasticsearch.index.mapper.ParsedDocument; import org.elasticsearch.index.mapper.SeqNoFieldMapper; import org.elasticsearch.index.mapper.Uid; -import org.elasticsearch.index.mapper.UidFieldMapper; import org.elasticsearch.index.seqno.LocalCheckpointTracker; import org.elasticsearch.index.seqno.LocalCheckpointTrackerTests; import org.elasticsearch.index.seqno.SequenceNumbers; @@ -406,9 +407,9 @@ public void testStats() throws IOException { { final TranslogStats stats = stats(); assertThat(stats.estimatedNumberOfOperations(), equalTo(1)); - assertThat(stats.getTranslogSizeInBytes(), equalTo(140L)); + assertThat(stats.getTranslogSizeInBytes(), equalTo(139L)); assertThat(stats.getUncommittedOperations(), equalTo(1)); - assertThat(stats.getUncommittedSizeInBytes(), equalTo(140L)); + assertThat(stats.getUncommittedSizeInBytes(), equalTo(139L)); assertThat(stats.getEarliestLastModifiedAge(), greaterThan(1L)); } @@ -416,9 +417,9 @@ public void testStats() throws IOException { { final TranslogStats stats = stats(); assertThat(stats.estimatedNumberOfOperations(), equalTo(2)); - assertThat(stats.getTranslogSizeInBytes(), equalTo(189L)); + assertThat(stats.getTranslogSizeInBytes(), equalTo(188L)); assertThat(stats.getUncommittedOperations(), equalTo(2)); - assertThat(stats.getUncommittedSizeInBytes(), equalTo(189L)); + assertThat(stats.getUncommittedSizeInBytes(), equalTo(188L)); assertThat(stats.getEarliestLastModifiedAge(), greaterThan(1L)); } @@ -426,9 +427,9 @@ public void testStats() throws IOException { { final TranslogStats stats = stats(); assertThat(stats.estimatedNumberOfOperations(), equalTo(3)); - assertThat(stats.getTranslogSizeInBytes(), equalTo(238L)); + assertThat(stats.getTranslogSizeInBytes(), equalTo(237L)); assertThat(stats.getUncommittedOperations(), equalTo(3)); - assertThat(stats.getUncommittedSizeInBytes(), equalTo(238L)); + assertThat(stats.getUncommittedSizeInBytes(), equalTo(237L)); assertThat(stats.getEarliestLastModifiedAge(), greaterThan(1L)); } @@ -436,13 +437,13 @@ public void testStats() throws IOException { { final TranslogStats stats = stats(); assertThat(stats.estimatedNumberOfOperations(), equalTo(4)); - assertThat(stats.getTranslogSizeInBytes(), equalTo(280L)); + assertThat(stats.getTranslogSizeInBytes(), equalTo(279L)); assertThat(stats.getUncommittedOperations(), equalTo(4)); - assertThat(stats.getUncommittedSizeInBytes(), equalTo(280L)); + assertThat(stats.getUncommittedSizeInBytes(), equalTo(279L)); assertThat(stats.getEarliestLastModifiedAge(), greaterThan(1L)); } - final long expectedSizeInBytes = 323L; + final long expectedSizeInBytes = 322L; translog.rollGeneration(); { final TranslogStats stats = stats(); @@ -828,11 +829,11 @@ private void corruptTranslogs(Path directory) throws Exception { } private Term newUid(ParsedDocument doc) { - return new Term("_uid", Uid.createUidAsBytes(doc.type(), doc.id())); + return new Term("_id", Uid.encodeId(doc.id())); } - private Term newUid(String uid) { - return new Term("_uid", uid); + private Term newUid(String id) { + return new Term("_id", Uid.encodeId(id)); } public void testVerifyTranslogIsNotDeleted() throws IOException { @@ -1468,7 +1469,7 @@ public void testRecoveryUncommittedCorruptedCheckpoint() throws IOException { try (Translog ignored = new Translog(config, translogUUID, deletionPolicy, () -> SequenceNumbers.NO_OPS_PERFORMED)) { fail("corrupted"); } catch (IllegalStateException ex) { - assertEquals("Checkpoint file translog-3.ckp already exists but has corrupted content expected: Checkpoint{offset=3123, " + + assertEquals("Checkpoint file translog-3.ckp already exists but has corrupted content expected: Checkpoint{offset=3068, " + "numOps=55, generation=3, minSeqNo=45, maxSeqNo=99, globalCheckpoint=-1, minTranslogGeneration=1} but got: Checkpoint{offset=0, numOps=0, " + "generation=0, minSeqNo=-1, maxSeqNo=-1, globalCheckpoint=-1, minTranslogGeneration=0}", ex.getMessage()); } @@ -2449,11 +2450,11 @@ public void testTranslogOpSerialization() throws Exception { seqID.seqNo.setLongValue(randomSeqNum); seqID.seqNoDocValue.setLongValue(randomSeqNum); seqID.primaryTerm.setLongValue(randomPrimaryTerm); - Field uidField = new Field("_uid", Uid.createUid("test", "1"), UidFieldMapper.Defaults.FIELD_TYPE); + Field idField = new Field("_id", Uid.encodeId("1"), IdFieldMapper.Defaults.FIELD_TYPE); Field versionField = new NumericDocValuesField("_version", 1); Document document = new Document(); document.add(new TextField("value", "test", Field.Store.YES)); - document.add(uidField); + document.add(idField); document.add(versionField); document.add(seqID.seqNo); document.add(seqID.seqNoDocValue); @@ -2482,21 +2483,6 @@ public void testTranslogOpSerialization() throws Exception { in = out.bytes().streamInput(); Translog.Delete serializedDelete = (Translog.Delete) Translog.Operation.readOperation(in); assertEquals(delete, serializedDelete); - - // simulate legacy delete serialization - out = new BytesStreamOutput(); - out.writeByte(Translog.Operation.Type.DELETE.id()); - out.writeVInt(Translog.Delete.FORMAT_5_0); - out.writeString(UidFieldMapper.NAME); - out.writeString("my_type#my_id"); - out.writeLong(3); // version - out.writeByte(VersionType.INTERNAL.getValue()); - out.writeLong(2); // seq no - out.writeLong(0); // primary term - in = out.bytes().streamInput(); - serializedDelete = (Translog.Delete) Translog.Operation.readOperation(in); - assertEquals("my_type", serializedDelete.type()); - assertEquals("my_id", serializedDelete.id()); } public void testRollGeneration() throws Exception { diff --git a/server/src/test/java/org/elasticsearch/indices/IndicesModuleTests.java b/server/src/test/java/org/elasticsearch/indices/IndicesModuleTests.java index 6c4cda7fc52b5..3ebb268a7b8bc 100644 --- a/server/src/test/java/org/elasticsearch/indices/IndicesModuleTests.java +++ b/server/src/test/java/org/elasticsearch/indices/IndicesModuleTests.java @@ -26,13 +26,11 @@ import org.elasticsearch.index.mapper.Mapper; import org.elasticsearch.index.mapper.MapperParsingException; import org.elasticsearch.index.mapper.MetadataFieldMapper; -import org.elasticsearch.index.mapper.ParentFieldMapper; import org.elasticsearch.index.mapper.RoutingFieldMapper; import org.elasticsearch.index.mapper.SeqNoFieldMapper; import org.elasticsearch.index.mapper.SourceFieldMapper; import org.elasticsearch.index.mapper.TextFieldMapper; import org.elasticsearch.index.mapper.TypeFieldMapper; -import org.elasticsearch.index.mapper.UidFieldMapper; import org.elasticsearch.index.mapper.VersionFieldMapper; import org.elasticsearch.indices.mapper.MapperRegistry; import org.elasticsearch.plugins.MapperPlugin; @@ -84,8 +82,8 @@ public Map getMetadataMappers() { } }); - private static String[] EXPECTED_METADATA_FIELDS = new String[]{UidFieldMapper.NAME, IdFieldMapper.NAME, RoutingFieldMapper.NAME, - IndexFieldMapper.NAME, SourceFieldMapper.NAME, TypeFieldMapper.NAME, VersionFieldMapper.NAME, ParentFieldMapper.NAME, + private static String[] EXPECTED_METADATA_FIELDS = new String[]{IdFieldMapper.NAME, RoutingFieldMapper.NAME, + IndexFieldMapper.NAME, SourceFieldMapper.NAME, TypeFieldMapper.NAME, VersionFieldMapper.NAME, SeqNoFieldMapper.NAME, FieldNamesFieldMapper.NAME}; public void testBuiltinMappers() { @@ -108,7 +106,7 @@ public void testBuiltinWithPlugins() { greaterThan(noPluginsModule.getMapperRegistry().getMetadataMapperParsers().size())); Map metadataMapperParsers = module.getMapperRegistry().getMetadataMapperParsers(); Iterator iterator = metadataMapperParsers.keySet().iterator(); - assertEquals(UidFieldMapper.NAME, iterator.next()); + assertEquals(IdFieldMapper.NAME, iterator.next()); String last = null; while(iterator.hasNext()) { last = iterator.next(); diff --git a/server/src/test/java/org/elasticsearch/indices/IndicesOptionsIntegrationIT.java b/server/src/test/java/org/elasticsearch/indices/IndicesOptionsIntegrationIT.java index 977719b5398dd..e2808554cdcb9 100644 --- a/server/src/test/java/org/elasticsearch/indices/IndicesOptionsIntegrationIT.java +++ b/server/src/test/java/org/elasticsearch/indices/IndicesOptionsIntegrationIT.java @@ -593,40 +593,6 @@ public void testPutMapping() throws Exception { assertThat(client().admin().indices().prepareGetMappings("barbaz").get().mappings().get("barbaz").get("type"), notNullValue()); } - public void testPutMappingMultiType() throws Exception { - assertTrue("remove this multi type test", Version.CURRENT.before(Version.fromString("7.0.0"))); - verify(client().admin().indices().preparePutMapping("foo").setType("type1").setSource("field", "type=text"), true); - verify(client().admin().indices().preparePutMapping("_all").setType("type1").setSource("field", "type=text"), true); - - for (String index : Arrays.asList("foo", "foobar", "bar", "barbaz")) { - assertAcked(prepareCreate(index).setSettings(Settings.builder().put("index.version.created", Version.V_5_6_0.id))); - // allows for multiple types - } - - verify(client().admin().indices().preparePutMapping("foo").setType("type1").setSource("field", "type=text"), false); - assertThat(client().admin().indices().prepareGetMappings("foo").get().mappings().get("foo").get("type1"), notNullValue()); - verify(client().admin().indices().preparePutMapping("b*").setType("type1").setSource("field", "type=text"), false); - assertThat(client().admin().indices().prepareGetMappings("bar").get().mappings().get("bar").get("type1"), notNullValue()); - assertThat(client().admin().indices().prepareGetMappings("barbaz").get().mappings().get("barbaz").get("type1"), notNullValue()); - verify(client().admin().indices().preparePutMapping("_all").setType("type2").setSource("field", "type=text"), false); - assertThat(client().admin().indices().prepareGetMappings("foo").get().mappings().get("foo").get("type2"), notNullValue()); - assertThat(client().admin().indices().prepareGetMappings("foobar").get().mappings().get("foobar").get("type2"), notNullValue()); - assertThat(client().admin().indices().prepareGetMappings("bar").get().mappings().get("bar").get("type2"), notNullValue()); - assertThat(client().admin().indices().prepareGetMappings("barbaz").get().mappings().get("barbaz").get("type2"), notNullValue()); - verify(client().admin().indices().preparePutMapping().setType("type3").setSource("field", "type=text"), false); - assertThat(client().admin().indices().prepareGetMappings("foo").get().mappings().get("foo").get("type3"), notNullValue()); - assertThat(client().admin().indices().prepareGetMappings("foobar").get().mappings().get("foobar").get("type3"), notNullValue()); - assertThat(client().admin().indices().prepareGetMappings("bar").get().mappings().get("bar").get("type3"), notNullValue()); - assertThat(client().admin().indices().prepareGetMappings("barbaz").get().mappings().get("barbaz").get("type3"), notNullValue()); - - - verify(client().admin().indices().preparePutMapping("c*").setType("type1").setSource("field", "type=text"), true); - - assertAcked(client().admin().indices().prepareClose("barbaz").get()); - verify(client().admin().indices().preparePutMapping("barbaz").setType("type4").setSource("field", "type=text"), false); - assertThat(client().admin().indices().prepareGetMappings("barbaz").get().mappings().get("barbaz").get("type4"), notNullValue()); - } - public static final class TestPlugin extends Plugin { private static final Setting INDEX_A = diff --git a/server/src/test/java/org/elasticsearch/indices/exists/types/TypesExistsIT.java b/server/src/test/java/org/elasticsearch/indices/exists/types/TypesExistsIT.java index ae3ec36759eee..21a1d39e31f21 100644 --- a/server/src/test/java/org/elasticsearch/indices/exists/types/TypesExistsIT.java +++ b/server/src/test/java/org/elasticsearch/indices/exists/types/TypesExistsIT.java @@ -52,12 +52,10 @@ protected Collection> nodePlugins() { public void testSimple() throws Exception { Client client = client(); CreateIndexResponse response1 = client.admin().indices().prepareCreate("test1") - .setSettings(Settings.builder().put("index.version.created", Version.V_5_6_0.id)) .addMapping("type1", jsonBuilder().startObject().startObject("type1").endObject().endObject()) - .addMapping("type2", jsonBuilder().startObject().startObject("type2").endObject().endObject()) .execute().actionGet(); CreateIndexResponse response2 = client.admin().indices().prepareCreate("test2") - .addMapping("type1", jsonBuilder().startObject().startObject("type1").endObject().endObject()) + .addMapping("type2", jsonBuilder().startObject().startObject("type2").endObject().endObject()) .execute().actionGet(); client.admin().indices().prepareAliases().addAlias("test1", "alias1").execute().actionGet(); assertAcked(response1); @@ -66,8 +64,6 @@ public void testSimple() throws Exception { TypesExistsResponse response = client.admin().indices().prepareTypesExists("test1").setTypes("type1").execute().actionGet(); assertThat(response.isExists(), equalTo(true)); response = client.admin().indices().prepareTypesExists("test1").setTypes("type2").execute().actionGet(); - assertThat(response.isExists(), equalTo(true)); - response = client.admin().indices().prepareTypesExists("test1").setTypes("type3").execute().actionGet(); assertThat(response.isExists(), equalTo(false)); try { client.admin().indices().prepareTypesExists("notExist").setTypes("type1").execute().actionGet(); @@ -80,9 +76,9 @@ public void testSimple() throws Exception { response = client.admin().indices().prepareTypesExists("alias1").setTypes("type1").execute().actionGet(); assertThat(response.isExists(), equalTo(true)); response = client.admin().indices().prepareTypesExists("*").setTypes("type1").execute().actionGet(); - assertThat(response.isExists(), equalTo(true)); + assertThat(response.isExists(), equalTo(false)); response = client.admin().indices().prepareTypesExists("test1", "test2").setTypes("type1").execute().actionGet(); - assertThat(response.isExists(), equalTo(true)); + assertThat(response.isExists(), equalTo(false)); response = client.admin().indices().prepareTypesExists("test1", "test2").setTypes("type2").execute().actionGet(); assertThat(response.isExists(), equalTo(false)); } diff --git a/server/src/test/java/org/elasticsearch/indices/mapping/SimpleGetFieldMappingsIT.java b/server/src/test/java/org/elasticsearch/indices/mapping/SimpleGetFieldMappingsIT.java index 5970e1121bdee..446bc88f9f098 100644 --- a/server/src/test/java/org/elasticsearch/indices/mapping/SimpleGetFieldMappingsIT.java +++ b/server/src/test/java/org/elasticsearch/indices/mapping/SimpleGetFieldMappingsIT.java @@ -127,77 +127,6 @@ public void testGetFieldMappings() throws Exception { assertThat(response.fieldMappings("indexb", "typeB", "field1"), nullValue()); } - public void testGetFieldMappingsMultiType() throws Exception { - assertTrue("remove this multi type test", Version.CURRENT.before(Version.fromString("7.0.0"))); - assertAcked(prepareCreate("indexa") - .setSettings(Settings.builder().put("index.version.created", Version.V_5_6_0.id)) - .addMapping("typeA", getMappingForType("typeA")) - .addMapping("typeB", getMappingForType("typeB"))); - assertAcked(client().admin().indices().prepareCreate("indexb") - .setSettings(Settings.builder().put("index.version.created", Version.V_5_6_0.id)) - .addMapping("typeA", getMappingForType("typeA")) - .addMapping("typeB", getMappingForType("typeB"))); - - - // Get mappings by full name - GetFieldMappingsResponse response = client().admin().indices().prepareGetFieldMappings("indexa").setTypes("typeA").setFields("field1", "obj.subfield").get(); - assertThat(response.fieldMappings("indexa", "typeA", "field1").fullName(), equalTo("field1")); - assertThat(response.fieldMappings("indexa", "typeA", "field1").sourceAsMap(), hasKey("field1")); - assertThat(response.fieldMappings("indexa", "typeA", "obj.subfield").fullName(), equalTo("obj.subfield")); - assertThat(response.fieldMappings("indexa", "typeA", "obj.subfield").sourceAsMap(), hasKey("subfield")); - assertThat(response.mappings().get("indexa"), not(hasKey("typeB"))); - assertThat(response.fieldMappings("indexa", "typeB", "field1"), nullValue()); - assertThat(response.mappings(), not(hasKey("indexb"))); - assertThat(response.fieldMappings("indexb", "typeB", "field1"), nullValue()); - - // Get mappings by name - response = client().admin().indices().prepareGetFieldMappings("indexa").setTypes("typeA").setFields("field1", "obj.subfield").get(); - assertThat(response.fieldMappings("indexa", "typeA", "field1").fullName(), equalTo("field1")); - assertThat(response.fieldMappings("indexa", "typeA", "field1").sourceAsMap(), hasKey("field1")); - assertThat(response.fieldMappings("indexa", "typeA", "obj.subfield").fullName(), equalTo("obj.subfield")); - assertThat(response.fieldMappings("indexa", "typeA", "obj.subfield").sourceAsMap(), hasKey("subfield")); - assertThat(response.fieldMappings("indexa", "typeB", "field1"), nullValue()); - assertThat(response.fieldMappings("indexb", "typeB", "field1"), nullValue()); - - // get mappings by name across multiple indices - response = client().admin().indices().prepareGetFieldMappings().setTypes("typeA").setFields("obj.subfield").get(); - assertThat(response.fieldMappings("indexa", "typeA", "obj.subfield").fullName(), equalTo("obj.subfield")); - assertThat(response.fieldMappings("indexa", "typeA", "obj.subfield").sourceAsMap(), hasKey("subfield")); - assertThat(response.fieldMappings("indexa", "typeB", "obj.subfield"), nullValue()); - assertThat(response.fieldMappings("indexb", "typeA", "obj.subfield").fullName(), equalTo("obj.subfield")); - assertThat(response.fieldMappings("indexb", "typeA", "obj.subfield").sourceAsMap(), hasKey("subfield")); - assertThat(response.fieldMappings("indexb", "typeB", "obj.subfield"), nullValue()); - - // get mappings by name across multiple types - response = client().admin().indices().prepareGetFieldMappings("indexa").setFields("obj.subfield").get(); - assertThat(response.fieldMappings("indexa", "typeA", "obj.subfield").fullName(), equalTo("obj.subfield")); - assertThat(response.fieldMappings("indexa", "typeA", "obj.subfield").sourceAsMap(), hasKey("subfield")); - assertThat(response.fieldMappings("indexa", "typeA", "field1"), nullValue()); - assertThat(response.fieldMappings("indexa", "typeB", "obj.subfield").fullName(), equalTo("obj.subfield")); - assertThat(response.fieldMappings("indexa", "typeB", "obj.subfield").sourceAsMap(), hasKey("subfield")); - assertThat(response.fieldMappings("indexa", "typeB", "field1"), nullValue()); - assertThat(response.fieldMappings("indexb", "typeA", "obj.subfield"), nullValue()); - assertThat(response.fieldMappings("indexb", "typeA", "field1"), nullValue()); - assertThat(response.fieldMappings("indexb", "typeB", "obj.subfield"), nullValue()); - assertThat(response.fieldMappings("indexb", "typeB", "field1"), nullValue()); - - // get mappings by name across multiple types & indices - response = client().admin().indices().prepareGetFieldMappings().setFields("obj.subfield").get(); - assertThat(response.fieldMappings("indexa", "typeA", "obj.subfield").fullName(), equalTo("obj.subfield")); - assertThat(response.fieldMappings("indexa", "typeA", "obj.subfield").sourceAsMap(), hasKey("subfield")); - assertThat(response.fieldMappings("indexa", "typeA", "field1"), nullValue()); - assertThat(response.fieldMappings("indexa", "typeB", "obj.subfield").fullName(), equalTo("obj.subfield")); - assertThat(response.fieldMappings("indexa", "typeB", "obj.subfield").sourceAsMap(), hasKey("subfield")); - assertThat(response.fieldMappings("indexa", "typeB", "field1"), nullValue()); - assertThat(response.fieldMappings("indexb", "typeA", "obj.subfield").fullName(), equalTo("obj.subfield")); - assertThat(response.fieldMappings("indexb", "typeA", "obj.subfield").sourceAsMap(), hasKey("subfield")); - assertThat(response.fieldMappings("indexb", "typeB", "field1"), nullValue()); - assertThat(response.fieldMappings("indexb", "typeB", "obj.subfield").fullName(), equalTo("obj.subfield")); - assertThat(response.fieldMappings("indexb", "typeB", "obj.subfield").sourceAsMap(), hasKey("subfield")); - assertThat(response.fieldMappings("indexb", "typeB", "field1"), nullValue()); - - } - @SuppressWarnings("unchecked") public void testSimpleGetFieldMappingsWithDefaults() throws Exception { assertAcked(prepareCreate("test").addMapping("type", getMappingForType("type"))); diff --git a/server/src/test/java/org/elasticsearch/indices/mapping/SimpleGetMappingsIT.java b/server/src/test/java/org/elasticsearch/indices/mapping/SimpleGetMappingsIT.java index da6691660d8f7..40c9384fd3cfd 100644 --- a/server/src/test/java/org/elasticsearch/indices/mapping/SimpleGetMappingsIT.java +++ b/server/src/test/java/org/elasticsearch/indices/mapping/SimpleGetMappingsIT.java @@ -67,18 +67,10 @@ private XContentBuilder getMappingForType(String type) throws IOException { public void testSimpleGetMappings() throws Exception { client().admin().indices().prepareCreate("indexa") - .setSettings(Settings.builder().put("index.version.created", Version.V_5_6_0.id)) .addMapping("typeA", getMappingForType("typeA")) - .addMapping("typeB", getMappingForType("typeB")) - .addMapping("Atype", getMappingForType("Atype")) - .addMapping("Btype", getMappingForType("Btype")) .execute().actionGet(); client().admin().indices().prepareCreate("indexb") - .setSettings(Settings.builder().put("index.version.created", Version.V_5_6_0.id)) .addMapping("typeA", getMappingForType("typeA")) - .addMapping("typeB", getMappingForType("typeB")) - .addMapping("Atype", getMappingForType("Atype")) - .addMapping("Btype", getMappingForType("Btype")) .execute().actionGet(); ClusterHealthResponse clusterHealth = client().admin().cluster().prepareHealth().setWaitForEvents(Priority.LANGUID).setWaitForGreenStatus().execute().actionGet(); @@ -87,30 +79,18 @@ public void testSimpleGetMappings() throws Exception { // Get all mappings GetMappingsResponse response = client().admin().indices().prepareGetMappings().execute().actionGet(); assertThat(response.mappings().size(), equalTo(2)); - assertThat(response.mappings().get("indexa").size(), equalTo(4)); + assertThat(response.mappings().get("indexa").size(), equalTo(1)); assertThat(response.mappings().get("indexa").get("typeA"), notNullValue()); - assertThat(response.mappings().get("indexa").get("typeB"), notNullValue()); - assertThat(response.mappings().get("indexa").get("Atype"), notNullValue()); - assertThat(response.mappings().get("indexa").get("Btype"), notNullValue()); - assertThat(response.mappings().get("indexb").size(), equalTo(4)); + assertThat(response.mappings().get("indexb").size(), equalTo(1)); assertThat(response.mappings().get("indexb").get("typeA"), notNullValue()); - assertThat(response.mappings().get("indexb").get("typeB"), notNullValue()); - assertThat(response.mappings().get("indexb").get("Atype"), notNullValue()); - assertThat(response.mappings().get("indexb").get("Btype"), notNullValue()); // Get all mappings, via wildcard support response = client().admin().indices().prepareGetMappings("*").setTypes("*").execute().actionGet(); assertThat(response.mappings().size(), equalTo(2)); - assertThat(response.mappings().get("indexa").size(), equalTo(4)); + assertThat(response.mappings().get("indexa").size(), equalTo(1)); assertThat(response.mappings().get("indexa").get("typeA"), notNullValue()); - assertThat(response.mappings().get("indexa").get("typeB"), notNullValue()); - assertThat(response.mappings().get("indexa").get("Atype"), notNullValue()); - assertThat(response.mappings().get("indexa").get("Btype"), notNullValue()); - assertThat(response.mappings().get("indexb").size(), equalTo(4)); + assertThat(response.mappings().get("indexb").size(), equalTo(1)); assertThat(response.mappings().get("indexb").get("typeA"), notNullValue()); - assertThat(response.mappings().get("indexb").get("typeB"), notNullValue()); - assertThat(response.mappings().get("indexb").get("Atype"), notNullValue()); - assertThat(response.mappings().get("indexb").get("Btype"), notNullValue()); // Get all typeA mappings in all indices response = client().admin().indices().prepareGetMappings("*").setTypes("typeA").execute().actionGet(); @@ -123,35 +103,26 @@ public void testSimpleGetMappings() throws Exception { // Get all mappings in indexa response = client().admin().indices().prepareGetMappings("indexa").execute().actionGet(); assertThat(response.mappings().size(), equalTo(1)); - assertThat(response.mappings().get("indexa").size(), equalTo(4)); + assertThat(response.mappings().get("indexa").size(), equalTo(1)); assertThat(response.mappings().get("indexa").get("typeA"), notNullValue()); - assertThat(response.mappings().get("indexa").get("typeB"), notNullValue()); - assertThat(response.mappings().get("indexa").get("Atype"), notNullValue()); - assertThat(response.mappings().get("indexa").get("Btype"), notNullValue()); // Get all mappings beginning with A* in indexa - response = client().admin().indices().prepareGetMappings("indexa").setTypes("A*").execute().actionGet(); + response = client().admin().indices().prepareGetMappings("indexa").setTypes("*A").execute().actionGet(); assertThat(response.mappings().size(), equalTo(1)); assertThat(response.mappings().get("indexa").size(), equalTo(1)); - assertThat(response.mappings().get("indexa").get("Atype"), notNullValue()); + assertThat(response.mappings().get("indexa").get("typeA"), notNullValue()); // Get all mappings beginning with B* in all indices response = client().admin().indices().prepareGetMappings().setTypes("B*").execute().actionGet(); - assertThat(response.mappings().size(), equalTo(2)); - assertThat(response.mappings().get("indexa").size(), equalTo(1)); - assertThat(response.mappings().get("indexa").get("Btype"), notNullValue()); - assertThat(response.mappings().get("indexb").size(), equalTo(1)); - assertThat(response.mappings().get("indexb").get("Btype"), notNullValue()); + assertThat(response.mappings().size(), equalTo(0)); // Get all mappings beginning with B* and A* in all indices - response = client().admin().indices().prepareGetMappings().setTypes("B*", "A*").execute().actionGet(); + response = client().admin().indices().prepareGetMappings().setTypes("B*", "*A").execute().actionGet(); assertThat(response.mappings().size(), equalTo(2)); - assertThat(response.mappings().get("indexa").size(), equalTo(2)); - assertThat(response.mappings().get("indexa").get("Atype"), notNullValue()); - assertThat(response.mappings().get("indexa").get("Btype"), notNullValue()); - assertThat(response.mappings().get("indexb").size(), equalTo(2)); - assertThat(response.mappings().get("indexb").get("Atype"), notNullValue()); - assertThat(response.mappings().get("indexb").get("Btype"), notNullValue()); + assertThat(response.mappings().get("indexa").size(), equalTo(1)); + assertThat(response.mappings().get("indexa").get("typeA"), notNullValue()); + assertThat(response.mappings().get("indexb").size(), equalTo(1)); + assertThat(response.mappings().get("indexb").get("typeA"), notNullValue()); } public void testGetMappingsWithBlocks() throws IOException { diff --git a/server/src/test/java/org/elasticsearch/indices/mapping/UpdateMappingIntegrationIT.java b/server/src/test/java/org/elasticsearch/indices/mapping/UpdateMappingIntegrationIT.java index d830889c5a615..094cf83186ccf 100644 --- a/server/src/test/java/org/elasticsearch/indices/mapping/UpdateMappingIntegrationIT.java +++ b/server/src/test/java/org/elasticsearch/indices/mapping/UpdateMappingIntegrationIT.java @@ -77,7 +77,6 @@ public void testDynamicUpdates() throws Exception { .put("index.number_of_shards", 1) .put("index.number_of_replicas", 0) .put(MapperService.INDEX_MAPPING_TOTAL_FIELDS_LIMIT_SETTING.getKey(), Long.MAX_VALUE) - .put("index.version.created", Version.V_5_6_0) // for multiple types ).execute().actionGet(); client().admin().cluster().prepareHealth().setWaitForEvents(Priority.LANGUID).setWaitForGreenStatus().execute().actionGet(); @@ -85,7 +84,7 @@ public void testDynamicUpdates() throws Exception { int numberOfTypes = randomIntBetween(1, 5); List indexRequests = new ArrayList<>(); for (int rec = 0; rec < recCount; rec++) { - String type = "type" + (rec % numberOfTypes); + String type = "type"; String fieldName = "field_" + type + "_" + rec; indexRequests.add(client().prepareIndex("test", type, Integer.toString(rec)).setSource(fieldName, "some_value")); } @@ -100,7 +99,7 @@ public void testDynamicUpdates() throws Exception { logger.info("checking all the fields are in the mappings"); for (int rec = 0; rec < recCount; rec++) { - String type = "type" + (rec % numberOfTypes); + String type = "type"; String fieldName = "field_" + type + "_" + rec; assertConcreteMappingsOnAll("test", type, fieldName); } @@ -347,22 +346,4 @@ public void testPutMappingsWithBlocks() { } } - @SuppressWarnings("unchecked") - public void testUpdateMappingOnAllTypes() { - assertTrue("remove this multi type test", Version.CURRENT.before(Version.fromString("7.0.0"))); - assertAcked(prepareCreate("index") - .setSettings(Settings.builder().put("index.version.created", Version.V_5_6_0.id)) - .addMapping("type1", "f", "type=keyword").addMapping("type2", "f", "type=keyword")); - - assertAcked(client().admin().indices().preparePutMapping("index") - .setType("type1") - .setSource("f", "type=keyword,null_value=n/a") - .get()); - - GetMappingsResponse mappings = client().admin().indices().prepareGetMappings("index").setTypes("type2").get(); - MappingMetaData type2Mapping = mappings.getMappings().get("index").get("type2").get(); - Map properties = (Map) type2Mapping.sourceAsMap().get("properties"); - Map f = (Map) properties.get("f"); - assertEquals("n/a", f.get("null_value")); - } } diff --git a/server/src/test/java/org/elasticsearch/indices/recovery/RecoverySourceHandlerTests.java b/server/src/test/java/org/elasticsearch/indices/recovery/RecoverySourceHandlerTests.java index 4287b675f353c..917f5deeac113 100644 --- a/server/src/test/java/org/elasticsearch/indices/recovery/RecoverySourceHandlerTests.java +++ b/server/src/test/java/org/elasticsearch/indices/recovery/RecoverySourceHandlerTests.java @@ -51,11 +51,11 @@ import org.elasticsearch.index.IndexSettings; import org.elasticsearch.index.engine.Engine; import org.elasticsearch.index.engine.SegmentsStats; +import org.elasticsearch.index.mapper.IdFieldMapper; import org.elasticsearch.index.mapper.ParseContext; import org.elasticsearch.index.mapper.ParsedDocument; import org.elasticsearch.index.mapper.SeqNoFieldMapper; import org.elasticsearch.index.mapper.Uid; -import org.elasticsearch.index.mapper.UidFieldMapper; import org.elasticsearch.index.seqno.SeqNoStats; import org.elasticsearch.index.seqno.SequenceNumbers; import org.elasticsearch.index.shard.IndexShard; @@ -257,10 +257,10 @@ private Engine.Index getIndex(final String id) { final String type = "test"; final ParseContext.Document document = new ParseContext.Document(); document.add(new TextField("test", "test", Field.Store.YES)); - final Field uidField = new Field("_uid", Uid.createUid(type, id), UidFieldMapper.Defaults.FIELD_TYPE); + final Field idField = new Field("_id", Uid.encodeId(id), IdFieldMapper.Defaults.FIELD_TYPE); final Field versionField = new NumericDocValuesField("_version", Versions.MATCH_ANY); final SeqNoFieldMapper.SequenceIDFields seqID = SeqNoFieldMapper.SequenceIDFields.emptySeqID(); - document.add(uidField); + document.add(idField); document.add(versionField); document.add(seqID.seqNo); document.add(seqID.seqNoDocValue); @@ -268,7 +268,7 @@ private Engine.Index getIndex(final String id) { final BytesReference source = new BytesArray(new byte[] { 1 }); final ParsedDocument doc = new ParsedDocument(versionField, seqID, id, type, null, Arrays.asList(document), source, XContentType.JSON, null); - return new Engine.Index(new Term("_uid", Uid.createUidAsBytes(doc.type(), doc.id())), doc); + return new Engine.Index(new Term("_id", Uid.encodeId(doc.id())), doc); } public void testHandleCorruptedIndexOnSendSendFiles() throws Throwable { diff --git a/server/src/test/java/org/elasticsearch/indices/stats/IndexStatsIT.java b/server/src/test/java/org/elasticsearch/indices/stats/IndexStatsIT.java index f25a9234698b2..ad2095a6dd073 100644 --- a/server/src/test/java/org/elasticsearch/indices/stats/IndexStatsIT.java +++ b/server/src/test/java/org/elasticsearch/indices/stats/IndexStatsIT.java @@ -390,14 +390,11 @@ public void testThrottleStats() throws Exception { } public void testSimpleStats() throws Exception { - // this test has some type stats tests that can be removed in 7.0 - assertAcked(prepareCreate("test1") - .setSettings(Settings.builder().put("index.version.created", Version.V_5_6_0.id))); // allows for multiple types - createIndex("test2"); + createIndex("test1", "test2"); ensureGreen(); - client().prepareIndex("test1", "type1", Integer.toString(1)).setSource("field", "value").execute().actionGet(); - client().prepareIndex("test1", "type2", Integer.toString(1)).setSource("field", "value").execute().actionGet(); + client().prepareIndex("test1", "type", Integer.toString(1)).setSource("field", "value").execute().actionGet(); + client().prepareIndex("test1", "type", Integer.toString(2)).setSource("field", "value").execute().actionGet(); client().prepareIndex("test2", "type", Integer.toString(1)).setSource("field", "value").execute().actionGet(); refresh(); @@ -435,6 +432,10 @@ public void testSimpleStats() throws Exception { assertThat(stats.getIndex("test1").getTotal().getIndexing().getTotal().getDeleteCurrent(), equalTo(0L)); assertThat(stats.getIndex("test1").getTotal().getSearch().getTotal().getFetchCurrent(), equalTo(0L)); assertThat(stats.getIndex("test1").getTotal().getSearch().getTotal().getQueryCurrent(), equalTo(0L)); + assertThat(stats.getIndex("test2").getTotal().getIndexing().getTotal().getIndexCurrent(), equalTo(0L)); + assertThat(stats.getIndex("test2").getTotal().getIndexing().getTotal().getDeleteCurrent(), equalTo(0L)); + assertThat(stats.getIndex("test2").getTotal().getSearch().getTotal().getFetchCurrent(), equalTo(0L)); + assertThat(stats.getIndex("test2").getTotal().getSearch().getTotal().getQueryCurrent(), equalTo(0L)); // check flags stats = client().admin().indices().prepareStats().clear() @@ -450,19 +451,8 @@ public void testSimpleStats() throws Exception { assertThat(stats.getTotal().getFlush(), notNullValue()); assertThat(stats.getTotal().getRefresh(), notNullValue()); - // check types - stats = client().admin().indices().prepareStats().setTypes("type1", "type").execute().actionGet(); - assertThat(stats.getPrimaries().getIndexing().getTypeStats().get("type1").getIndexCount(), equalTo(1L)); - assertThat(stats.getPrimaries().getIndexing().getTypeStats().get("type").getIndexCount(), equalTo(1L)); - assertThat(stats.getPrimaries().getIndexing().getTypeStats().get("type1").getIndexFailedCount(), equalTo(0L)); - assertThat(stats.getPrimaries().getIndexing().getTypeStats().get("type2"), nullValue()); - assertThat(stats.getPrimaries().getIndexing().getTypeStats().get("type1").getIndexCurrent(), equalTo(0L)); - assertThat(stats.getPrimaries().getIndexing().getTypeStats().get("type1").getDeleteCurrent(), equalTo(0L)); - - - assertThat(stats.getTotal().getGet().getCount(), equalTo(0L)); // check get - GetResponse getResponse = client().prepareGet("test1", "type1", "1").execute().actionGet(); + GetResponse getResponse = client().prepareGet("test2", "type", "1").execute().actionGet(); assertThat(getResponse.isExists(), equalTo(true)); stats = client().admin().indices().prepareStats().execute().actionGet(); @@ -471,7 +461,7 @@ public void testSimpleStats() throws Exception { assertThat(stats.getTotal().getGet().getMissingCount(), equalTo(0L)); // missing get - getResponse = client().prepareGet("test1", "type1", "2").execute().actionGet(); + getResponse = client().prepareGet("test2", "type", "2").execute().actionGet(); assertThat(getResponse.isExists(), equalTo(false)); stats = client().admin().indices().prepareStats().execute().actionGet(); @@ -498,12 +488,12 @@ public void testSimpleStats() throws Exception { // index failed try { - client().prepareIndex("test1", "type1", Integer.toString(1)).setSource("field", "value").setVersion(1) + client().prepareIndex("test1", "type", Integer.toString(1)).setSource("field", "value").setVersion(1) .setVersionType(VersionType.EXTERNAL).execute().actionGet(); fail("Expected a version conflict"); } catch (VersionConflictEngineException e) {} try { - client().prepareIndex("test1", "type2", Integer.toString(1)).setSource("field", "value").setVersion(1) + client().prepareIndex("test2", "type", Integer.toString(1)).setSource("field", "value").setVersion(1) .setVersionType(VersionType.EXTERNAL).execute().actionGet(); fail("Expected a version conflict"); } catch (VersionConflictEngineException e) {} @@ -513,11 +503,9 @@ public void testSimpleStats() throws Exception { fail("Expected a version conflict"); } catch (VersionConflictEngineException e) {} - stats = client().admin().indices().prepareStats().setTypes("type1", "type2").execute().actionGet(); - assertThat(stats.getIndex("test1").getPrimaries().getIndexing().getTotal().getIndexFailedCount(), equalTo(2L)); - assertThat(stats.getIndex("test2").getPrimaries().getIndexing().getTotal().getIndexFailedCount(), equalTo(1L)); - assertThat(stats.getPrimaries().getIndexing().getTypeStats().get("type1").getIndexFailedCount(), equalTo(1L)); - assertThat(stats.getPrimaries().getIndexing().getTypeStats().get("type2").getIndexFailedCount(), equalTo(1L)); + + stats = client().admin().indices().prepareStats().execute().actionGet(); + assertThat(stats.getIndex("test2").getPrimaries().getIndexing().getTotal().getIndexFailedCount(), equalTo(2L)); assertThat(stats.getPrimaries().getIndexing().getTotal().getIndexFailedCount(), equalTo(3L)); } diff --git a/server/src/test/java/org/elasticsearch/indices/template/SimpleIndexTemplateIT.java b/server/src/test/java/org/elasticsearch/indices/template/SimpleIndexTemplateIT.java index 434b981681fca..2c6f7675673b4 100644 --- a/server/src/test/java/org/elasticsearch/indices/template/SimpleIndexTemplateIT.java +++ b/server/src/test/java/org/elasticsearch/indices/template/SimpleIndexTemplateIT.java @@ -383,24 +383,22 @@ public void testIndexTemplateWithAliases() throws Exception { client().admin().indices().preparePutTemplate("template_with_aliases") .setPatterns(Collections.singletonList("te*")) - .addMapping("type1", "{\"type1\" : {\"properties\" : {\"value\" : {\"type\" : \"text\"}}}}", XContentType.JSON) + .addMapping("_doc", "type", "type=keyword", "field", "type=text") .addAlias(new Alias("simple_alias")) .addAlias(new Alias("templated_alias-{index}")) - .addAlias(new Alias("filtered_alias").filter("{\"type\":{\"value\":\"type2\"}}")) + .addAlias(new Alias("filtered_alias").filter("{\"term\":{\"type\":\"type2\"}}")) .addAlias(new Alias("complex_filtered_alias") - .filter(QueryBuilders.termsQuery("_type", "typeX", "typeY", "typeZ"))) + .filter(QueryBuilders.termsQuery("type", "typeX", "typeY", "typeZ"))) .get(); - assertAcked(prepareCreate("test_index") - .setSettings(Settings.builder().put("index.version.created", Version.V_5_6_0.id)) // allow for multiple version - .addMapping("type1").addMapping("type2").addMapping("typeX").addMapping("typeY").addMapping("typeZ")); + assertAcked(prepareCreate("test_index")); ensureGreen(); - client().prepareIndex("test_index", "type1", "1").setSource("field", "A value").get(); - client().prepareIndex("test_index", "type2", "2").setSource("field", "B value").get(); - client().prepareIndex("test_index", "typeX", "3").setSource("field", "C value").get(); - client().prepareIndex("test_index", "typeY", "4").setSource("field", "D value").get(); - client().prepareIndex("test_index", "typeZ", "5").setSource("field", "E value").get(); + client().prepareIndex("test_index", "_doc", "1").setSource("type", "type1", "field", "A value").get(); + client().prepareIndex("test_index", "_doc", "2").setSource("type", "type2", "field", "B value").get(); + client().prepareIndex("test_index", "_doc", "3").setSource("type", "typeX", "field", "C value").get(); + client().prepareIndex("test_index", "_doc", "4").setSource("type", "typeY", "field", "D value").get(); + client().prepareIndex("test_index", "_doc", "5").setSource("type", "typeZ", "field", "E value").get(); GetAliasesResponse getAliasesResponse = client().admin().indices().prepareGetAliases().setIndices("test_index").get(); assertThat(getAliasesResponse.getAliases().size(), equalTo(1)); @@ -419,7 +417,7 @@ public void testIndexTemplateWithAliases() throws Exception { searchResponse = client().prepareSearch("filtered_alias").get(); assertHitCount(searchResponse, 1L); - assertThat(searchResponse.getHits().getAt(0).getType(), equalTo("type2")); + assertThat(searchResponse.getHits().getAt(0).getSourceAsMap().get("type"), equalTo("type2")); // Search the complex filter alias searchResponse = client().prepareSearch("complex_filtered_alias").get(); @@ -427,7 +425,7 @@ public void testIndexTemplateWithAliases() throws Exception { Set types = new HashSet<>(); for (SearchHit searchHit : searchResponse.getHits().getHits()) { - types.add(searchHit.getType()); + types.add(searchHit.getSourceAsMap().get("type").toString()); } assertThat(types.size(), equalTo(3)); assertThat(types, containsInAnyOrder("typeX", "typeY", "typeZ")); diff --git a/server/src/test/java/org/elasticsearch/ingest/IngestClientIT.java b/server/src/test/java/org/elasticsearch/ingest/IngestClientIT.java index 9e97e9bbfd449..0481385909fe2 100644 --- a/server/src/test/java/org/elasticsearch/ingest/IngestClientIT.java +++ b/server/src/test/java/org/elasticsearch/ingest/IngestClientIT.java @@ -121,7 +121,7 @@ public void testSimulate() throws Exception { source.put("foo", "bar"); source.put("fail", false); source.put("processed", true); - IngestDocument ingestDocument = new IngestDocument("index", "type", "id", null, null, null, null, source); + IngestDocument ingestDocument = new IngestDocument("index", "type", "id", null, null, null, source); assertThat(simulateDocumentBaseResult.getIngestDocument().getSourceAndMetadata(), equalTo(ingestDocument.getSourceAndMetadata())); assertThat(simulateDocumentBaseResult.getFailure(), nullValue()); diff --git a/server/src/test/java/org/elasticsearch/ingest/IngestDocumentTests.java b/server/src/test/java/org/elasticsearch/ingest/IngestDocumentTests.java index 04285b3432e12..4f9423ddff752 100644 --- a/server/src/test/java/org/elasticsearch/ingest/IngestDocumentTests.java +++ b/server/src/test/java/org/elasticsearch/ingest/IngestDocumentTests.java @@ -76,7 +76,7 @@ public void setTestIngestDocument() { list.add(null); document.put("list", list); - ingestDocument = new IngestDocument("index", "type", "id", null, null, null, null, document); + ingestDocument = new IngestDocument("index", "type", "id", null, null, null, document); } public void testSimpleGetFieldValue() { diff --git a/server/src/test/java/org/elasticsearch/ingest/PipelineExecutionServiceTests.java b/server/src/test/java/org/elasticsearch/ingest/PipelineExecutionServiceTests.java index 5a3b57a6d7e0b..59f447402fb88 100644 --- a/server/src/test/java/org/elasticsearch/ingest/PipelineExecutionServiceTests.java +++ b/server/src/test/java/org/elasticsearch/ingest/PipelineExecutionServiceTests.java @@ -215,7 +215,6 @@ public void testExecutePropagateAllMetaDataUpdates() throws Exception { assertThat(indexRequest.type(), equalTo("update_type")); assertThat(indexRequest.id(), equalTo("update_id")); assertThat(indexRequest.routing(), equalTo("update_routing")); - assertThat(indexRequest.parent(), equalTo("update_parent")); assertThat(indexRequest.version(), equalTo(newVersion)); assertThat(indexRequest.versionType(), equalTo(VersionType.fromString(versionType))); } @@ -436,11 +435,11 @@ private class IngestDocumentMatcher extends ArgumentMatcher { private final IngestDocument ingestDocument; IngestDocumentMatcher(String index, String type, String id, Map source) { - this.ingestDocument = new IngestDocument(index, type, id, null, null, null, null, source); + this.ingestDocument = new IngestDocument(index, type, id, null, null, null, source); } IngestDocumentMatcher(String index, String type, String id, Long version, VersionType versionType, Map source) { - this.ingestDocument = new IngestDocument(index, type, id, null, null, version, versionType, source); + this.ingestDocument = new IngestDocument(index, type, id, null, version, versionType, source); } @Override diff --git a/server/src/test/java/org/elasticsearch/mget/SimpleMgetIT.java b/server/src/test/java/org/elasticsearch/mget/SimpleMgetIT.java index 07dcabf396b59..670f9cdfa08be 100644 --- a/server/src/test/java/org/elasticsearch/mget/SimpleMgetIT.java +++ b/server/src/test/java/org/elasticsearch/mget/SimpleMgetIT.java @@ -123,35 +123,6 @@ public void testThatMgetShouldWorkWithAliasRouting() throws IOException { assertFalse(mgetResponse.getResponses()[0].isFailed()); } - public void testThatParentPerDocumentIsSupported() throws Exception { - assertAcked(prepareCreate("test").addAlias(new Alias("alias")) - .addMapping("test", jsonBuilder() - .startObject() - .startObject("test") - .startObject("_parent") - .field("type", "foo") - .endObject() - .endObject() - .endObject())); - - client().prepareIndex("test", "test", "1").setParent("4").setRefreshPolicy(IMMEDIATE) - .setSource(jsonBuilder().startObject().field("foo", "bar").endObject()) - .get(); - - MultiGetResponse mgetResponse = client().prepareMultiGet() - .add(new MultiGetRequest.Item(indexOrAlias(), "test", "1").parent("4")) - .add(new MultiGetRequest.Item(indexOrAlias(), "test", "1")) - .get(); - - assertThat(mgetResponse.getResponses().length, is(2)); - assertThat(mgetResponse.getResponses()[0].isFailed(), is(false)); - assertThat(mgetResponse.getResponses()[0].getResponse().isExists(), is(true)); - - assertThat(mgetResponse.getResponses()[1].isFailed(), is(true)); - assertThat(mgetResponse.getResponses()[1].getResponse(), nullValue()); - assertThat(mgetResponse.getResponses()[1].getFailure().getMessage(), equalTo("routing is required for [test]/[test]/[1]")); - } - @SuppressWarnings("unchecked") public void testThatSourceFilteringIsSupported() throws Exception { assertAcked(prepareCreate("test").addAlias(new Alias("alias"))); diff --git a/server/src/test/java/org/elasticsearch/routing/AliasResolveRoutingIT.java b/server/src/test/java/org/elasticsearch/routing/AliasResolveRoutingIT.java index dfebb3f754e99..e89ab1e715d03 100644 --- a/server/src/test/java/org/elasticsearch/routing/AliasResolveRoutingIT.java +++ b/server/src/test/java/org/elasticsearch/routing/AliasResolveRoutingIT.java @@ -75,27 +75,25 @@ public void testResolveIndexRouting() { .addAliasAction(AliasActions.add().index("test1").alias("alias0").routing("0")) .addAliasAction(AliasActions.add().index("test2").alias("alias0").routing("0")).get(); - assertThat(clusterService().state().metaData().resolveIndexRouting(null, null, "test1"), nullValue()); - assertThat(clusterService().state().metaData().resolveIndexRouting(null, null, "alias"), nullValue()); - - assertThat(clusterService().state().metaData().resolveIndexRouting(null, null, "test1"), nullValue()); - assertThat(clusterService().state().metaData().resolveIndexRouting(null, null, "alias10"), equalTo("0")); - assertThat(clusterService().state().metaData().resolveIndexRouting(null, null, "alias20"), equalTo("0")); - assertThat(clusterService().state().metaData().resolveIndexRouting(null, null, "alias21"), equalTo("1")); - assertThat(clusterService().state().metaData().resolveIndexRouting(null, "3", "test1"), equalTo("3")); - assertThat(clusterService().state().metaData().resolveIndexRouting(null, "0", "alias10"), equalTo("0")); - - // Force the alias routing and ignore the parent. - assertThat(clusterService().state().metaData().resolveIndexRouting("1", null, "alias10"), equalTo("0")); + assertThat(clusterService().state().metaData().resolveIndexRouting(null, "test1"), nullValue()); + assertThat(clusterService().state().metaData().resolveIndexRouting(null, "alias"), nullValue()); + + assertThat(clusterService().state().metaData().resolveIndexRouting(null, "test1"), nullValue()); + assertThat(clusterService().state().metaData().resolveIndexRouting(null, "alias10"), equalTo("0")); + assertThat(clusterService().state().metaData().resolveIndexRouting(null, "alias20"), equalTo("0")); + assertThat(clusterService().state().metaData().resolveIndexRouting(null, "alias21"), equalTo("1")); + assertThat(clusterService().state().metaData().resolveIndexRouting("3", "test1"), equalTo("3")); + assertThat(clusterService().state().metaData().resolveIndexRouting("0", "alias10"), equalTo("0")); + try { - clusterService().state().metaData().resolveIndexRouting(null, "1", "alias10"); + clusterService().state().metaData().resolveIndexRouting("1", "alias10"); fail("should fail"); } catch (IllegalArgumentException e) { // all is well, we can't have two mappings, one provided, and one in the alias } try { - clusterService().state().metaData().resolveIndexRouting(null, null, "alias0"); + clusterService().state().metaData().resolveIndexRouting(null, "alias0"); fail("should fail"); } catch (IllegalArgumentException ex) { // Expected diff --git a/server/src/test/java/org/elasticsearch/search/SearchCancellationIT.java b/server/src/test/java/org/elasticsearch/search/SearchCancellationIT.java index bc1e106696315..0294f9f67f88c 100644 --- a/server/src/test/java/org/elasticsearch/search/SearchCancellationIT.java +++ b/server/src/test/java/org/elasticsearch/search/SearchCancellationIT.java @@ -266,7 +266,7 @@ public void enableBlock() { public Map, Object>> pluginScripts() { return Collections.singletonMap(SCRIPT_NAME, params -> { LeafFieldsLookup fieldsLookup = (LeafFieldsLookup) params.get("_fields"); - Loggers.getLogger(SearchCancellationIT.class).info("Blocking on the document {}", fieldsLookup.get("_uid")); + Loggers.getLogger(SearchCancellationIT.class).info("Blocking on the document {}", fieldsLookup.get("_id")); hits.incrementAndGet(); try { awaitBusy(() -> shouldBlock.get() == false); diff --git a/server/src/test/java/org/elasticsearch/search/aggregations/bucket/ParentIdAggIT.java b/server/src/test/java/org/elasticsearch/search/aggregations/bucket/ParentIdAggIT.java deleted file mode 100644 index 4ee01301b8ac3..0000000000000 --- a/server/src/test/java/org/elasticsearch/search/aggregations/bucket/ParentIdAggIT.java +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Licensed to Elasticsearch under one or more contributor - * license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright - * ownership. Elasticsearch licenses this file to you under - * the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.elasticsearch.search.aggregations.bucket; - -import org.elasticsearch.action.search.SearchResponse; -import org.elasticsearch.common.xcontent.XContentBuilder; -import org.elasticsearch.search.aggregations.AggregationBuilders; -import org.elasticsearch.search.aggregations.bucket.terms.Terms; -import org.elasticsearch.test.ESIntegTestCase; - -import java.io.IOException; - -import static org.elasticsearch.common.xcontent.XContentFactory.jsonBuilder; -import static org.elasticsearch.index.query.QueryBuilders.matchAllQuery; -import static org.elasticsearch.test.hamcrest.ElasticsearchAssertions.assertAcked; -import static org.elasticsearch.test.hamcrest.ElasticsearchAssertions.assertSearchResponse; -import static org.hamcrest.CoreMatchers.equalTo; -import static org.hamcrest.CoreMatchers.instanceOf; - -public class ParentIdAggIT extends ESIntegTestCase { - public void testParentIdAggregation() throws IOException { - XContentBuilder mapping = jsonBuilder().startObject() - .startObject("childtype") - .startObject("_parent") - .field("type", "parenttype") - .endObject() - .endObject() - .endObject(); - assertAcked(prepareCreate("testidx").addMapping("childtype", mapping)); - client().prepareIndex("testidx", "childtype").setSource(jsonBuilder().startObject().field("num", 1).endObject()).setParent("p1").get(); - client().prepareIndex("testidx", "childtype").setSource(jsonBuilder().startObject().field("num", 2).endObject()).setParent("p1").get(); - - refresh(); - ensureGreen("testidx"); - SearchResponse searchResponse = client().prepareSearch("testidx").setTypes("childtype").setQuery(matchAllQuery()).addAggregation(AggregationBuilders.terms("children").field("_parent#parenttype")).get(); - assertThat(searchResponse.getHits().getTotalHits(), equalTo(2L)); - assertSearchResponse(searchResponse); - assertThat(searchResponse.getAggregations().getAsMap().get("children"), instanceOf(Terms.class)); - Terms terms = (Terms) searchResponse.getAggregations().getAsMap().get("children"); - assertThat(terms.getBuckets().iterator().next().getDocCount(), equalTo(2L)); - } -} diff --git a/server/src/test/java/org/elasticsearch/search/aggregations/bucket/nested/NestedAggregatorTests.java b/server/src/test/java/org/elasticsearch/search/aggregations/bucket/nested/NestedAggregatorTests.java index 35d30ebd6b57f..11a44a1d89bad 100644 --- a/server/src/test/java/org/elasticsearch/search/aggregations/bucket/nested/NestedAggregatorTests.java +++ b/server/src/test/java/org/elasticsearch/search/aggregations/bucket/nested/NestedAggregatorTests.java @@ -40,12 +40,13 @@ import org.elasticsearch.Version; import org.elasticsearch.common.collect.Tuple; import org.elasticsearch.common.lucene.search.Queries; +import org.elasticsearch.index.mapper.IdFieldMapper; import org.elasticsearch.index.mapper.KeywordFieldMapper; import org.elasticsearch.index.mapper.MappedFieldType; import org.elasticsearch.index.mapper.NumberFieldMapper; import org.elasticsearch.index.mapper.SeqNoFieldMapper; import org.elasticsearch.index.mapper.TypeFieldMapper; -import org.elasticsearch.index.mapper.UidFieldMapper; +import org.elasticsearch.index.mapper.Uid; import org.elasticsearch.index.query.MatchAllQueryBuilder; import org.elasticsearch.search.aggregations.AggregatorTestCase; import org.elasticsearch.search.aggregations.BucketOrder; @@ -127,8 +128,7 @@ public void testSingleNestingMax() throws IOException { expectedNestedDocs += numNestedDocs; Document document = new Document(); - document.add(new Field(UidFieldMapper.NAME, "type#" + i, - UidFieldMapper.Defaults.FIELD_TYPE)); + document.add(new Field(IdFieldMapper.NAME, Uid.encodeId(Integer.toString(i)), IdFieldMapper.Defaults.FIELD_TYPE)); document.add(new Field(TypeFieldMapper.NAME, "test", TypeFieldMapper.Defaults.FIELD_TYPE)); document.add(sequenceIDFields.primaryTerm); @@ -176,8 +176,7 @@ public void testDoubleNestingMax() throws IOException { expectedNestedDocs += numNestedDocs; Document document = new Document(); - document.add(new Field(UidFieldMapper.NAME, "type#" + i, - UidFieldMapper.Defaults.FIELD_TYPE)); + document.add(new Field(IdFieldMapper.NAME, Uid.encodeId(Integer.toString(i)), IdFieldMapper.Defaults.FIELD_TYPE)); document.add(new Field(TypeFieldMapper.NAME, "test", TypeFieldMapper.Defaults.FIELD_TYPE)); document.add(sequenceIDFields.primaryTerm); @@ -225,8 +224,7 @@ public void testOrphanedDocs() throws IOException { expectedNestedDocs += numNestedDocs; Document document = new Document(); - document.add(new Field(UidFieldMapper.NAME, "type#" + i, - UidFieldMapper.Defaults.FIELD_TYPE)); + document.add(new Field(IdFieldMapper.NAME, Uid.encodeId(Integer.toString(i)), IdFieldMapper.Defaults.FIELD_TYPE)); document.add(new Field(TypeFieldMapper.NAME, "test", TypeFieldMapper.Defaults.FIELD_TYPE)); document.add(sequenceIDFields.primaryTerm); @@ -275,19 +273,19 @@ public void testResetRootDocId() throws Exception { // 1 segment with, 1 root document, with 3 nested sub docs Document document = new Document(); - document.add(new Field(UidFieldMapper.NAME, "type#1", UidFieldMapper.Defaults.NESTED_FIELD_TYPE)); + document.add(new Field(IdFieldMapper.NAME, Uid.encodeId("1"), IdFieldMapper.Defaults.NESTED_FIELD_TYPE)); document.add(new Field(TypeFieldMapper.NAME, "__nested_field", TypeFieldMapper.Defaults.FIELD_TYPE)); documents.add(document); document = new Document(); - document.add(new Field(UidFieldMapper.NAME, "type#1", UidFieldMapper.Defaults.NESTED_FIELD_TYPE)); + document.add(new Field(IdFieldMapper.NAME, Uid.encodeId("1"), IdFieldMapper.Defaults.NESTED_FIELD_TYPE)); document.add(new Field(TypeFieldMapper.NAME, "__nested_field", TypeFieldMapper.Defaults.FIELD_TYPE)); documents.add(document); document = new Document(); - document.add(new Field(UidFieldMapper.NAME, "type#1", UidFieldMapper.Defaults.NESTED_FIELD_TYPE)); + document.add(new Field(IdFieldMapper.NAME, Uid.encodeId("1"), IdFieldMapper.Defaults.NESTED_FIELD_TYPE)); document.add(new Field(TypeFieldMapper.NAME, "__nested_field", TypeFieldMapper.Defaults.FIELD_TYPE)); documents.add(document); document = new Document(); - document.add(new Field(UidFieldMapper.NAME, "type#1", UidFieldMapper.Defaults.FIELD_TYPE)); + document.add(new Field(IdFieldMapper.NAME, Uid.encodeId("1"), IdFieldMapper.Defaults.FIELD_TYPE)); document.add(new Field(TypeFieldMapper.NAME, "test", TypeFieldMapper.Defaults.FIELD_TYPE)); document.add(sequenceIDFields.primaryTerm); documents.add(document); @@ -298,11 +296,11 @@ public void testResetRootDocId() throws Exception { // 1 segment with: // 1 document, with 1 nested subdoc document = new Document(); - document.add(new Field(UidFieldMapper.NAME, "type#2", UidFieldMapper.Defaults.NESTED_FIELD_TYPE)); + document.add(new Field(IdFieldMapper.NAME, Uid.encodeId("2"), IdFieldMapper.Defaults.NESTED_FIELD_TYPE)); document.add(new Field(TypeFieldMapper.NAME, "__nested_field", TypeFieldMapper.Defaults.FIELD_TYPE)); documents.add(document); document = new Document(); - document.add(new Field(UidFieldMapper.NAME, "type#2", UidFieldMapper.Defaults.FIELD_TYPE)); + document.add(new Field(IdFieldMapper.NAME, Uid.encodeId("2"), IdFieldMapper.Defaults.FIELD_TYPE)); document.add(new Field(TypeFieldMapper.NAME, "test", TypeFieldMapper.Defaults.FIELD_TYPE)); document.add(sequenceIDFields.primaryTerm); documents.add(document); @@ -310,11 +308,11 @@ public void testResetRootDocId() throws Exception { documents.clear(); // and 1 document, with 1 nested subdoc document = new Document(); - document.add(new Field(UidFieldMapper.NAME, "type#3", UidFieldMapper.Defaults.NESTED_FIELD_TYPE)); + document.add(new Field(IdFieldMapper.NAME, Uid.encodeId("3"), IdFieldMapper.Defaults.NESTED_FIELD_TYPE)); document.add(new Field(TypeFieldMapper.NAME, "__nested_field", TypeFieldMapper.Defaults.FIELD_TYPE)); documents.add(document); document = new Document(); - document.add(new Field(UidFieldMapper.NAME, "type#3", UidFieldMapper.Defaults.FIELD_TYPE)); + document.add(new Field(IdFieldMapper.NAME, Uid.encodeId("3"), IdFieldMapper.Defaults.FIELD_TYPE)); document.add(new Field(TypeFieldMapper.NAME, "test", TypeFieldMapper.Defaults.FIELD_TYPE)); document.add(sequenceIDFields.primaryTerm); documents.add(document); @@ -333,7 +331,7 @@ public void testResetRootDocId() throws Exception { BooleanQuery.Builder bq = new BooleanQuery.Builder(); bq.add(Queries.newNonNestedFilter(VersionUtils.randomVersion(random())), BooleanClause.Occur.MUST); - bq.add(new TermQuery(new Term(UidFieldMapper.NAME, "type#2")), BooleanClause.Occur.MUST_NOT); + bq.add(new TermQuery(new Term(IdFieldMapper.NAME, Uid.encodeId("2"))), BooleanClause.Occur.MUST_NOT); Nested nested = search(newSearcher(indexReader, false, true), new ConstantScoreQuery(bq.build()), nestedBuilder, fieldType); @@ -533,19 +531,19 @@ public void testPreGetChildLeafCollectors() throws IOException { try (RandomIndexWriter iw = new RandomIndexWriter(random(), directory)) { List documents = new ArrayList<>(); Document document = new Document(); - document.add(new Field(UidFieldMapper.NAME, "_doc#1", UidFieldMapper.Defaults.NESTED_FIELD_TYPE)); + document.add(new Field(IdFieldMapper.NAME, Uid.encodeId("1"), IdFieldMapper.Defaults.NESTED_FIELD_TYPE)); document.add(new Field(TypeFieldMapper.NAME, "__nested_field", TypeFieldMapper.Defaults.FIELD_TYPE)); document.add(new SortedDocValuesField("key", new BytesRef("key1"))); document.add(new SortedDocValuesField("value", new BytesRef("a1"))); documents.add(document); document = new Document(); - document.add(new Field(UidFieldMapper.NAME, "_doc#1", UidFieldMapper.Defaults.NESTED_FIELD_TYPE)); + document.add(new Field(IdFieldMapper.NAME, Uid.encodeId("1"), IdFieldMapper.Defaults.NESTED_FIELD_TYPE)); document.add(new Field(TypeFieldMapper.NAME, "__nested_field", TypeFieldMapper.Defaults.FIELD_TYPE)); document.add(new SortedDocValuesField("key", new BytesRef("key2"))); document.add(new SortedDocValuesField("value", new BytesRef("b1"))); documents.add(document); document = new Document(); - document.add(new Field(UidFieldMapper.NAME, "_doc#1", UidFieldMapper.Defaults.FIELD_TYPE)); + document.add(new Field(IdFieldMapper.NAME, Uid.encodeId("1"), IdFieldMapper.Defaults.FIELD_TYPE)); document.add(new Field(TypeFieldMapper.NAME, "_doc", TypeFieldMapper.Defaults.FIELD_TYPE)); document.add(sequenceIDFields.primaryTerm); documents.add(document); @@ -554,19 +552,19 @@ public void testPreGetChildLeafCollectors() throws IOException { documents.clear(); document = new Document(); - document.add(new Field(UidFieldMapper.NAME, "_doc#2", UidFieldMapper.Defaults.NESTED_FIELD_TYPE)); + document.add(new Field(IdFieldMapper.NAME, Uid.encodeId("2"), IdFieldMapper.Defaults.NESTED_FIELD_TYPE)); document.add(new Field(TypeFieldMapper.NAME, "__nested_field", TypeFieldMapper.Defaults.FIELD_TYPE)); document.add(new SortedDocValuesField("key", new BytesRef("key1"))); document.add(new SortedDocValuesField("value", new BytesRef("a2"))); documents.add(document); document = new Document(); - document.add(new Field(UidFieldMapper.NAME, "_doc#2", UidFieldMapper.Defaults.NESTED_FIELD_TYPE)); + document.add(new Field(IdFieldMapper.NAME, Uid.encodeId("2"), IdFieldMapper.Defaults.NESTED_FIELD_TYPE)); document.add(new Field(TypeFieldMapper.NAME, "__nested_field", TypeFieldMapper.Defaults.FIELD_TYPE)); document.add(new SortedDocValuesField("key", new BytesRef("key2"))); document.add(new SortedDocValuesField("value", new BytesRef("b2"))); documents.add(document); document = new Document(); - document.add(new Field(UidFieldMapper.NAME, "_doc#2", UidFieldMapper.Defaults.FIELD_TYPE)); + document.add(new Field(IdFieldMapper.NAME, Uid.encodeId("2"), IdFieldMapper.Defaults.FIELD_TYPE)); document.add(new Field(TypeFieldMapper.NAME, "_doc", TypeFieldMapper.Defaults.FIELD_TYPE)); document.add(sequenceIDFields.primaryTerm); documents.add(document); @@ -575,19 +573,19 @@ public void testPreGetChildLeafCollectors() throws IOException { documents.clear(); document = new Document(); - document.add(new Field(UidFieldMapper.NAME, "_doc#3", UidFieldMapper.Defaults.FIELD_TYPE)); + document.add(new Field(IdFieldMapper.NAME, Uid.encodeId("3"), IdFieldMapper.Defaults.NESTED_FIELD_TYPE)); document.add(new Field(TypeFieldMapper.NAME, "__nested_field", TypeFieldMapper.Defaults.FIELD_TYPE)); document.add(new SortedDocValuesField("key", new BytesRef("key1"))); document.add(new SortedDocValuesField("value", new BytesRef("a3"))); documents.add(document); document = new Document(); - document.add(new Field(UidFieldMapper.NAME, "_doc#3", UidFieldMapper.Defaults.FIELD_TYPE)); + document.add(new Field(IdFieldMapper.NAME, Uid.encodeId("3"), IdFieldMapper.Defaults.NESTED_FIELD_TYPE)); document.add(new Field(TypeFieldMapper.NAME, "__nested_field", TypeFieldMapper.Defaults.FIELD_TYPE)); document.add(new SortedDocValuesField("key", new BytesRef("key2"))); document.add(new SortedDocValuesField("value", new BytesRef("b3"))); documents.add(document); document = new Document(); - document.add(new Field(UidFieldMapper.NAME, "_doc#1", UidFieldMapper.Defaults.FIELD_TYPE)); + document.add(new Field(IdFieldMapper.NAME, Uid.encodeId("3"), IdFieldMapper.Defaults.FIELD_TYPE)); document.add(new Field(TypeFieldMapper.NAME, "_doc", TypeFieldMapper.Defaults.FIELD_TYPE)); document.add(sequenceIDFields.primaryTerm); documents.add(document); @@ -654,8 +652,8 @@ private double[] generateDocuments(List documents, int numNestedDocs, double[] values = new double[numNestedDocs]; for (int nested = 0; nested < numNestedDocs; nested++) { Document document = new Document(); - document.add(new Field(UidFieldMapper.NAME, "type#" + id, - UidFieldMapper.Defaults.NESTED_FIELD_TYPE)); + document.add(new Field(IdFieldMapper.NAME, Uid.encodeId(Integer.toString(id)), + IdFieldMapper.Defaults.NESTED_FIELD_TYPE)); document.add(new Field(TypeFieldMapper.NAME, "__" + path, TypeFieldMapper.Defaults.FIELD_TYPE)); long value = randomNonNegativeLong() % 10000; @@ -671,14 +669,14 @@ private List generateBook(String id, String[] authors, int[] numPages) for (int numPage : numPages) { Document document = new Document(); - document.add(new Field(UidFieldMapper.NAME, "book#" + id, UidFieldMapper.Defaults.NESTED_FIELD_TYPE)); + document.add(new Field(IdFieldMapper.NAME, Uid.encodeId(id), IdFieldMapper.Defaults.NESTED_FIELD_TYPE)); document.add(new Field(TypeFieldMapper.NAME, "__nested_chapters", TypeFieldMapper.Defaults.FIELD_TYPE)); document.add(new SortedNumericDocValuesField("num_pages", numPage)); documents.add(document); } Document document = new Document(); - document.add(new Field(UidFieldMapper.NAME, "book#" + id, UidFieldMapper.Defaults.FIELD_TYPE)); + document.add(new Field(IdFieldMapper.NAME, Uid.encodeId(id), IdFieldMapper.Defaults.FIELD_TYPE)); document.add(new Field(TypeFieldMapper.NAME, "book", TypeFieldMapper.Defaults.FIELD_TYPE)); document.add(sequenceIDFields.primaryTerm); for (String author : authors) { diff --git a/server/src/test/java/org/elasticsearch/search/aggregations/bucket/nested/ReverseNestedAggregatorTests.java b/server/src/test/java/org/elasticsearch/search/aggregations/bucket/nested/ReverseNestedAggregatorTests.java index 7281228f3c388..36d6c6bd6e45b 100644 --- a/server/src/test/java/org/elasticsearch/search/aggregations/bucket/nested/ReverseNestedAggregatorTests.java +++ b/server/src/test/java/org/elasticsearch/search/aggregations/bucket/nested/ReverseNestedAggregatorTests.java @@ -27,11 +27,12 @@ import org.apache.lucene.index.RandomIndexWriter; import org.apache.lucene.search.MatchAllDocsQuery; import org.apache.lucene.store.Directory; +import org.elasticsearch.index.mapper.IdFieldMapper; import org.elasticsearch.index.mapper.MappedFieldType; import org.elasticsearch.index.mapper.NumberFieldMapper; import org.elasticsearch.index.mapper.SeqNoFieldMapper; import org.elasticsearch.index.mapper.TypeFieldMapper; -import org.elasticsearch.index.mapper.UidFieldMapper; +import org.elasticsearch.index.mapper.Uid; import org.elasticsearch.search.aggregations.AggregatorTestCase; import org.elasticsearch.search.aggregations.InternalAggregation; import org.elasticsearch.search.aggregations.metrics.max.InternalMax; @@ -95,16 +96,16 @@ public void testMaxFromParentDocs() throws IOException { int numNestedDocs = randomIntBetween(0, 20); for (int nested = 0; nested < numNestedDocs; nested++) { Document document = new Document(); - document.add(new Field(UidFieldMapper.NAME, "type#" + i, - UidFieldMapper.Defaults.NESTED_FIELD_TYPE)); + document.add(new Field(IdFieldMapper.NAME, Uid.encodeId(Integer.toString(i)), + IdFieldMapper.Defaults.NESTED_FIELD_TYPE)); document.add(new Field(TypeFieldMapper.NAME, "__" + NESTED_OBJECT, TypeFieldMapper.Defaults.FIELD_TYPE)); documents.add(document); expectedNestedDocs++; } Document document = new Document(); - document.add(new Field(UidFieldMapper.NAME, "type#" + i, - UidFieldMapper.Defaults.FIELD_TYPE)); + document.add(new Field(IdFieldMapper.NAME, Uid.encodeId(Integer.toString(i)), + IdFieldMapper.Defaults.FIELD_TYPE)); document.add(new Field(TypeFieldMapper.NAME, "test", TypeFieldMapper.Defaults.FIELD_TYPE)); long value = randomNonNegativeLong() % 10000; diff --git a/server/src/test/java/org/elasticsearch/search/aggregations/bucket/terms/TermsAggregatorTests.java b/server/src/test/java/org/elasticsearch/search/aggregations/bucket/terms/TermsAggregatorTests.java index 63026a1255745..4ff3c5fc5b484 100644 --- a/server/src/test/java/org/elasticsearch/search/aggregations/bucket/terms/TermsAggregatorTests.java +++ b/server/src/test/java/org/elasticsearch/search/aggregations/bucket/terms/TermsAggregatorTests.java @@ -30,11 +30,9 @@ import org.apache.lucene.index.IndexReader; import org.apache.lucene.index.IndexableField; import org.apache.lucene.index.RandomIndexWriter; -import org.apache.lucene.index.Term; import org.apache.lucene.search.DocValuesFieldExistsQuery; import org.apache.lucene.search.IndexSearcher; import org.apache.lucene.search.MatchAllDocsQuery; -import org.apache.lucene.search.TermQuery; import org.apache.lucene.store.Directory; import org.apache.lucene.util.BytesRef; import org.apache.lucene.util.NumericUtils; @@ -42,14 +40,14 @@ import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.util.MockBigArrays; import org.elasticsearch.common.util.MockPageCacheRecycler; -import org.elasticsearch.index.IndexSettings; +import org.elasticsearch.index.mapper.IdFieldMapper; import org.elasticsearch.index.mapper.IpFieldMapper; import org.elasticsearch.index.mapper.KeywordFieldMapper; import org.elasticsearch.index.mapper.MappedFieldType; import org.elasticsearch.index.mapper.NumberFieldMapper; import org.elasticsearch.index.mapper.SeqNoFieldMapper; import org.elasticsearch.index.mapper.TypeFieldMapper; -import org.elasticsearch.index.mapper.UidFieldMapper; +import org.elasticsearch.index.mapper.Uid; import org.elasticsearch.index.query.QueryBuilders; import org.elasticsearch.indices.breaker.NoneCircuitBreakerService; import org.elasticsearch.search.SearchHit; @@ -67,7 +65,6 @@ import org.elasticsearch.search.aggregations.bucket.global.InternalGlobal; import org.elasticsearch.search.aggregations.bucket.nested.InternalNested; import org.elasticsearch.search.aggregations.bucket.nested.NestedAggregationBuilder; -import org.elasticsearch.search.aggregations.bucket.nested.NestedAggregator; import org.elasticsearch.search.aggregations.metrics.tophits.InternalTopHits; import org.elasticsearch.search.aggregations.metrics.tophits.TopHitsAggregationBuilder; import org.elasticsearch.search.aggregations.support.ValueType; @@ -1069,14 +1066,14 @@ private List generateDocsWithNested(String id, int value, int[] nested for (int nestedValue : nestedValues) { Document document = new Document(); - document.add(new Field(UidFieldMapper.NAME, "docs#" + id, UidFieldMapper.Defaults.NESTED_FIELD_TYPE)); + document.add(new Field(IdFieldMapper.NAME, Uid.encodeId(id), IdFieldMapper.Defaults.NESTED_FIELD_TYPE)); document.add(new Field(TypeFieldMapper.NAME, "__nested_object", TypeFieldMapper.Defaults.FIELD_TYPE)); document.add(new SortedNumericDocValuesField("nested_value", nestedValue)); documents.add(document); } Document document = new Document(); - document.add(new Field(UidFieldMapper.NAME, "docs#" + id, UidFieldMapper.Defaults.FIELD_TYPE)); + document.add(new Field(IdFieldMapper.NAME, Uid.encodeId(id), IdFieldMapper.Defaults.FIELD_TYPE)); document.add(new Field(TypeFieldMapper.NAME, "docs", TypeFieldMapper.Defaults.FIELD_TYPE)); document.add(new SortedNumericDocValuesField("value", value)); document.add(sequenceIDFields.primaryTerm); diff --git a/server/src/test/java/org/elasticsearch/search/aggregations/metrics/tophits/TopHitsAggregatorTests.java b/server/src/test/java/org/elasticsearch/search/aggregations/metrics/tophits/TopHitsAggregatorTests.java index 5555e987ec402..3fe75b77e7f12 100644 --- a/server/src/test/java/org/elasticsearch/search/aggregations/metrics/tophits/TopHitsAggregatorTests.java +++ b/server/src/test/java/org/elasticsearch/search/aggregations/metrics/tophits/TopHitsAggregatorTests.java @@ -39,10 +39,10 @@ import org.apache.lucene.search.TermQuery; import org.apache.lucene.store.Directory; import org.apache.lucene.util.BytesRef; +import org.elasticsearch.index.mapper.IdFieldMapper; import org.elasticsearch.index.mapper.KeywordFieldMapper; import org.elasticsearch.index.mapper.MappedFieldType; import org.elasticsearch.index.mapper.Uid; -import org.elasticsearch.index.mapper.UidFieldMapper; import org.elasticsearch.search.SearchHits; import org.elasticsearch.search.aggregations.Aggregation; import org.elasticsearch.search.aggregations.AggregationBuilder; @@ -149,7 +149,7 @@ private Aggregation testCase(Query query, AggregationBuilder builder) throws IOE private Document document(String id, String... stringValues) { Document document = new Document(); - document.add(new Field(UidFieldMapper.NAME, Uid.createUid("type", id), UidFieldMapper.Defaults.FIELD_TYPE)); + document.add(new Field(IdFieldMapper.NAME, Uid.encodeId(id), IdFieldMapper.Defaults.FIELD_TYPE)); for (String stringValue : stringValues) { document.add(new Field("string", stringValue, STRING_FIELD_TYPE)); document.add(new SortedSetDocValuesField("string", new BytesRef(stringValue))); diff --git a/server/src/test/java/org/elasticsearch/search/child/ParentFieldLoadingIT.java b/server/src/test/java/org/elasticsearch/search/child/ParentFieldLoadingIT.java deleted file mode 100644 index 36d672e40f278..0000000000000 --- a/server/src/test/java/org/elasticsearch/search/child/ParentFieldLoadingIT.java +++ /dev/null @@ -1,168 +0,0 @@ -/* - * Licensed to Elasticsearch under one or more contributor - * license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright - * ownership. Elasticsearch licenses this file to you under - * the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package org.elasticsearch.search.child; - -import org.elasticsearch.Version; -import org.elasticsearch.action.admin.cluster.stats.ClusterStatsResponse; -import org.elasticsearch.action.admin.indices.mapping.put.PutMappingResponse; -import org.elasticsearch.cluster.ClusterState; -import org.elasticsearch.cluster.metadata.IndexMetaData; -import org.elasticsearch.cluster.routing.ShardRouting; -import org.elasticsearch.common.settings.Settings; -import org.elasticsearch.common.xcontent.XContentBuilder; -import org.elasticsearch.common.xcontent.XContentType; -import org.elasticsearch.index.Index; -import org.elasticsearch.index.IndexService; -import org.elasticsearch.index.IndexSettings; -import org.elasticsearch.index.MergePolicyConfig; -import org.elasticsearch.index.mapper.DocumentMapper; -import org.elasticsearch.index.mapper.MapperService; -import org.elasticsearch.indices.IndicesService; -import org.elasticsearch.plugins.Plugin; -import org.elasticsearch.test.ESIntegTestCase; -import org.elasticsearch.test.InternalSettingsPlugin; - -import java.io.IOException; -import java.util.Arrays; -import java.util.Collection; - -import static org.elasticsearch.common.xcontent.XContentFactory.jsonBuilder; -import static org.elasticsearch.test.hamcrest.ElasticsearchAssertions.assertAcked; -import static org.hamcrest.Matchers.equalTo; -import static org.hamcrest.Matchers.greaterThan; - -public class ParentFieldLoadingIT extends ESIntegTestCase { - - @Override - protected Collection> nodePlugins() { - return Arrays.asList(InternalSettingsPlugin.class); // uses index.merge.enabled - } - - private final Settings indexSettings = Settings.builder() - .put(IndexMetaData.SETTING_NUMBER_OF_SHARDS, 1) - .put(IndexMetaData.SETTING_NUMBER_OF_REPLICAS, 0) - .put(IndexSettings.INDEX_REFRESH_INTERVAL_SETTING.getKey(), -1) - // We never want merges in this test to ensure we have two segments for the last validation - .put(MergePolicyConfig.INDEX_MERGE_ENABLED, false) - .put("index.version.created", Version.V_5_6_0) - .build(); - - public void testEagerParentFieldLoading() throws Exception { - logger.info("testing lazy loading..."); - assertAcked(prepareCreate("test") - .setSettings(indexSettings) - .addMapping("parent") - .addMapping("child", childMapping(false))); - ensureGreen(); - - client().prepareIndex("test", "parent", "1").setSource("{}", XContentType.JSON).get(); - client().prepareIndex("test", "child", "1").setParent("1").setSource("{}", XContentType.JSON).get(); - refresh(); - - ClusterStatsResponse response = client().admin().cluster().prepareClusterStats().get(); - assertThat(response.getIndicesStats().getFieldData().getMemorySizeInBytes(), equalTo(0L)); - - logger.info("testing default loading..."); - assertAcked(client().admin().indices().prepareDelete("test").get()); - assertAcked(prepareCreate("test") - .setSettings(indexSettings) - .addMapping("parent") - .addMapping("child", "_parent", "type=parent")); - ensureGreen(); - - client().prepareIndex("test", "parent", "1").setSource("{}", XContentType.JSON).get(); - client().prepareIndex("test", "child", "1").setParent("1").setSource("{}", XContentType.JSON).get(); - refresh(); - - response = client().admin().cluster().prepareClusterStats().get(); - assertThat(response.getIndicesStats().getFieldData().getMemorySizeInBytes(), equalTo(0L)); - - logger.info("testing eager global ordinals loading..."); - assertAcked(client().admin().indices().prepareDelete("test").get()); - assertAcked(prepareCreate("test") - .setSettings(indexSettings) - .addMapping("parent") - .addMapping("child", childMapping(true))); - ensureGreen(); - - // Need to do 2 separate refreshes, otherwise we have 1 segment and then we can't measure if global ordinals - // is loaded by the size of the field data cache, because global ordinals on 1 segment shards takes no extra memory. - client().prepareIndex("test", "parent", "1").setSource("{}", XContentType.JSON).get(); - refresh(); - client().prepareIndex("test", "child", "1").setParent("1").setSource("{}", XContentType.JSON).get(); - refresh(); - - response = client().admin().cluster().prepareClusterStats().get(); - assertThat(response.getIndicesStats().getFieldData().getMemorySizeInBytes(), greaterThan(0L)); - } - - public void testChangingEagerParentFieldLoadingAtRuntime() throws Exception { - assertAcked(prepareCreate("test") - .setSettings(indexSettings) - .addMapping("parent") - .addMapping("child", "_parent", "type=parent")); - ensureGreen(); - - client().prepareIndex("test", "parent", "1").setSource("{}", XContentType.JSON).get(); - client().prepareIndex("test", "child", "1").setParent("1").setSource("{}", XContentType.JSON).get(); - refresh(); - - ClusterStatsResponse response = client().admin().cluster().prepareClusterStats().get(); - assertThat(response.getIndicesStats().getFieldData().getMemorySizeInBytes(), equalTo(0L)); - - PutMappingResponse putMappingResponse = client().admin().indices().preparePutMapping("test").setType("child") - .setSource(childMapping(true)) - .get(); - assertAcked(putMappingResponse); - Index test = resolveIndex("test"); - assertBusy(() -> { - ClusterState clusterState = internalCluster().clusterService().state(); - ShardRouting shardRouting = clusterState.routingTable().index("test").shard(0).getShards().get(0); - String nodeName = clusterState.getNodes().get(shardRouting.currentNodeId()).getName(); - - boolean verified = false; - IndicesService indicesService = internalCluster().getInstance(IndicesService.class, nodeName); - IndexService indexService = indicesService.indexService(test); - if (indexService != null) { - MapperService mapperService = indexService.mapperService(); - DocumentMapper documentMapper = mapperService.documentMapper("child"); - if (documentMapper != null) { - verified = documentMapper.parentFieldMapper().fieldType().eagerGlobalOrdinals(); - } - } - assertTrue(verified); - }); - - // Need to add a new doc otherwise the refresh doesn't trigger a new searcher - // Because it ends up in its own segment, but isn't of type parent or child, this doc doesn't contribute to the size of the fielddata cache - client().prepareIndex("test", "dummy", "dummy").setSource("{}", XContentType.JSON).get(); - refresh(); - response = client().admin().cluster().prepareClusterStats().get(); - assertThat(response.getIndicesStats().getFieldData().getMemorySizeInBytes(), greaterThan(0L)); - } - - private XContentBuilder childMapping(boolean eagerGlobalOrds) throws IOException { - return jsonBuilder().startObject().startObject("child").startObject("_parent") - .field("type", "parent") - .startObject("fielddata").field("eager_global_ordinals", eagerGlobalOrds).endObject() - .endObject().endObject().endObject(); - } - -} diff --git a/server/src/test/java/org/elasticsearch/search/fetch/subphase/InnerHitsIT.java b/server/src/test/java/org/elasticsearch/search/fetch/subphase/InnerHitsIT.java index f0cad04215823..e01cbc470d531 100644 --- a/server/src/test/java/org/elasticsearch/search/fetch/subphase/InnerHitsIT.java +++ b/server/src/test/java/org/elasticsearch/search/fetch/subphase/InnerHitsIT.java @@ -650,13 +650,10 @@ public void testNestedSource() throws Exception { public void testInnerHitsWithIgnoreUnmapped() throws Exception { assertAcked(prepareCreate("index1") - .setSettings(Settings.builder().put("index.version.created", Version.V_5_6_0.id)) - .addMapping("parent_type", "nested_type", "type=nested") - .addMapping("child_type", "_parent", "type=parent_type") + .addMapping("_doc", "nested_type", "type=nested") ); createIndex("index2"); - client().prepareIndex("index1", "parent_type", "1").setSource("nested_type", Collections.singletonMap("key", "value")).get(); - client().prepareIndex("index1", "child_type", "2").setParent("1").setSource("{}", XContentType.JSON).get(); + client().prepareIndex("index1", "_doc", "1").setSource("nested_type", Collections.singletonMap("key", "value")).get(); client().prepareIndex("index2", "type", "3").setSource("key", "value").get(); refresh(); diff --git a/server/src/test/java/org/elasticsearch/search/fetch/subphase/ParentFieldSubFetchPhaseTests.java b/server/src/test/java/org/elasticsearch/search/fetch/subphase/ParentFieldSubFetchPhaseTests.java deleted file mode 100644 index 968424eee735c..0000000000000 --- a/server/src/test/java/org/elasticsearch/search/fetch/subphase/ParentFieldSubFetchPhaseTests.java +++ /dev/null @@ -1,82 +0,0 @@ -/* - * Licensed to Elasticsearch under one or more contributor - * license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright - * ownership. Elasticsearch licenses this file to you under - * the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.elasticsearch.search.fetch.subphase; - -import org.apache.lucene.document.Document; -import org.apache.lucene.document.SortedDocValuesField; -import org.apache.lucene.index.DirectoryReader; -import org.apache.lucene.index.IndexReader; -import org.apache.lucene.index.IndexWriter; -import org.apache.lucene.store.Directory; -import org.apache.lucene.util.BytesRef; -import org.elasticsearch.Version; -import org.elasticsearch.cluster.metadata.IndexMetaData; -import org.elasticsearch.common.settings.Settings; -import org.elasticsearch.index.mapper.ContentPath; -import org.elasticsearch.index.mapper.Mapper; -import org.elasticsearch.index.mapper.ParentFieldMapper; -import org.elasticsearch.test.ESTestCase; - -public class ParentFieldSubFetchPhaseTests extends ESTestCase { - - public void testGetParentId() throws Exception { - ParentFieldMapper fieldMapper = createParentFieldMapper(); - Directory directory = newDirectory(); - IndexWriter indexWriter = new IndexWriter(directory, newIndexWriterConfig()); - Document document = new Document(); - document.add(new SortedDocValuesField(fieldMapper.fieldType().name(), new BytesRef("1"))); - indexWriter.addDocument(document); - indexWriter.close(); - - IndexReader indexReader = DirectoryReader.open(directory); - String id = ParentFieldSubFetchPhase.getParentId(fieldMapper, indexReader.leaves().get(0).reader(), 0); - assertEquals("1", id); - - indexReader.close(); - directory.close(); - } - - public void testGetParentIdNoParentField() throws Exception { - ParentFieldMapper fieldMapper = createParentFieldMapper(); - Directory directory = newDirectory(); - IndexWriter indexWriter = new IndexWriter(directory, newIndexWriterConfig()); - Document document = new Document(); - document.add(new SortedDocValuesField("different_field", new BytesRef("1"))); - indexWriter.addDocument(document); - indexWriter.close(); - - IndexReader indexReader = DirectoryReader.open(directory); - String id = ParentFieldSubFetchPhase.getParentId(fieldMapper, indexReader.leaves().get(0).reader(), 0); - assertNull(id); - - indexReader.close(); - directory.close(); - } - - private ParentFieldMapper createParentFieldMapper() { - Settings settings = Settings.builder() - .put(IndexMetaData.SETTING_VERSION_CREATED, Version.CURRENT) - .build(); - return new ParentFieldMapper.Builder("type") - .type("parent_type") - .build(new Mapper.BuilderContext(settings, new ContentPath(0))); - } - - -} diff --git a/server/src/test/java/org/elasticsearch/search/fields/SearchFieldsIT.java b/server/src/test/java/org/elasticsearch/search/fields/SearchFieldsIT.java index d7480c2b6fb2e..36062860202a5 100644 --- a/server/src/test/java/org/elasticsearch/search/fields/SearchFieldsIT.java +++ b/server/src/test/java/org/elasticsearch/search/fields/SearchFieldsIT.java @@ -342,7 +342,7 @@ public void testScriptDocAndFields() throws Exception { assertThat(response.getHits().getAt(2).getFields().get("sNum1").getValues().get(0), equalTo(6.0)); } - public void testUidBasedScriptFields() throws Exception { + public void testIdBasedScriptFields() throws Exception { prepareCreate("test").addMapping("type1", "num1", "type=long").execute().actionGet(); int numDocs = randomIntBetween(1, 30); @@ -354,23 +354,6 @@ public void testUidBasedScriptFields() throws Exception { indexRandom(true, indexRequestBuilders); SearchResponse response = client().prepareSearch() - .setQuery(matchAllQuery()) - .addSort("num1", SortOrder.ASC) - .setSize(numDocs) - .addScriptField("uid", new Script(ScriptType.INLINE, CustomScriptPlugin.NAME, "_fields._uid.value", Collections.emptyMap())) - .get(); - - assertNoFailures(response); - - assertThat(response.getHits().getTotalHits(), equalTo((long)numDocs)); - for (int i = 0; i < numDocs; i++) { - assertThat(response.getHits().getAt(i).getId(), equalTo(Integer.toString(i))); - Set fields = new HashSet<>(response.getHits().getAt(i).getFields().keySet()); - assertThat(fields, equalTo(singleton("uid"))); - assertThat(response.getHits().getAt(i).getFields().get("uid").getValue(), equalTo("type1#" + Integer.toString(i))); - } - - response = client().prepareSearch() .setQuery(matchAllQuery()) .addSort("num1", SortOrder.ASC) .setSize(numDocs) @@ -410,7 +393,6 @@ public void testUidBasedScriptFields() throws Exception { .addSort("num1", SortOrder.ASC) .setSize(numDocs) .addScriptField("id", new Script(ScriptType.INLINE, CustomScriptPlugin.NAME, "_fields._id.value", Collections.emptyMap())) - .addScriptField("uid", new Script(ScriptType.INLINE, CustomScriptPlugin.NAME, "_fields._uid.value", Collections.emptyMap())) .addScriptField("type", new Script(ScriptType.INLINE, CustomScriptPlugin.NAME, "_fields._type.value", Collections.emptyMap())) .get(); @@ -421,8 +403,7 @@ public void testUidBasedScriptFields() throws Exception { for (int i = 0; i < numDocs; i++) { assertThat(response.getHits().getAt(i).getId(), equalTo(Integer.toString(i))); Set fields = new HashSet<>(response.getHits().getAt(i).getFields().keySet()); - assertThat(fields, equalTo(newHashSet("uid", "type", "id"))); - assertThat(response.getHits().getAt(i).getFields().get("uid").getValue(), equalTo("type1#" + Integer.toString(i))); + assertThat(fields, equalTo(newHashSet("type", "id"))); assertThat(response.getHits().getAt(i).getFields().get("type").getValue(), equalTo("type1")); assertThat(response.getHits().getAt(i).getFields().get("id").getValue(), equalTo(Integer.toString(i))); } diff --git a/server/src/test/java/org/elasticsearch/search/morelikethis/MoreLikeThisIT.java b/server/src/test/java/org/elasticsearch/search/morelikethis/MoreLikeThisIT.java index 185ec53f3b4e3..3487de255e164 100644 --- a/server/src/test/java/org/elasticsearch/search/morelikethis/MoreLikeThisIT.java +++ b/server/src/test/java/org/elasticsearch/search/morelikethis/MoreLikeThisIT.java @@ -367,39 +367,6 @@ public void testSimpleMoreLikeThisIds() throws Exception { assertHitCount(mltResponse, 3L); } - public void testSimpleMoreLikeThisIdsMultipleTypes() throws Exception { - logger.info("Creating index test"); - int numOfTypes = randomIntBetween(2, 10); - CreateIndexRequestBuilder createRequestBuilder = prepareCreate("test") - .setSettings(Settings.builder().put("index.version.created", Version.V_5_6_0.id)); - for (int i = 0; i < numOfTypes; i++) { - createRequestBuilder.addMapping("type" + i, jsonBuilder().startObject().startObject("type" + i).startObject("properties") - .startObject("text").field("type", "text").endObject() - .endObject().endObject().endObject()); - } - assertAcked(createRequestBuilder); - - logger.info("Running Cluster Health"); - assertThat(ensureGreen(), equalTo(ClusterHealthStatus.GREEN)); - - logger.info("Indexing..."); - List builders = new ArrayList<>(numOfTypes); - for (int i = 0; i < numOfTypes; i++) { - builders.add(client().prepareIndex("test", "type" + i).setSource("text", "lucene" + " " + i).setId(String.valueOf(i))); - } - indexRandom(true, builders); - - logger.info("Running MoreLikeThis"); - MoreLikeThisQueryBuilder queryBuilder = QueryBuilders.moreLikeThisQuery(new String[] {"text"}, null, new Item[] {new Item("test", "type0", "0")}).include(true).minTermFreq(1).minDocFreq(1); - - String[] types = new String[numOfTypes]; - for (int i = 0; i < numOfTypes; i++) { - types[i] = "type"+i; - } - SearchResponse mltResponse = client().prepareSearch().setTypes(types).setQuery(queryBuilder).execute().actionGet(); - assertHitCount(mltResponse, numOfTypes); - } - public void testMoreLikeThisMultiValueFields() throws Exception { logger.info("Creating the index ..."); assertAcked(prepareCreate("test") diff --git a/server/src/test/java/org/elasticsearch/search/query/SearchQueryIT.java b/server/src/test/java/org/elasticsearch/search/query/SearchQueryIT.java index b2a7c045ddce9..2cab6e995b25c 100644 --- a/server/src/test/java/org/elasticsearch/search/query/SearchQueryIT.java +++ b/server/src/test/java/org/elasticsearch/search/query/SearchQueryIT.java @@ -556,20 +556,17 @@ public void testDateRangeInQueryStringWithTimeZone_10477() { } public void testTypeFilter() throws Exception { - assertAcked(prepareCreate("test").setSettings(Settings.builder().put("index.version.created", Version.V_5_6_0.id))); + assertAcked(prepareCreate("test")); indexRandom(true, client().prepareIndex("test", "type1", "1").setSource("field1", "value1"), - client().prepareIndex("test", "type2", "1").setSource("field1", "value1"), - client().prepareIndex("test", "type1", "2").setSource("field1", "value1"), - client().prepareIndex("test", "type2", "2").setSource("field1", "value1"), - client().prepareIndex("test", "type2", "3").setSource("field1", "value1")); + client().prepareIndex("test", "type1", "2").setSource("field1", "value1")); assertHitCount(client().prepareSearch().setQuery(typeQuery("type1")).get(), 2L); - assertHitCount(client().prepareSearch().setQuery(typeQuery("type2")).get(), 3L); + assertHitCount(client().prepareSearch().setQuery(typeQuery("type2")).get(), 0L); assertHitCount(client().prepareSearch().setTypes("type1").setQuery(matchAllQuery()).get(), 2L); - assertHitCount(client().prepareSearch().setTypes("type2").setQuery(matchAllQuery()).get(), 3L); + assertHitCount(client().prepareSearch().setTypes("type2").setQuery(matchAllQuery()).get(), 0L); - assertHitCount(client().prepareSearch().setTypes("type1", "type2").setQuery(matchAllQuery()).get(), 5L); + assertHitCount(client().prepareSearch().setTypes("type1", "type2").setQuery(matchAllQuery()).get(), 2L); } public void testIdsQueryTestsIdIndexed() throws Exception { @@ -1220,38 +1217,6 @@ public void testBasicQueryById() throws Exception { assertThat(searchResponse.getHits().getHits().length, equalTo(3)); } - public void testBasicQueryByIdMultiType() throws Exception { - assertAcked(prepareCreate("test").setSettings(Settings.builder().put("index.version.created", Version.V_5_6_0.id))); - - client().prepareIndex("test", "type1", "1").setSource("field1", "value1").get(); - client().prepareIndex("test", "type2", "2").setSource("field1", "value2").get(); - refresh(); - - SearchResponse searchResponse = client().prepareSearch().setQuery(idsQuery("type1", "type2").addIds("1", "2")).get(); - assertHitCount(searchResponse, 2L); - assertThat(searchResponse.getHits().getHits().length, equalTo(2)); - - searchResponse = client().prepareSearch().setQuery(idsQuery().addIds("1")).get(); - assertHitCount(searchResponse, 1L); - assertThat(searchResponse.getHits().getHits().length, equalTo(1)); - - searchResponse = client().prepareSearch().setQuery(idsQuery().addIds("1", "2")).get(); - assertHitCount(searchResponse, 2L); - assertThat(searchResponse.getHits().getHits().length, equalTo(2)); - - searchResponse = client().prepareSearch().setQuery(idsQuery("type1").addIds("1", "2")).get(); - assertHitCount(searchResponse, 1L); - assertThat(searchResponse.getHits().getHits().length, equalTo(1)); - - searchResponse = client().prepareSearch().setQuery(idsQuery(Strings.EMPTY_ARRAY).addIds("1")).get(); - assertHitCount(searchResponse, 1L); - assertThat(searchResponse.getHits().getHits().length, equalTo(1)); - - searchResponse = client().prepareSearch().setQuery(idsQuery("type1", "type2", "type3").addIds("1", "2", "3", "4")).get(); - assertHitCount(searchResponse, 2L); - assertThat(searchResponse.getHits().getHits().length, equalTo(2)); - } - public void testNumericTermsAndRanges() throws Exception { assertAcked(prepareCreate("test") diff --git a/server/src/test/java/org/elasticsearch/search/slice/SearchSliceIT.java b/server/src/test/java/org/elasticsearch/search/slice/SearchSliceIT.java index b9f73869ba7ab..2227cbb806b3f 100644 --- a/server/src/test/java/org/elasticsearch/search/slice/SearchSliceIT.java +++ b/server/src/test/java/org/elasticsearch/search/slice/SearchSliceIT.java @@ -104,7 +104,7 @@ public void testDocIdSort() throws Exception { int numDocs = (int) sr.getHits().getTotalHits(); assertThat(numDocs, equalTo(NUM_DOCS)); int max = randomIntBetween(2, numShards*3); - for (String field : new String[]{"_uid", "random_int", "static_int"}) { + for (String field : new String[]{"_id", "random_int", "static_int"}) { int fetchSize = randomIntBetween(10, 100); SearchRequestBuilder request = client().prepareSearch("test") .setQuery(matchAllQuery()) @@ -125,7 +125,7 @@ public void testNumericSort() throws Exception { assertThat(numDocs, equalTo(NUM_DOCS)); int max = randomIntBetween(2, numShards*3); - for (String field : new String[]{"_uid", "random_int", "static_int"}) { + for (String field : new String[]{"_id", "random_int", "static_int"}) { int fetchSize = randomIntBetween(10, 100); SearchRequestBuilder request = client().prepareSearch("test") .setQuery(matchAllQuery()) diff --git a/server/src/test/java/org/elasticsearch/search/slice/SliceBuilderTests.java b/server/src/test/java/org/elasticsearch/search/slice/SliceBuilderTests.java index 3ee77da319399..75802e92ee176 100644 --- a/server/src/test/java/org/elasticsearch/search/slice/SliceBuilderTests.java +++ b/server/src/test/java/org/elasticsearch/search/slice/SliceBuilderTests.java @@ -42,7 +42,6 @@ import org.elasticsearch.index.fielddata.IndexNumericFieldData; import org.elasticsearch.index.mapper.IdFieldMapper; import org.elasticsearch.index.mapper.MappedFieldType; -import org.elasticsearch.index.mapper.UidFieldMapper; import org.elasticsearch.index.query.QueryShardContext; import org.elasticsearch.test.ESTestCase; @@ -341,12 +340,12 @@ public Query existsQuery(QueryShardContext context) { return null; } }; - fieldType.setName(UidFieldMapper.NAME); + fieldType.setName("_uid"); fieldType.setHasDocValues(false); - when(context.fieldMapper(UidFieldMapper.NAME)).thenReturn(fieldType); + when(context.fieldMapper("_uid")).thenReturn(fieldType); when(context.getIndexReader()).thenReturn(reader); Settings settings = Settings.builder() - .put(IndexMetaData.SETTING_VERSION_CREATED, Version.CURRENT) + .put(IndexMetaData.SETTING_VERSION_CREATED, Version.V_6_3_0) .put(IndexMetaData.SETTING_NUMBER_OF_SHARDS, 2) .put(IndexMetaData.SETTING_NUMBER_OF_REPLICAS, 0) .build(); diff --git a/server/src/test/java/org/elasticsearch/search/sort/FieldSortIT.java b/server/src/test/java/org/elasticsearch/search/sort/FieldSortIT.java index 89c1537b8f169..9a24d8a50550a 100644 --- a/server/src/test/java/org/elasticsearch/search/sort/FieldSortIT.java +++ b/server/src/test/java/org/elasticsearch/search/sort/FieldSortIT.java @@ -1382,17 +1382,17 @@ public void testSortMetaField() throws Exception { SearchResponse searchResponse = client().prepareSearch() .setQuery(matchAllQuery()) .setSize(randomIntBetween(1, numDocs + 5)) - .addSort("_uid", order) + .addSort("_id", order) .execute().actionGet(); assertNoFailures(searchResponse); SearchHit[] hits = searchResponse.getHits().getHits(); BytesRef previous = order == SortOrder.ASC ? new BytesRef() : UnicodeUtil.BIG_TERM; for (int i = 0; i < hits.length; ++i) { - String uidString = Uid.createUid(hits[i].getType(), hits[i].getId()); - final BytesRef uid = new BytesRef(uidString); - assertEquals(uidString, hits[i].getSortValues()[0]); - assertThat(previous, order == SortOrder.ASC ? lessThan(uid) : greaterThan(uid)); - previous = uid; + String idString = hits[i].getId(); + final BytesRef id = new BytesRef(idString); + assertEquals(idString, hits[i].getSortValues()[0]); + assertThat(previous, order == SortOrder.ASC ? lessThan(id) : greaterThan(id)); + previous = id; } } diff --git a/server/src/test/java/org/elasticsearch/update/UpdateIT.java b/server/src/test/java/org/elasticsearch/update/UpdateIT.java index 0f7e242a4cb80..4d6ce3a4d1f08 100644 --- a/server/src/test/java/org/elasticsearch/update/UpdateIT.java +++ b/server/src/test/java/org/elasticsearch/update/UpdateIT.java @@ -462,19 +462,8 @@ public void testUpdateRequestWithScriptAndShouldUpsertDoc() throws Exception { public void testContextVariables() throws Exception { assertAcked(prepareCreate("test") - .setSettings(Settings.builder().put("index.version.created", Version.V_5_6_0.id)) .addAlias(new Alias("alias")) - .addMapping("type1", XContentFactory.jsonBuilder() - .startObject() - .startObject("type1") - .endObject() - .endObject()) - .addMapping("subtype1", XContentFactory.jsonBuilder() - .startObject() - .startObject("subtype1") - .startObject("_parent").field("type", "type1").endObject() - .endObject() - .endObject()) + .addMapping("type1") ); ensureGreen(); @@ -482,50 +471,47 @@ public void testContextVariables() throws Exception { client().prepareIndex() .setIndex("test") .setType("type1") - .setId("parentId1") - .setSource("field1", 0, "content", "bar") + .setId("id1") + .setRouting("routing1") + .setSource("field1", 1, "content", "foo") .execute().actionGet(); client().prepareIndex() .setIndex("test") - .setType("subtype1") - .setId("id1") - .setParent("parentId1") - .setRouting("routing1") - .setSource("field1", 1, "content", "foo") + .setType("type1") + .setId("id2") + .setSource("field1", 0, "content", "bar") .execute().actionGet(); // Update the first object and note context variables values - UpdateResponse updateResponse = client().prepareUpdate("test", "subtype1", "id1") + UpdateResponse updateResponse = client().prepareUpdate("test", "type1", "id1") .setRouting("routing1") .setScript(new Script(ScriptType.INLINE, UPDATE_SCRIPTS, EXTRACT_CTX_SCRIPT, Collections.emptyMap())) .execute().actionGet(); assertEquals(2, updateResponse.getVersion()); - GetResponse getResponse = client().prepareGet("test", "subtype1", "id1").setRouting("routing1").execute().actionGet(); + GetResponse getResponse = client().prepareGet("test", "type1", "id1").setRouting("routing1").execute().actionGet(); Map updateContext = (Map) getResponse.getSourceAsMap().get("update_context"); assertEquals("test", updateContext.get("_index")); - assertEquals("subtype1", updateContext.get("_type")); + assertEquals("type1", updateContext.get("_type")); assertEquals("id1", updateContext.get("_id")); assertEquals(1, updateContext.get("_version")); - assertEquals("parentId1", updateContext.get("_parent")); assertEquals("routing1", updateContext.get("_routing")); // Idem with the second object - updateResponse = client().prepareUpdate("test", "type1", "parentId1") + updateResponse = client().prepareUpdate("test", "type1", "id2") .setScript(new Script(ScriptType.INLINE, UPDATE_SCRIPTS, EXTRACT_CTX_SCRIPT, Collections.emptyMap())) .execute().actionGet(); assertEquals(2, updateResponse.getVersion()); - getResponse = client().prepareGet("test", "type1", "parentId1").execute().actionGet(); + getResponse = client().prepareGet("test", "type1", "id2").execute().actionGet(); updateContext = (Map) getResponse.getSourceAsMap().get("update_context"); assertEquals("test", updateContext.get("_index")); assertEquals("type1", updateContext.get("_type")); - assertEquals("parentId1", updateContext.get("_id")); + assertEquals("id2", updateContext.get("_id")); assertEquals(1, updateContext.get("_version")); - assertNull(updateContext.get("_parent")); assertNull(updateContext.get("_routing")); assertNull(updateContext.get("_ttl")); } diff --git a/test/framework/src/main/java/org/elasticsearch/index/engine/TranslogHandler.java b/test/framework/src/main/java/org/elasticsearch/index/engine/TranslogHandler.java index 983ced2a6edc8..4fe18fa973828 100644 --- a/test/framework/src/main/java/org/elasticsearch/index/engine/TranslogHandler.java +++ b/test/framework/src/main/java/org/elasticsearch/index/engine/TranslogHandler.java @@ -123,7 +123,7 @@ private Engine.Operation convertToEngineOp(Translog.Operation operation, Engine. mapperService.getIndexSettings().getIndexVersionCreated(), source(indexName, index.type(), index.id(), index.source(), XContentHelper.xContentType(index.source())) - .routing(index.routing()).parent(index.parent()), index.seqNo(), index.primaryTerm(), + .routing(index.routing()), index.seqNo(), index.primaryTerm(), index.version(), index.versionType().versionTypeForReplicationAndRecovery(), origin, index.getAutoGeneratedIdTimestamp(), true); return engineIndex; diff --git a/test/framework/src/main/java/org/elasticsearch/index/shard/IndexShardTestCase.java b/test/framework/src/main/java/org/elasticsearch/index/shard/IndexShardTestCase.java index 2656855b9fd15..eb23ac3a80dc1 100644 --- a/test/framework/src/main/java/org/elasticsearch/index/shard/IndexShardTestCase.java +++ b/test/framework/src/main/java/org/elasticsearch/index/shard/IndexShardTestCase.java @@ -548,15 +548,14 @@ protected Engine.IndexResult indexDoc(IndexShard shard, String type, String id) } protected Engine.IndexResult indexDoc(IndexShard shard, String type, String id, String source) throws IOException { - return indexDoc(shard, type, id, source, XContentType.JSON, null, null); + return indexDoc(shard, type, id, source, XContentType.JSON, null); } protected Engine.IndexResult indexDoc(IndexShard shard, String type, String id, String source, XContentType xContentType, - String routing, String parentId) + String routing) throws IOException { SourceToParse sourceToParse = SourceToParse.source(shard.shardId().getIndexName(), type, id, new BytesArray(source), xContentType); sourceToParse.routing(routing); - sourceToParse.parent(parentId); if (shard.routingEntry().primary()) { final Engine.IndexResult result = shard.applyIndexOperationOnPrimary(Versions.MATCH_ANY, VersionType.INTERNAL, sourceToParse, IndexRequest.UNSET_AUTO_GENERATED_TIMESTAMP, false, getMappingUpdater(shard, type)); diff --git a/test/framework/src/main/java/org/elasticsearch/ingest/RandomDocumentPicks.java b/test/framework/src/main/java/org/elasticsearch/ingest/RandomDocumentPicks.java index cad7b388430bb..58eb1df129291 100644 --- a/test/framework/src/main/java/org/elasticsearch/ingest/RandomDocumentPicks.java +++ b/test/framework/src/main/java/org/elasticsearch/ingest/RandomDocumentPicks.java @@ -145,11 +145,7 @@ public static IngestDocument randomIngestDocument(Random random, Map randomSource(Random random) {