elasticsearch 如何使用动态类型名编写Elasticsearch映射
我有一个称为测试执行的概念实体,每个测试执行都应该是Elasticsearch索引中的一个单独类型。每个测试执行类型的映射都应该相同,并将动态添加到索引中 我已经为一个测试执行创建了一个映射,如下所示,我想将它推广到将来将创建的所有类型
elasticsearch 如何使用动态类型名编写Elasticsearch映射,
elasticsearch,
elasticsearch-5,
elasticsearch,
elasticsearch 5,我有一个称为测试执行的概念实体,每个测试执行都应该是Elasticsearch索引中的一个单独类型。每个测试执行类型的映射都应该相同,并将动态添加到索引中 我已经为一个测试执行创建了一个映射,如下所示,我想将它推广到将来将创建的所有类型 PUT /test_tool/_mapping/test_execution_20151710_1324_12 { "properties": { "timestamp":{
PUT /test_tool/_mapping/test_execution_20151710_1324_12
{
"properties": {
"timestamp":{
"type": "string",
"index": "not_analyzed"
},
"source":{
"type": "string",
"index": "not_analyzed"
},
"payload":{
"type": "string",
"index": "not_analyzed"
}
}
}
我应该如何为动态类型创建一个通用映射,例如:为类型“test\u execution\”创建一个通配符
[更新]
在看了下面的答案之后,我考虑了不要对不同的执行使用不同的类型,并且希望使用一个单独的键来识别同一测试执行中的文档
PUT /test_tool/_mapping/executions
{
"properties": {
"timestamp":{
"type": "string",
"index": "not_analyzed"
},
"source":{
"type": "string",
"index": "not_analyzed"
},
"payload":{
"type": "string",
"index": "not_analyzed"
},
"test_execution":{
"type": "string",
"index": "not_analyzed"
}
}
}
您需要的是使用一个模板: 定义名为template_1的模板,模板模式为te*。设置和映射将应用于与te*模式匹配的任何索引名
因此,在您的情况下,您需要使用类似于:
“template”:“test_to*”
我不确定每次执行都有一个自己的类型是否是一个好主意(我不想这样做),因为这会破坏您的映射
您可以在索引模板中使用\u default\u
类型来实现这一点,请参阅
但是,类型将在Elasticsearch的下一个版本中消失,因此您可能需要重新考虑该策略。在您的示例中,索引具有通配符,我想要的是动态类型。您是说类型是文档类型,对吗?这就是发生的情况,每当您创建一个名为anything的索引的新类型,该索引从test_execution_开始,模板中使用的映射将自动应用。如果这不是你想要的,请编辑你的问题,使你想要的更清楚。对不起,如果我误解了,请纠正我,如果我错了。在我的例子中,我有一个名为“test_tool”的不变索引,它应该包含具有“test_execution”模式的类型_*“.这就是你的意思吗?哦..”。。好吧,我的错我错过了。。因此,在您的情况下,您只需创建类似“test_*”的模板,并且您在该索引下创建的任何类型都将自动应用模板映射,但方法是相同的。据我所知,您所说的是,我在创建的索引中输入的任何类型都将具有给定的映射。如果这是真的,那么类型名称如何硬编码为“type1”
PUT _template/template_1
{
"template": "test_too*",
"settings": {
"number_of_shards": 1
},
"mappings": {
"type1": {
"_source": {
"enabled": false
},
"properties": {
"host_name": {
"type": "keyword"
},
"created_at": {
"type": "date",
"format": "EEE MMM dd HH:mm:ss Z YYYY"
}
}
}
}
}