我正在尝试创建一个索引,它将在每次重新创建时都具有一个公共结构。我已经在ES上创建了一个模板,并希望在通过Java程序创建和填充索引时使用它。从Java API创建索引时,如何使用索引模板。
索引模板
PUT _template/quick-search
{
"index_patterns": ["quick-search*"],
"settings": {
"number_of_shards": 1
},
"mappings": {
"_source": {
"enabled": false
},
"properties": {
"item" : {
"type" : "long"
},
"description" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
},
"id" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
}
}
}
}发布于 2020-04-24 08:12:32
由于您已经添加了一个索引模板,如果您现在尝试将文档保存在一个不存在的索引上,并且它的名称将与您在模板"index_patterns": ["quick-search*"]中提供的模式相匹配,则elasticsearch将根据模板自动创建映射,而不是基于您的输入创建映射。
此外,如果您尝试创建新索引并尝试设置映射(同样与模式匹配),则模板将充当默认模板。因此,对于新的索引,可以将item的类型设置为keyword。这将覆盖模板的默认long,但其他设置将从模板中获取,并且也将存在。
要测试,请转到kibana并设置模板
PUT _template/quick-search
{
"index_patterns": [
"quick-search*"
],
"settings": {
"number_of_shards": 1
},
"mappings": {
"_source": {
"enabled": false
},
"properties": {
"item": {
"type": "long"
},
"description": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"id": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}
}
}
}然后尝试创建新索引,但item需要是关键字
PUT quick-search-item-keyword
{
"mappings": {
"properties": {
"item": {
"type": "keyword",
"index": true
}
}
}
}
GET quick-search-item-keyword/_mapping现在只需将文档保存在不存在的索引中
POST quick-search-test-id/_doc/
{
"id": "test"
}
GET quick-search-test-id/_mapping尝试将同一文档保存在不存在且与模板的索引模式不匹配的索引中
POST test/_doc/
{
"id": "test"
}
GET test/_mapping如果您使用java客户端,则没有什么不同。同样的道理也适用
https://stackoverflow.com/questions/61372865
复制相似问题