我正在使用批量api来创建索引和存储数据字段。我还想设置映射,以排除字段"field1"从源头。我知道这可以使用"创建索引api"来完成;参考:https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-source-field.html但我正在使用批量API。下面是示例API调用:
POST _bulk
{ "index" : { "_index" : "test", _type = 'testType', "_id" : "1" } }
{ "field1" : "value1" }
是否有一种方法可以在批量索引时添加映射设置,类似于以下代码:
{ "index" : { "_index" : "test", _type = 'testType', "_id" : "1" },
"mappings": {
"_source": {
"excludes": [
"field1"
]
}
}
}
{ "field1" : "value1" }
如何做映射与批量API?
在使用批量API时,不可能为新索引定义映射。你必须事先创建索引,然后定义映射,或者你必须定义一个索引模板,并在触发该模板的批量请求中为你的索引使用一个名称。
下面的示例代码可以通过Kibana的Dev Tools窗口执行:
PUT /_index_template/mytemplate
{
"index_patterns": [
"te*"
],
"priority": 1,
"template": {
"mappings": {
"_source": {
"excludes": [
"testexclude"
]
},
"properties": {
"testfield": {
"type": "keyword"
}
}
}
}
}
POST _bulk
{ "index" : { "_index" : "test", "_id" : "1" } }
{ "testfield" : "value1", "defaultField" : "asdf", "testexclude": "this shouldn't be in source" }
GET /test/_mapping
您可以从响应中看到,在这个例子中,映射模板被用于新的测试因为testfield只有关键字类型和源排除从模板中使用。
{
"test" : {
"mappings" : {
"_source" : {
"excludes" : [
"testexclude"
]
},
"properties" : {
"defaultField" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
},
"testexclude" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
},
"testfield" : {
"type" : "keyword"
}
}
}
}
}
文档也不带排除字段返回:
GET /test/_doc/1
反应:
{
"_index" : "test",
"_type" : "_doc",
"_id" : "1",
"_version" : 1,
"_seq_no" : 0,
"_primary_term" : 1,
"found" : true,
"_source" : {
"defaultField" : "asdf",
"testfield" : "value1"
}
}
希望这能回答你的问题并解决你的用例。