Removes type mappings from mapping APIs (#2238)
Removes type mappings from GetMapping, GetFieldMapping and PutMapping APIs Signed-off-by: Suraj Singh <surajrider@gmail.com>
This commit is contained in:
parent
b251d2b565
commit
cbfcad9054
|
@ -127,12 +127,9 @@ import org.opensearch.index.query.QueryBuilder;
|
|||
import org.opensearch.index.query.QueryBuilders;
|
||||
import org.opensearch.rest.RestStatus;
|
||||
import org.opensearch.rest.action.admin.indices.RestCreateIndexAction;
|
||||
import org.opensearch.rest.action.admin.indices.RestGetFieldMappingAction;
|
||||
import org.opensearch.rest.action.admin.indices.RestGetIndexTemplateAction;
|
||||
import org.opensearch.rest.action.admin.indices.RestGetIndicesAction;
|
||||
import org.opensearch.rest.action.admin.indices.RestGetMappingAction;
|
||||
import org.opensearch.rest.action.admin.indices.RestPutIndexTemplateAction;
|
||||
import org.opensearch.rest.action.admin.indices.RestPutMappingAction;
|
||||
import org.opensearch.rest.action.admin.indices.RestRolloverIndexAction;
|
||||
|
||||
import java.io.IOException;
|
||||
|
@ -581,32 +578,6 @@ public class IndicesClientIT extends OpenSearchRestHighLevelClientTestCase {
|
|||
assertEquals("text", XContentMapValues.extractValue(indexName + ".mappings.properties.field.type", getIndexResponse));
|
||||
}
|
||||
|
||||
public void testPutMappingWithTypes() throws IOException {
|
||||
String indexName = "mapping_index";
|
||||
createIndex(indexName, Settings.EMPTY);
|
||||
|
||||
org.opensearch.action.admin.indices.mapping.put.PutMappingRequest putMappingRequest =
|
||||
new org.opensearch.action.admin.indices.mapping.put.PutMappingRequest(indexName);
|
||||
putMappingRequest.type("some_type");
|
||||
|
||||
XContentBuilder mappingBuilder = JsonXContent.contentBuilder();
|
||||
mappingBuilder.startObject().startObject("properties").startObject("field");
|
||||
mappingBuilder.field("type", "text");
|
||||
mappingBuilder.endObject().endObject().endObject();
|
||||
putMappingRequest.source(mappingBuilder);
|
||||
|
||||
AcknowledgedResponse putMappingResponse = execute(
|
||||
putMappingRequest,
|
||||
highLevelClient().indices()::putMapping,
|
||||
highLevelClient().indices()::putMappingAsync,
|
||||
expectWarningsOnce(RestPutMappingAction.TYPES_DEPRECATION_MESSAGE)
|
||||
);
|
||||
assertTrue(putMappingResponse.isAcknowledged());
|
||||
|
||||
Map<String, Object> getIndexResponse = getAsMap(indexName);
|
||||
assertEquals("text", XContentMapValues.extractValue(indexName + ".mappings.properties.field.type", getIndexResponse));
|
||||
}
|
||||
|
||||
public void testGetMapping() throws IOException {
|
||||
String indexName = "test";
|
||||
createIndex(indexName, Settings.EMPTY);
|
||||
|
@ -646,47 +617,6 @@ public class IndicesClientIT extends OpenSearchRestHighLevelClientTestCase {
|
|||
assertThat(mappings, equalTo(expected));
|
||||
}
|
||||
|
||||
public void testGetMappingWithTypes() throws IOException {
|
||||
String indexName = "test";
|
||||
createIndex(indexName, Settings.EMPTY);
|
||||
|
||||
PutMappingRequest putMappingRequest = new PutMappingRequest(indexName);
|
||||
XContentBuilder mappingBuilder = JsonXContent.contentBuilder();
|
||||
mappingBuilder.startObject().startObject("properties").startObject("field");
|
||||
mappingBuilder.field("type", "text");
|
||||
mappingBuilder.endObject().endObject().endObject();
|
||||
putMappingRequest.source(mappingBuilder);
|
||||
|
||||
AcknowledgedResponse putMappingResponse = execute(
|
||||
putMappingRequest,
|
||||
highLevelClient().indices()::putMapping,
|
||||
highLevelClient().indices()::putMappingAsync
|
||||
);
|
||||
assertTrue(putMappingResponse.isAcknowledged());
|
||||
|
||||
Map<String, Object> getIndexResponse = getAsMap(indexName);
|
||||
assertEquals("text", XContentMapValues.extractValue(indexName + ".mappings.properties.field.type", getIndexResponse));
|
||||
|
||||
org.opensearch.action.admin.indices.mapping.get.GetMappingsRequest request =
|
||||
new org.opensearch.action.admin.indices.mapping.get.GetMappingsRequest().indices(indexName);
|
||||
|
||||
org.opensearch.action.admin.indices.mapping.get.GetMappingsResponse getMappingsResponse = execute(
|
||||
request,
|
||||
highLevelClient().indices()::getMapping,
|
||||
highLevelClient().indices()::getMappingAsync,
|
||||
expectWarningsOnce(RestGetMappingAction.TYPES_DEPRECATION_MESSAGE)
|
||||
);
|
||||
|
||||
Map<String, Object> mappings = getMappingsResponse.getMappings().get(indexName).get("_doc").sourceAsMap();
|
||||
Map<String, String> type = new HashMap<>();
|
||||
type.put("type", "text");
|
||||
Map<String, Object> field = new HashMap<>();
|
||||
field.put("field", type);
|
||||
Map<String, Object> expected = new HashMap<>();
|
||||
expected.put("properties", field);
|
||||
assertThat(mappings, equalTo(expected));
|
||||
}
|
||||
|
||||
public void testGetFieldMapping() throws IOException {
|
||||
String indexName = "test";
|
||||
createIndex(indexName, Settings.EMPTY);
|
||||
|
@ -723,45 +653,6 @@ public class IndicesClientIT extends OpenSearchRestHighLevelClientTestCase {
|
|||
assertThat(fieldMappingMap, equalTo(Collections.singletonMap("field", metadata)));
|
||||
}
|
||||
|
||||
public void testGetFieldMappingWithTypes() throws IOException {
|
||||
String indexName = "test";
|
||||
createIndex(indexName, Settings.EMPTY);
|
||||
|
||||
PutMappingRequest putMappingRequest = new PutMappingRequest(indexName);
|
||||
XContentBuilder mappingBuilder = JsonXContent.contentBuilder();
|
||||
mappingBuilder.startObject().startObject("properties").startObject("field");
|
||||
mappingBuilder.field("type", "text");
|
||||
mappingBuilder.endObject().endObject().endObject();
|
||||
putMappingRequest.source(mappingBuilder);
|
||||
|
||||
AcknowledgedResponse putMappingResponse = execute(
|
||||
putMappingRequest,
|
||||
highLevelClient().indices()::putMapping,
|
||||
highLevelClient().indices()::putMappingAsync
|
||||
);
|
||||
assertTrue(putMappingResponse.isAcknowledged());
|
||||
|
||||
org.opensearch.action.admin.indices.mapping.get.GetFieldMappingsRequest getFieldMappingsRequest =
|
||||
new org.opensearch.action.admin.indices.mapping.get.GetFieldMappingsRequest().indices(indexName).types("_doc").fields("field");
|
||||
|
||||
org.opensearch.action.admin.indices.mapping.get.GetFieldMappingsResponse getFieldMappingsResponse = execute(
|
||||
getFieldMappingsRequest,
|
||||
highLevelClient().indices()::getFieldMapping,
|
||||
highLevelClient().indices()::getFieldMappingAsync,
|
||||
expectWarningsOnce(RestGetFieldMappingAction.TYPES_DEPRECATION_MESSAGE)
|
||||
);
|
||||
|
||||
final Map<String, org.opensearch.action.admin.indices.mapping.get.GetFieldMappingsResponse.FieldMappingMetadata> fieldMappingMap =
|
||||
getFieldMappingsResponse.mappings().get(indexName).get("_doc");
|
||||
|
||||
final org.opensearch.action.admin.indices.mapping.get.GetFieldMappingsResponse.FieldMappingMetadata metadata =
|
||||
new org.opensearch.action.admin.indices.mapping.get.GetFieldMappingsResponse.FieldMappingMetadata(
|
||||
"field",
|
||||
new BytesArray("{\"field\":{\"type\":\"text\"}}")
|
||||
);
|
||||
assertThat(fieldMappingMap, equalTo(Collections.singletonMap("field", metadata)));
|
||||
}
|
||||
|
||||
public void testDeleteIndex() throws IOException {
|
||||
{
|
||||
// Delete index if exists
|
||||
|
|
|
@ -86,42 +86,6 @@ public class Netty4HeadBodyIsEmptyIT extends OpenSearchRestTestCase {
|
|||
headTestCase("/test", singletonMap("pretty", "true"), greaterThan(0));
|
||||
}
|
||||
|
||||
public void testTypeExists() throws IOException {
|
||||
createTestDoc();
|
||||
headTestCase(
|
||||
"/test/_mapping/_doc",
|
||||
emptyMap(),
|
||||
OK.getStatus(),
|
||||
greaterThan(0),
|
||||
"Type exists requests are deprecated, as types have been deprecated."
|
||||
);
|
||||
headTestCase(
|
||||
"/test/_mapping/_doc",
|
||||
singletonMap("pretty", "true"),
|
||||
OK.getStatus(),
|
||||
greaterThan(0),
|
||||
"Type exists requests are deprecated, as types have been deprecated."
|
||||
);
|
||||
}
|
||||
|
||||
public void testTypeDoesNotExist() throws IOException {
|
||||
createTestDoc();
|
||||
headTestCase(
|
||||
"/test/_mapping/does-not-exist",
|
||||
emptyMap(),
|
||||
NOT_FOUND.getStatus(),
|
||||
greaterThan(0),
|
||||
"Type exists requests are deprecated, as types have been deprecated."
|
||||
);
|
||||
headTestCase(
|
||||
"/text/_mapping/test,does-not-exist",
|
||||
emptyMap(),
|
||||
NOT_FOUND.getStatus(),
|
||||
greaterThan(0),
|
||||
"Type exists requests are deprecated, as types have been deprecated."
|
||||
);
|
||||
}
|
||||
|
||||
public void testAliasExists() throws IOException {
|
||||
createTestDoc();
|
||||
try (XContentBuilder builder = jsonBuilder()) {
|
||||
|
|
|
@ -34,52 +34,6 @@
|
|||
"description":"A comma-separated list of fields"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"path":"/_mapping/{type}/field/{fields}",
|
||||
"methods":[
|
||||
"GET"
|
||||
],
|
||||
"parts":{
|
||||
"type":{
|
||||
"type":"list",
|
||||
"description":"A comma-separated list of document types",
|
||||
"deprecated":true
|
||||
},
|
||||
"fields":{
|
||||
"type":"list",
|
||||
"description":"A comma-separated list of fields"
|
||||
}
|
||||
},
|
||||
"deprecated":{
|
||||
"version":"7.0.0",
|
||||
"description":"Specifying types in urls has been deprecated"
|
||||
}
|
||||
},
|
||||
{
|
||||
"path":"/{index}/_mapping/{type}/field/{fields}",
|
||||
"methods":[
|
||||
"GET"
|
||||
],
|
||||
"parts":{
|
||||
"index":{
|
||||
"type":"list",
|
||||
"description":"A comma-separated list of index names"
|
||||
},
|
||||
"type":{
|
||||
"type":"list",
|
||||
"description":"A comma-separated list of document types",
|
||||
"deprecated":true
|
||||
},
|
||||
"fields":{
|
||||
"type":"list",
|
||||
"description":"A comma-separated list of fields"
|
||||
}
|
||||
},
|
||||
"deprecated":{
|
||||
"version":"7.0.0",
|
||||
"description":"Specifying types in urls has been deprecated"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
|
|
|
@ -24,52 +24,10 @@
|
|||
"description":"A comma-separated list of index names"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"path":"/_mapping/{type}",
|
||||
"methods":[
|
||||
"GET"
|
||||
],
|
||||
"parts":{
|
||||
"type":{
|
||||
"type":"list",
|
||||
"description":"A comma-separated list of document types",
|
||||
"deprecated":true
|
||||
}
|
||||
},
|
||||
"deprecated":{
|
||||
"version":"7.0.0",
|
||||
"description":"Specifying types in urls has been deprecated"
|
||||
}
|
||||
},
|
||||
{
|
||||
"path":"/{index}/_mapping/{type}",
|
||||
"methods":[
|
||||
"GET"
|
||||
],
|
||||
"parts":{
|
||||
"index":{
|
||||
"type":"list",
|
||||
"description":"A comma-separated list of index names"
|
||||
},
|
||||
"type":{
|
||||
"type":"list",
|
||||
"description":"A comma-separated list of document types",
|
||||
"deprecated":true
|
||||
}
|
||||
},
|
||||
"deprecated":{
|
||||
"version":"7.0.0",
|
||||
"description":"Specifying types in urls has been deprecated"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"params":{
|
||||
"include_type_name":{
|
||||
"type":"boolean",
|
||||
"description":"Whether to add the type name to the response (default: false)"
|
||||
},
|
||||
"ignore_unavailable":{
|
||||
"type":"boolean",
|
||||
"description":"Whether specified concrete indices should be ignored when unavailable (missing or closed)"
|
||||
|
|
|
@ -19,155 +19,10 @@
|
|||
"description":"A comma-separated list of index names the mapping should be added to (supports wildcards); use `_all` or omit to add the mapping on all indices."
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"path":"/{index}/{type}/_mapping",
|
||||
"methods":[
|
||||
"PUT",
|
||||
"POST"
|
||||
],
|
||||
"parts":{
|
||||
"index":{
|
||||
"type":"list",
|
||||
"description":"A comma-separated list of index names the mapping should be added to (supports wildcards); use `_all` or omit to add the mapping on all indices."
|
||||
},
|
||||
"type":{
|
||||
"type":"string",
|
||||
"description":"The name of the document type",
|
||||
"deprecated":true
|
||||
}
|
||||
},
|
||||
"deprecated":{
|
||||
"version":"7.0.0",
|
||||
"description":"Specifying types in urls has been deprecated"
|
||||
}
|
||||
},
|
||||
{
|
||||
"path":"/{index}/_mapping/{type}",
|
||||
"methods":[
|
||||
"PUT",
|
||||
"POST"
|
||||
],
|
||||
"parts":{
|
||||
"index":{
|
||||
"type":"list",
|
||||
"description":"A comma-separated list of index names the mapping should be added to (supports wildcards); use `_all` or omit to add the mapping on all indices."
|
||||
},
|
||||
"type":{
|
||||
"type":"string",
|
||||
"description":"The name of the document type",
|
||||
"deprecated":true
|
||||
}
|
||||
},
|
||||
"deprecated":{
|
||||
"version":"7.0.0",
|
||||
"description":"Specifying types in urls has been deprecated"
|
||||
}
|
||||
},
|
||||
{
|
||||
"path":"/{index}/{type}/_mappings",
|
||||
"methods":[
|
||||
"PUT",
|
||||
"POST"
|
||||
],
|
||||
"parts":{
|
||||
"index":{
|
||||
"type":"list",
|
||||
"description":"A comma-separated list of index names the mapping should be added to (supports wildcards); use `_all` or omit to add the mapping on all indices."
|
||||
},
|
||||
"type":{
|
||||
"type":"string",
|
||||
"description":"The name of the document type",
|
||||
"deprecated":true
|
||||
}
|
||||
},
|
||||
"deprecated":{
|
||||
"version":"7.0.0",
|
||||
"description":"Specifying types in urls has been deprecated"
|
||||
}
|
||||
},
|
||||
{
|
||||
"path":"/{index}/_mappings/{type}",
|
||||
"methods":[
|
||||
"PUT",
|
||||
"POST"
|
||||
],
|
||||
"parts":{
|
||||
"index":{
|
||||
"type":"list",
|
||||
"description":"A comma-separated list of index names the mapping should be added to (supports wildcards); use `_all` or omit to add the mapping on all indices."
|
||||
},
|
||||
"type":{
|
||||
"type":"string",
|
||||
"description":"The name of the document type",
|
||||
"deprecated":true
|
||||
}
|
||||
},
|
||||
"deprecated":{
|
||||
"version":"7.0.0",
|
||||
"description":"Specifying types in urls has been deprecated"
|
||||
}
|
||||
},
|
||||
{
|
||||
"path":"/_mappings/{type}",
|
||||
"methods":[
|
||||
"PUT",
|
||||
"POST"
|
||||
],
|
||||
"parts":{
|
||||
"type":{
|
||||
"type":"string",
|
||||
"description":"The name of the document type",
|
||||
"deprecated":true
|
||||
}
|
||||
},
|
||||
"deprecated":{
|
||||
"version":"7.0.0",
|
||||
"description":"Specifying types in urls has been deprecated"
|
||||
}
|
||||
},
|
||||
{
|
||||
"path":"/{index}/_mappings",
|
||||
"methods":[
|
||||
"PUT",
|
||||
"POST"
|
||||
],
|
||||
"parts":{
|
||||
"index":{
|
||||
"type":"list",
|
||||
"description":"A comma-separated list of index names the mapping should be added to (supports wildcards); use `_all` or omit to add the mapping on all indices."
|
||||
}
|
||||
},
|
||||
"deprecated":{
|
||||
"version":"7.0.0",
|
||||
"description":"The plural mappings is accepted but only /_mapping is documented"
|
||||
}
|
||||
},
|
||||
{
|
||||
"path":"/_mapping/{type}",
|
||||
"methods":[
|
||||
"PUT",
|
||||
"POST"
|
||||
],
|
||||
"parts":{
|
||||
"type":{
|
||||
"type":"string",
|
||||
"description":"The name of the document type",
|
||||
"deprecated":true
|
||||
}
|
||||
},
|
||||
"deprecated":{
|
||||
"version":"7.0.0",
|
||||
"description":"Specifying types in urls has been deprecated"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"params":{
|
||||
"include_type_name":{
|
||||
"type":"boolean",
|
||||
"description":"Whether a type should be expected in the body of the mappings."
|
||||
},
|
||||
"timeout":{
|
||||
"type":"time",
|
||||
"description":"Explicit operation timeout"
|
||||
|
|
|
@ -1,83 +0,0 @@
|
|||
---
|
||||
setup:
|
||||
- do:
|
||||
indices.create:
|
||||
include_type_name: true
|
||||
index: test_index
|
||||
body:
|
||||
mappings:
|
||||
test_type:
|
||||
properties:
|
||||
text:
|
||||
type: text
|
||||
|
||||
---
|
||||
"Get field mapping with no index and type":
|
||||
|
||||
- do:
|
||||
indices.get_field_mapping:
|
||||
include_type_name: true
|
||||
fields: text
|
||||
|
||||
- match: {test_index.mappings.test_type.text.mapping.text.type: text}
|
||||
|
||||
---
|
||||
"Get field mapping by index only":
|
||||
- do:
|
||||
indices.get_field_mapping:
|
||||
include_type_name: true
|
||||
index: test_index
|
||||
fields: text
|
||||
|
||||
- match: {test_index.mappings.test_type.text.mapping.text.type: text}
|
||||
|
||||
---
|
||||
"Get field mapping by type & field":
|
||||
|
||||
- do:
|
||||
indices.get_field_mapping:
|
||||
include_type_name: true
|
||||
index: test_index
|
||||
type: test_type
|
||||
fields: text
|
||||
|
||||
- match: {test_index.mappings.test_type.text.mapping.text.type: text}
|
||||
|
||||
---
|
||||
"Get field mapping by type & field, with another field that doesn't exist":
|
||||
|
||||
- do:
|
||||
indices.get_field_mapping:
|
||||
include_type_name: true
|
||||
index: test_index
|
||||
type: test_type
|
||||
fields: [ text , text1 ]
|
||||
|
||||
- match: {test_index.mappings.test_type.text.mapping.text.type: text}
|
||||
- is_false: test_index.mappings.test_type.text1
|
||||
|
||||
---
|
||||
"Get field mapping with include_defaults":
|
||||
|
||||
- do:
|
||||
indices.get_field_mapping:
|
||||
include_type_name: true
|
||||
index: test_index
|
||||
type: test_type
|
||||
fields: text
|
||||
include_defaults: true
|
||||
|
||||
- match: {test_index.mappings.test_type.text.mapping.text.type: text}
|
||||
- match: {test_index.mappings.test_type.text.mapping.text.analyzer: default}
|
||||
|
||||
---
|
||||
"Get field mapping should work without index specifying type and fields":
|
||||
|
||||
- do:
|
||||
indices.get_field_mapping:
|
||||
include_type_name: true
|
||||
type: test_type
|
||||
fields: text
|
||||
|
||||
- match: {test_index.mappings.test_type.text.mapping.text.type: text}
|
||||
|
|
@ -1,23 +0,0 @@
|
|||
---
|
||||
"Return empty object if field doesn't exist, but type and index do":
|
||||
|
||||
- do:
|
||||
indices.create:
|
||||
include_type_name: true
|
||||
index: test_index
|
||||
body:
|
||||
mappings:
|
||||
test_type:
|
||||
properties:
|
||||
text:
|
||||
type: text
|
||||
analyzer: whitespace
|
||||
|
||||
- do:
|
||||
indices.get_field_mapping:
|
||||
include_type_name: true
|
||||
index: test_index
|
||||
type: test_type
|
||||
fields: not_existent
|
||||
|
||||
- match: { '': {}}
|
|
@ -1,22 +0,0 @@
|
|||
---
|
||||
"Raise 404 when type doesn't exist":
|
||||
|
||||
- do:
|
||||
indices.create:
|
||||
include_type_name: true
|
||||
index: test_index
|
||||
body:
|
||||
mappings:
|
||||
test_type:
|
||||
properties:
|
||||
text:
|
||||
type: text
|
||||
analyzer: whitespace
|
||||
|
||||
- do:
|
||||
catch: missing
|
||||
indices.get_field_mapping:
|
||||
include_type_name: true
|
||||
index: test_index
|
||||
type: not_test_type
|
||||
fields: text
|
|
@ -1,144 +0,0 @@
|
|||
---
|
||||
setup:
|
||||
- do:
|
||||
indices.create:
|
||||
include_type_name: true
|
||||
index: test_index
|
||||
body:
|
||||
mappings:
|
||||
test_type:
|
||||
properties:
|
||||
t1:
|
||||
type: text
|
||||
t2:
|
||||
type: text
|
||||
obj:
|
||||
properties:
|
||||
t1:
|
||||
type: text
|
||||
i_t1:
|
||||
type: text
|
||||
i_t3:
|
||||
type: text
|
||||
|
||||
- do:
|
||||
indices.create:
|
||||
include_type_name: true
|
||||
index: test_index_2
|
||||
body:
|
||||
mappings:
|
||||
test_type_2:
|
||||
properties:
|
||||
t1:
|
||||
type: text
|
||||
t2:
|
||||
type: text
|
||||
obj:
|
||||
properties:
|
||||
t1:
|
||||
type: text
|
||||
i_t1:
|
||||
type: text
|
||||
i_t3:
|
||||
type: text
|
||||
|
||||
---
|
||||
"Get field mapping with * for fields":
|
||||
|
||||
- do:
|
||||
indices.get_field_mapping:
|
||||
include_type_name: true
|
||||
fields: "*"
|
||||
|
||||
- match: {test_index.mappings.test_type.t1.full_name: t1 }
|
||||
- match: {test_index.mappings.test_type.t2.full_name: t2 }
|
||||
- match: {test_index.mappings.test_type.obj\.t1.full_name: obj.t1 }
|
||||
- match: {test_index.mappings.test_type.obj\.i_t1.full_name: obj.i_t1 }
|
||||
- match: {test_index.mappings.test_type.obj\.i_t3.full_name: obj.i_t3 }
|
||||
|
||||
---
|
||||
"Get field mapping with t* for fields":
|
||||
|
||||
- do:
|
||||
indices.get_field_mapping:
|
||||
include_type_name: true
|
||||
index: test_index
|
||||
fields: "t*"
|
||||
|
||||
- match: {test_index.mappings.test_type.t1.full_name: t1 }
|
||||
- match: {test_index.mappings.test_type.t2.full_name: t2 }
|
||||
- length: {test_index.mappings.test_type: 2}
|
||||
|
||||
---
|
||||
"Get field mapping with *t1 for fields":
|
||||
|
||||
- do:
|
||||
indices.get_field_mapping:
|
||||
include_type_name: true
|
||||
index: test_index
|
||||
fields: "*t1"
|
||||
- match: {test_index.mappings.test_type.t1.full_name: t1 }
|
||||
- match: {test_index.mappings.test_type.obj\.t1.full_name: obj.t1 }
|
||||
- match: {test_index.mappings.test_type.obj\.i_t1.full_name: obj.i_t1 }
|
||||
- length: {test_index.mappings.test_type: 3}
|
||||
|
||||
---
|
||||
"Get field mapping with wildcarded relative names":
|
||||
|
||||
- do:
|
||||
indices.get_field_mapping:
|
||||
include_type_name: true
|
||||
index: test_index
|
||||
fields: "obj.i_*"
|
||||
- match: {test_index.mappings.test_type.obj\.i_t1.full_name: obj.i_t1 }
|
||||
- match: {test_index.mappings.test_type.obj\.i_t3.full_name: obj.i_t3 }
|
||||
- length: {test_index.mappings.test_type: 2}
|
||||
|
||||
---
|
||||
"Get field mapping should work using '_all' for indices and types":
|
||||
|
||||
- do:
|
||||
indices.get_field_mapping:
|
||||
include_type_name: true
|
||||
index: _all
|
||||
type: _all
|
||||
fields: "t*"
|
||||
- match: {test_index.mappings.test_type.t1.full_name: t1 }
|
||||
- match: {test_index.mappings.test_type.t2.full_name: t2 }
|
||||
- length: {test_index.mappings.test_type: 2}
|
||||
- match: {test_index_2.mappings.test_type_2.t1.full_name: t1 }
|
||||
- match: {test_index_2.mappings.test_type_2.t2.full_name: t2 }
|
||||
- length: {test_index_2.mappings.test_type_2: 2}
|
||||
|
||||
---
|
||||
"Get field mapping should work using '*' for indices and types":
|
||||
|
||||
- do:
|
||||
indices.get_field_mapping:
|
||||
include_type_name: true
|
||||
index: '*'
|
||||
type: '*'
|
||||
fields: "t*"
|
||||
- match: {test_index.mappings.test_type.t1.full_name: t1 }
|
||||
- match: {test_index.mappings.test_type.t2.full_name: t2 }
|
||||
- length: {test_index.mappings.test_type: 2}
|
||||
- match: {test_index_2.mappings.test_type_2.t1.full_name: t1 }
|
||||
- match: {test_index_2.mappings.test_type_2.t2.full_name: t2 }
|
||||
- length: {test_index_2.mappings.test_type_2: 2}
|
||||
|
||||
---
|
||||
"Get field mapping should work using comma_separated values for indices and types":
|
||||
|
||||
- do:
|
||||
indices.get_field_mapping:
|
||||
include_type_name: true
|
||||
index: 'test_index,test_index_2'
|
||||
type: 'test_type,test_type_2'
|
||||
fields: "t*"
|
||||
- match: {test_index.mappings.test_type.t1.full_name: t1 }
|
||||
- match: {test_index.mappings.test_type.t2.full_name: t2 }
|
||||
- length: {test_index.mappings.test_type: 2}
|
||||
- match: {test_index_2.mappings.test_type_2.t1.full_name: t1 }
|
||||
- match: {test_index_2.mappings.test_type_2.t2.full_name: t2 }
|
||||
- length: {test_index_2.mappings.test_type_2: 2}
|
||||
|
|
@ -1,21 +0,0 @@
|
|||
---
|
||||
"GET mapping with typeless API on an index that has types":
|
||||
|
||||
- do:
|
||||
indices.create: # not using include_type_name: false on purpose
|
||||
include_type_name: true
|
||||
index: index
|
||||
body:
|
||||
mappings:
|
||||
not_doc:
|
||||
properties:
|
||||
foo:
|
||||
type: "keyword"
|
||||
|
||||
- do:
|
||||
indices.get_field_mapping:
|
||||
include_type_name: false
|
||||
index: index
|
||||
fields: foo
|
||||
|
||||
- match: { index.mappings.foo.mapping.foo.type: "keyword" }
|
|
@ -1,158 +0,0 @@
|
|||
---
|
||||
setup:
|
||||
- do:
|
||||
indices.create:
|
||||
include_type_name: true
|
||||
index: test_1
|
||||
body:
|
||||
mappings:
|
||||
doc: {}
|
||||
- do:
|
||||
indices.create:
|
||||
include_type_name: true
|
||||
index: test_2
|
||||
body:
|
||||
mappings:
|
||||
doc: {}
|
||||
---
|
||||
"Get /{index}/_mapping with empty mappings":
|
||||
|
||||
- do:
|
||||
indices.create:
|
||||
index: t
|
||||
|
||||
- do:
|
||||
indices.get_mapping:
|
||||
include_type_name: true
|
||||
index: t
|
||||
|
||||
- match: { t.mappings: {}}
|
||||
|
||||
---
|
||||
"Get /_mapping":
|
||||
|
||||
- do:
|
||||
indices.get_mapping:
|
||||
include_type_name: true
|
||||
|
||||
- is_true: test_1.mappings.doc
|
||||
- is_true: test_2.mappings.doc
|
||||
|
||||
---
|
||||
"Get /{index}/_mapping":
|
||||
|
||||
- do:
|
||||
indices.get_mapping:
|
||||
include_type_name: true
|
||||
index: test_1
|
||||
|
||||
- is_true: test_1.mappings.doc
|
||||
- is_false: test_2
|
||||
|
||||
|
||||
---
|
||||
"Get /{index}/_mapping/_all":
|
||||
|
||||
- do:
|
||||
indices.get_mapping:
|
||||
include_type_name: true
|
||||
index: test_1
|
||||
type: _all
|
||||
|
||||
- is_true: test_1.mappings.doc
|
||||
- is_false: test_2
|
||||
|
||||
---
|
||||
"Get /{index}/_mapping/*":
|
||||
|
||||
- do:
|
||||
indices.get_mapping:
|
||||
include_type_name: true
|
||||
index: test_1
|
||||
type: '*'
|
||||
|
||||
- is_true: test_1.mappings.doc
|
||||
- is_false: test_2
|
||||
|
||||
---
|
||||
"Get /{index}/_mapping/{type}":
|
||||
|
||||
- do:
|
||||
indices.get_mapping:
|
||||
include_type_name: true
|
||||
index: test_1
|
||||
type: doc
|
||||
|
||||
- is_true: test_1.mappings.doc
|
||||
- is_false: test_2
|
||||
|
||||
---
|
||||
"Get /{index}/_mapping/{type*}":
|
||||
|
||||
- do:
|
||||
indices.get_mapping:
|
||||
include_type_name: true
|
||||
index: test_1
|
||||
type: 'd*'
|
||||
|
||||
- is_true: test_1.mappings.doc
|
||||
- is_false: test_2
|
||||
|
||||
---
|
||||
"Get /_mapping/{type}":
|
||||
|
||||
- do:
|
||||
indices.get_mapping:
|
||||
include_type_name: true
|
||||
type: doc
|
||||
|
||||
- is_true: test_1.mappings.doc
|
||||
- is_true: test_2.mappings.doc
|
||||
|
||||
---
|
||||
"Get /_all/_mapping/{type}":
|
||||
|
||||
- do:
|
||||
indices.get_mapping:
|
||||
include_type_name: true
|
||||
index: _all
|
||||
type: doc
|
||||
|
||||
- is_true: test_1.mappings.doc
|
||||
- is_true: test_2.mappings.doc
|
||||
|
||||
---
|
||||
"Get /*/_mapping/{type}":
|
||||
|
||||
- do:
|
||||
indices.get_mapping:
|
||||
include_type_name: true
|
||||
index: '*'
|
||||
type: doc
|
||||
|
||||
- is_true: test_1.mappings.doc
|
||||
- is_true: test_2.mappings.doc
|
||||
|
||||
---
|
||||
"Get /index,index/_mapping/{type}":
|
||||
|
||||
- do:
|
||||
indices.get_mapping:
|
||||
include_type_name: true
|
||||
index: test_1,test_2
|
||||
type: doc
|
||||
|
||||
- is_true: test_1.mappings.doc
|
||||
- is_true: test_2.mappings.doc
|
||||
|
||||
---
|
||||
"Get /index*/_mapping/{type}":
|
||||
|
||||
- do:
|
||||
indices.get_mapping:
|
||||
include_type_name: true
|
||||
index: '*2'
|
||||
type: doc
|
||||
|
||||
- is_true: test_2.mappings.doc
|
||||
- is_false: test_1
|
|
@ -1,106 +0,0 @@
|
|||
---
|
||||
"Non-existent type returns 404":
|
||||
- do:
|
||||
indices.create:
|
||||
include_type_name: true
|
||||
index: test_index
|
||||
body:
|
||||
mappings:
|
||||
test_type:
|
||||
properties:
|
||||
text:
|
||||
type: text
|
||||
analyzer: whitespace
|
||||
|
||||
- do:
|
||||
catch: missing
|
||||
indices.get_mapping:
|
||||
include_type_name: true
|
||||
index: test_index
|
||||
type: not_test_type
|
||||
|
||||
- match: { status: 404 }
|
||||
- match: { error.reason: 'type[[not_test_type]] missing' }
|
||||
|
||||
---
|
||||
"No type matching pattern returns 404":
|
||||
- do:
|
||||
indices.create:
|
||||
include_type_name: true
|
||||
index: test_index
|
||||
body:
|
||||
mappings:
|
||||
test_type:
|
||||
properties:
|
||||
text:
|
||||
type: text
|
||||
analyzer: whitespace
|
||||
|
||||
- do:
|
||||
catch: missing
|
||||
indices.get_mapping:
|
||||
include_type_name: true
|
||||
index: test_index
|
||||
type: test*,not*
|
||||
|
||||
- match: { status: 404 }
|
||||
- match: { error: 'type [not*] missing' }
|
||||
- is_true: test_index.mappings.test_type
|
||||
|
||||
---
|
||||
"Existent and non-existent type returns 404 and the existing type":
|
||||
- do:
|
||||
indices.create:
|
||||
include_type_name: true
|
||||
index: test_index
|
||||
body:
|
||||
mappings:
|
||||
test_type:
|
||||
properties:
|
||||
text:
|
||||
type: text
|
||||
analyzer: whitespace
|
||||
|
||||
- do:
|
||||
catch: missing
|
||||
indices.get_mapping:
|
||||
include_type_name: true
|
||||
index: test_index
|
||||
type: test_type,not_test_type
|
||||
|
||||
- match: { status: 404 }
|
||||
- match: { error: 'type [not_test_type] missing' }
|
||||
- is_true: test_index.mappings.test_type
|
||||
|
||||
---
|
||||
"Existent and non-existent types returns 404 and the existing type":
|
||||
- do:
|
||||
indices.create:
|
||||
include_type_name: true
|
||||
index: test_index
|
||||
body:
|
||||
mappings:
|
||||
test_type:
|
||||
properties:
|
||||
text:
|
||||
type: text
|
||||
analyzer: whitespace
|
||||
|
||||
- do:
|
||||
catch: missing
|
||||
indices.get_mapping:
|
||||
include_type_name: true
|
||||
index: test_index
|
||||
type: test_type,not_test_type,another_not_test_type
|
||||
|
||||
- match: { status: 404 }
|
||||
- match: { error: 'types [another_not_test_type,not_test_type] missing' }
|
||||
- is_true: test_index.mappings.test_type
|
||||
|
||||
---
|
||||
"Type missing when no types exist":
|
||||
- do:
|
||||
catch: missing
|
||||
indices.get_mapping:
|
||||
include_type_name: true
|
||||
type: not_test_type
|
|
@ -18,7 +18,6 @@
|
|||
|
||||
- do:
|
||||
indices.get_mapping:
|
||||
include_type_name: false
|
||||
index: test_alias
|
||||
|
||||
- match: {test_index.mappings.properties.text.type: text}
|
||||
|
|
|
@ -1,20 +0,0 @@
|
|||
---
|
||||
setup:
|
||||
|
||||
- do:
|
||||
indices.create:
|
||||
index: test_1
|
||||
|
||||
- do:
|
||||
indices.create:
|
||||
index: test_2
|
||||
|
||||
---
|
||||
"Check empty mapping when getting all mappings via /_mapping":
|
||||
|
||||
- do:
|
||||
indices.get_mapping:
|
||||
include_type_name: true
|
||||
|
||||
- match: { test_1.mappings: {}}
|
||||
- match: { test_2.mappings: {}}
|
|
@ -64,6 +64,9 @@
|
|||
|
||||
---
|
||||
"Put mappings with explicit _doc type":
|
||||
- skip:
|
||||
version: " - 1.99.99"
|
||||
reason: "deprecation message changed in 2.0"
|
||||
- do:
|
||||
indices.create:
|
||||
index: test_index
|
||||
|
@ -78,6 +81,31 @@
|
|||
field:
|
||||
type: keyword
|
||||
|
||||
- match: { error.type: "illegal_argument_exception" }
|
||||
- match: { error.reason: "Types cannot be provided in put mapping requests" }
|
||||
|
||||
---
|
||||
"Put mappings with explicit _doc type bwc":
|
||||
- skip:
|
||||
version: "2.0.0 - "
|
||||
reason: "old deprecation message for pre 2.0"
|
||||
features: "node_selector"
|
||||
- do:
|
||||
indices.create:
|
||||
index: test_index
|
||||
|
||||
- do:
|
||||
node_selector:
|
||||
version: " - 1.99.99"
|
||||
catch: bad_request
|
||||
indices.put_mapping:
|
||||
index: test_index
|
||||
body:
|
||||
_doc:
|
||||
properties:
|
||||
field:
|
||||
type: keyword
|
||||
|
||||
- match: { error.type: "illegal_argument_exception" }
|
||||
- match: { error.reason: "Types cannot be provided in put mapping requests, unless the include_type_name parameter is set to true." }
|
||||
|
||||
|
|
|
@ -68,15 +68,7 @@ public class RestGetFieldMappingAction extends BaseRestHandler {
|
|||
|
||||
@Override
|
||||
public List<Route> routes() {
|
||||
return unmodifiableList(
|
||||
asList(
|
||||
new Route(GET, "/_mapping/field/{fields}"),
|
||||
new Route(GET, "/_mapping/{type}/field/{fields}"),
|
||||
new Route(GET, "/{index}/_mapping/field/{fields}"),
|
||||
new Route(GET, "/{index}/{type}/_mapping/field/{fields}"),
|
||||
new Route(GET, "/{index}/_mapping/{type}/field/{fields}")
|
||||
)
|
||||
);
|
||||
return unmodifiableList(asList(new Route(GET, "/_mapping/field/{fields}"), new Route(GET, "/{index}/_mapping/field/{fields}")));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -87,21 +79,20 @@ public class RestGetFieldMappingAction extends BaseRestHandler {
|
|||
@Override
|
||||
public RestChannelConsumer prepareRequest(final RestRequest request, final NodeClient client) throws IOException {
|
||||
final String[] indices = Strings.splitStringByCommaToArray(request.param("index"));
|
||||
final String[] types = request.paramAsStringArrayOrEmptyIfAll("type");
|
||||
final String[] fields = Strings.splitStringByCommaToArray(request.param("fields"));
|
||||
|
||||
boolean includeTypeName = request.paramAsBoolean(INCLUDE_TYPE_NAME_PARAMETER, DEFAULT_INCLUDE_TYPE_NAME_POLICY);
|
||||
if (includeTypeName == false && types.length > 0) {
|
||||
throw new IllegalArgumentException("Types cannot be specified unless include_type_name" + " is set to true.");
|
||||
}
|
||||
GetFieldMappingsRequest getMappingsRequest = new GetFieldMappingsRequest();
|
||||
getMappingsRequest.indices(indices).fields(fields).includeDefaults(request.paramAsBoolean("include_defaults", false));
|
||||
getMappingsRequest.indicesOptions(IndicesOptions.fromRequest(request, getMappingsRequest.indicesOptions()));
|
||||
|
||||
if (request.hasParam(INCLUDE_TYPE_NAME_PARAMETER)) {
|
||||
boolean includeTypeName = request.paramAsBoolean(INCLUDE_TYPE_NAME_PARAMETER, DEFAULT_INCLUDE_TYPE_NAME_POLICY);
|
||||
if (includeTypeName) {
|
||||
throw new IllegalArgumentException(INCLUDE_TYPE_NAME_PARAMETER + " no longer supports the value [true].");
|
||||
}
|
||||
deprecationLogger.deprecate("get_field_mapping_with_types", TYPES_DEPRECATION_MESSAGE);
|
||||
}
|
||||
|
||||
GetFieldMappingsRequest getMappingsRequest = new GetFieldMappingsRequest();
|
||||
getMappingsRequest.indices(indices).types(types).fields(fields).includeDefaults(request.paramAsBoolean("include_defaults", false));
|
||||
getMappingsRequest.indicesOptions(IndicesOptions.fromRequest(request, getMappingsRequest.indicesOptions()));
|
||||
|
||||
if (request.hasParam("local")) {
|
||||
deprecationLogger.deprecate(
|
||||
"get_field_mapping_local",
|
||||
|
@ -116,7 +107,7 @@ public class RestGetFieldMappingAction extends BaseRestHandler {
|
|||
public RestResponse buildResponse(GetFieldMappingsResponse response, XContentBuilder builder) throws Exception {
|
||||
Map<String, Map<String, Map<String, FieldMappingMetadata>>> mappingsByIndex = response.mappings();
|
||||
|
||||
boolean isPossibleSingleFieldRequest = indices.length == 1 && types.length == 1 && fields.length == 1;
|
||||
boolean isPossibleSingleFieldRequest = indices.length == 1 && fields.length == 1;
|
||||
if (isPossibleSingleFieldRequest && isFieldMappingMissingField(mappingsByIndex)) {
|
||||
return new BytesRestResponse(OK, builder.startObject().endObject());
|
||||
}
|
||||
|
@ -126,7 +117,7 @@ public class RestGetFieldMappingAction extends BaseRestHandler {
|
|||
status = NOT_FOUND;
|
||||
}
|
||||
response.toXContent(builder, request);
|
||||
return new BytesRestResponse(status, builder);
|
||||
return new BytesRestResponse(RestStatus.OK, builder);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
|
|
@ -32,7 +32,6 @@
|
|||
|
||||
package org.opensearch.rest.action.admin.indices;
|
||||
|
||||
import com.carrotsearch.hppc.cursors.ObjectCursor;
|
||||
import org.apache.logging.log4j.LogManager;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
import org.opensearch.OpenSearchTimeoutException;
|
||||
|
@ -41,15 +40,10 @@ import org.opensearch.action.admin.indices.mapping.get.GetMappingsRequest;
|
|||
import org.opensearch.action.admin.indices.mapping.get.GetMappingsResponse;
|
||||
import org.opensearch.action.support.IndicesOptions;
|
||||
import org.opensearch.client.node.NodeClient;
|
||||
import org.opensearch.cluster.metadata.MappingMetadata;
|
||||
import org.opensearch.common.Strings;
|
||||
import org.opensearch.common.collect.ImmutableOpenMap;
|
||||
import org.opensearch.common.logging.DeprecationLogger;
|
||||
import org.opensearch.common.regex.Regex;
|
||||
import org.opensearch.common.unit.TimeValue;
|
||||
import org.opensearch.common.util.set.Sets;
|
||||
import org.opensearch.common.xcontent.XContentBuilder;
|
||||
import org.opensearch.indices.TypeMissingException;
|
||||
import org.opensearch.rest.BaseRestHandler;
|
||||
import org.opensearch.rest.BytesRestResponse;
|
||||
import org.opensearch.rest.RestRequest;
|
||||
|
@ -60,19 +54,11 @@ import org.opensearch.rest.action.RestBuilderListener;
|
|||
import org.opensearch.threadpool.ThreadPool;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.Set;
|
||||
import java.util.SortedSet;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import static java.util.Arrays.asList;
|
||||
import static java.util.Collections.unmodifiableList;
|
||||
import static org.opensearch.rest.RestRequest.Method.GET;
|
||||
import static org.opensearch.rest.RestRequest.Method.HEAD;
|
||||
|
||||
public class RestGetMappingAction extends BaseRestHandler {
|
||||
private static final Logger logger = LogManager.getLogger(RestGetMappingAction.class);
|
||||
|
@ -92,13 +78,8 @@ public class RestGetMappingAction extends BaseRestHandler {
|
|||
asList(
|
||||
new Route(GET, "/_mapping"),
|
||||
new Route(GET, "/_mappings"),
|
||||
new Route(GET, "/{index}/{type}/_mapping"),
|
||||
new Route(GET, "/{index}/_mapping"),
|
||||
new Route(GET, "/{index}/_mappings"),
|
||||
new Route(GET, "/{index}/_mappings/{type}"),
|
||||
new Route(GET, "/{index}/_mapping/{type}"),
|
||||
new Route(HEAD, "/{index}/_mapping/{type}"),
|
||||
new Route(GET, "/_mapping/{type}")
|
||||
new Route(GET, "/{index}/_mappings")
|
||||
)
|
||||
);
|
||||
}
|
||||
|
@ -111,22 +92,9 @@ public class RestGetMappingAction extends BaseRestHandler {
|
|||
@Override
|
||||
public RestChannelConsumer prepareRequest(final RestRequest request, final NodeClient client) throws IOException {
|
||||
final String[] indices = Strings.splitStringByCommaToArray(request.param("index"));
|
||||
final String[] types = request.paramAsStringArrayOrEmptyIfAll("type");
|
||||
boolean includeTypeName = request.paramAsBoolean(INCLUDE_TYPE_NAME_PARAMETER, DEFAULT_INCLUDE_TYPE_NAME_POLICY);
|
||||
|
||||
if (request.method().equals(HEAD)) {
|
||||
deprecationLogger.deprecate("get_mapping_types_removal", "Type exists requests are deprecated, as types have been deprecated.");
|
||||
} else if (includeTypeName == false && types.length > 0) {
|
||||
throw new IllegalArgumentException(
|
||||
"Types cannot be provided in get mapping requests, unless" + " include_type_name is set to true."
|
||||
);
|
||||
}
|
||||
if (request.hasParam(INCLUDE_TYPE_NAME_PARAMETER)) {
|
||||
deprecationLogger.deprecate("get_mapping_with_types", TYPES_DEPRECATION_MESSAGE);
|
||||
}
|
||||
|
||||
final GetMappingsRequest getMappingsRequest = new GetMappingsRequest();
|
||||
getMappingsRequest.indices(indices).types(types);
|
||||
getMappingsRequest.indices(indices);
|
||||
getMappingsRequest.indicesOptions(IndicesOptions.fromRequest(request, getMappingsRequest.indicesOptions()));
|
||||
final TimeValue timeout = request.paramAsTime("master_timeout", getMappingsRequest.masterNodeTimeout());
|
||||
getMappingsRequest.masterNodeTimeout(timeout);
|
||||
|
@ -146,59 +114,10 @@ public class RestGetMappingAction extends BaseRestHandler {
|
|||
if (threadPool.relativeTimeInMillis() - startTimeMs > timeout.millis()) {
|
||||
throw new OpenSearchTimeoutException("Timed out getting mappings");
|
||||
}
|
||||
final ImmutableOpenMap<String, ImmutableOpenMap<String, MappingMetadata>> mappingsByIndex = response
|
||||
.getMappings();
|
||||
if (mappingsByIndex.isEmpty() && types.length != 0) {
|
||||
builder.close();
|
||||
return new BytesRestResponse(channel, new TypeMissingException("_all", String.join(",", types)));
|
||||
}
|
||||
|
||||
final Set<String> typeNames = new HashSet<>();
|
||||
for (final ObjectCursor<ImmutableOpenMap<String, MappingMetadata>> cursor : mappingsByIndex.values()) {
|
||||
for (final ObjectCursor<String> inner : cursor.value.keys()) {
|
||||
typeNames.add(inner.value);
|
||||
}
|
||||
}
|
||||
|
||||
final SortedSet<String> difference = Sets.sortedDifference(
|
||||
Arrays.stream(types).collect(Collectors.toSet()),
|
||||
typeNames
|
||||
);
|
||||
|
||||
// now remove requested aliases that contain wildcards that are simple matches
|
||||
final List<String> matches = new ArrayList<>();
|
||||
outer: for (final String pattern : difference) {
|
||||
if (pattern.contains("*")) {
|
||||
for (final String typeName : typeNames) {
|
||||
if (Regex.simpleMatch(pattern, typeName)) {
|
||||
matches.add(pattern);
|
||||
continue outer;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
difference.removeAll(matches);
|
||||
|
||||
final RestStatus status;
|
||||
builder.startObject();
|
||||
{
|
||||
if (difference.isEmpty()) {
|
||||
status = RestStatus.OK;
|
||||
} else {
|
||||
status = RestStatus.NOT_FOUND;
|
||||
final String message = String.format(
|
||||
Locale.ROOT,
|
||||
"type" + (difference.size() == 1 ? "" : "s") + " [%s] missing",
|
||||
Strings.collectionToCommaDelimitedString(difference)
|
||||
);
|
||||
builder.field("error", message);
|
||||
builder.field("status", status.getStatus());
|
||||
}
|
||||
response.toXContent(builder, request);
|
||||
}
|
||||
response.toXContent(builder, request);
|
||||
builder.endObject();
|
||||
|
||||
return new BytesRestResponse(status, builder);
|
||||
return new BytesRestResponse(RestStatus.OK, builder);
|
||||
}
|
||||
}.onResponse(getMappingsResponse)));
|
||||
}
|
||||
|
|
|
@ -50,7 +50,6 @@ import java.util.Map;
|
|||
import static java.util.Arrays.asList;
|
||||
import static java.util.Collections.unmodifiableList;
|
||||
import static org.opensearch.client.Requests.putMappingRequest;
|
||||
import static org.opensearch.index.mapper.MapperService.isMappingSourceTyped;
|
||||
import static org.opensearch.rest.RestRequest.Method.POST;
|
||||
import static org.opensearch.rest.RestRequest.Method.PUT;
|
||||
|
||||
|
@ -65,20 +64,8 @@ public class RestPutMappingAction extends BaseRestHandler {
|
|||
asList(
|
||||
new Route(POST, "/{index}/_mapping/"),
|
||||
new Route(PUT, "/{index}/_mapping/"),
|
||||
new Route(POST, "/{index}/{type}/_mapping"),
|
||||
new Route(PUT, "/{index}/{type}/_mapping"),
|
||||
new Route(POST, "/{index}/_mapping/{type}"),
|
||||
new Route(PUT, "/{index}/_mapping/{type}"),
|
||||
new Route(POST, "/_mapping/{type}"),
|
||||
new Route(PUT, "/_mapping/{type}"),
|
||||
new Route(POST, "/{index}/_mappings/"),
|
||||
new Route(PUT, "/{index}/_mappings/"),
|
||||
new Route(POST, "/{index}/{type}/_mappings"),
|
||||
new Route(PUT, "/{index}/{type}/_mappings"),
|
||||
new Route(POST, "/{index}/_mappings/{type}"),
|
||||
new Route(PUT, "/{index}/_mappings/{type}"),
|
||||
new Route(POST, "/_mappings/{type}"),
|
||||
new Route(PUT, "/_mappings/{type}")
|
||||
new Route(PUT, "/{index}/_mappings/")
|
||||
)
|
||||
);
|
||||
}
|
||||
|
@ -90,21 +77,20 @@ public class RestPutMappingAction extends BaseRestHandler {
|
|||
|
||||
@Override
|
||||
public RestChannelConsumer prepareRequest(final RestRequest request, final NodeClient client) throws IOException {
|
||||
|
||||
PutMappingRequest putMappingRequest = putMappingRequest(Strings.splitStringByCommaToArray(request.param("index")));
|
||||
|
||||
final boolean includeTypeName = request.paramAsBoolean(INCLUDE_TYPE_NAME_PARAMETER, DEFAULT_INCLUDE_TYPE_NAME_POLICY);
|
||||
if (request.hasParam(INCLUDE_TYPE_NAME_PARAMETER)) {
|
||||
deprecationLogger.deprecate("put_mapping_with_types", TYPES_DEPRECATION_MESSAGE);
|
||||
}
|
||||
|
||||
PutMappingRequest putMappingRequest = putMappingRequest(Strings.splitStringByCommaToArray(request.param("index")));
|
||||
|
||||
final String type = request.param("type");
|
||||
putMappingRequest.type(includeTypeName ? type : MapperService.SINGLE_MAPPING_NAME);
|
||||
putMappingRequest.type(MapperService.SINGLE_MAPPING_NAME);
|
||||
|
||||
Map<String, Object> sourceAsMap = XContentHelper.convertToMap(request.requiredContent(), false, request.getXContentType()).v2();
|
||||
if (includeTypeName == false && (type != null || isMappingSourceTyped(MapperService.SINGLE_MAPPING_NAME, sourceAsMap))) {
|
||||
throw new IllegalArgumentException(
|
||||
"Types cannot be provided in put mapping requests, unless " + "the include_type_name parameter is set to true."
|
||||
);
|
||||
|
||||
if (includeTypeName == false && MapperService.isMappingSourceTyped(MapperService.SINGLE_MAPPING_NAME, sourceAsMap)) {
|
||||
throw new IllegalArgumentException("Types cannot be provided in put mapping requests");
|
||||
}
|
||||
|
||||
putMappingRequest.source(sourceAsMap);
|
||||
|
|
Loading…
Reference in New Issue