gpt4 book ai didi

elasticsearch - Elasticsearch Index模板丢失了原始字符串映射

转载 作者:行者123 更新时间:2023-12-03 01:43:46 25 4
gpt4 key购买 nike

我在单个节点上运行小型ELK 5.4.0堆栈服务器。当我开始时,我只是采用了所有默认值,这意味着每个索引有5个分片。我不需要所有这些分片的开销,所以我创建了一个索引模板,如下所示:

PUT /_template/logstash
{
"template": "logstash*",
"settings": {
"number_of_shards": 1,
"number_of_replicas": 0
}
}

这样做很好,但是我刚刚意识到ES中现在缺少所有原始字段。例如,“uri”是我的索引字段之一,而我过去常常将其作为未分析的版本来获取“uri.raw”。但是自从我更新了模板以来,它们就消失了。查看当前模板显示
GET /_template/logstash
Returns:
{
"logstash": {
"order": 0,
"template": "logstash*",
"settings": {
"index": {
"number_of_shards": "1",
"number_of_replicas": "0"
}
},
"mappings": {},
"aliases": {}
}
}

似乎映射已丢失。我可以从较早的索引中提取映射
GET /logstash-2017.03.01

并与最近的比较
GET /logstash-2017.08.01

在这里,我看到三月有一个类似的映射结构
mappings: {
"logs": {
"_all": {...},
"dynamic_templates": {...},
"properties": {...}
},
"_default_": {
"_all": {...},
"dynamic_templates": {...},
"properties": {...}
}
}

现在我只有
mappings: {
"logs": {
"properties": {...}
}
}

dynamic_templates散列包含有关创建“原始”字段的信息。

我的猜测是我需要添加将索引模板更新为
PUT /_template/logstash
{
"template": "logstash*",
"settings": {
"number_of_shards": 1,
"number_of_replicas": 0
},
"mappings": {
"logs": {
"_all": {...},
"dynamic_templates": {...},
},
"_default_": {
"_all": {...},
"dynamic_templates": {...},
"properties": {...}
}
}

IOW,除了 logs.properties(保存由logstash发送的当前字段列表)之外的所有内容。

但是我不是ES专家,现在有点担心。我原来的索引模板无法达到我的预期。我上面的计划行得通吗?还是我会让情况变得更糟?创建索引模板时是否必须始终包括所有内容?在拥有模板文件之前,旧索引的映射来自何处?

最佳答案

首次启动Logstash时,elasticsearch输出插件会使用正确的_default_模板和dynamic_templates安装its own index template

每次Logstash(即每天)创建新的logstash-*索引时,都会利用模板,并使用模板中存在的适当映射来创建索引。

现在您需要做的就是简单地获取已覆盖的正式logstash模板,然后像这样重新安装(但使用修改后的分片设置):

PUT /_template/logstash
{
"template" : "logstash-*",
"version" : 50001,
"settings" : {
"index.refresh_interval" : "5s"
"index.number_of_shards": 1,
"index.number_of_replicas": 0
},
"mappings" : {
"_default_" : {
"_all" : {"enabled" : true, "norms" : false},
"dynamic_templates" : [ {
"message_field" : {
"path_match" : "message",
"match_mapping_type" : "string",
"mapping" : {
"type" : "text",
"norms" : false
}
}
}, {
"string_fields" : {
"match" : "*",
"match_mapping_type" : "string",
"mapping" : {
"type" : "text", "norms" : false,
"fields" : {
"keyword" : { "type": "keyword", "ignore_above": 256 }
}
}
}
} ],
"properties" : {
"@timestamp": { "type": "date", "include_in_all": false },
"@version": { "type": "keyword", "include_in_all": false },
"geoip" : {
"dynamic": true,
"properties" : {
"ip": { "type": "ip" },
"location" : { "type" : "geo_point" },
"latitude" : { "type" : "half_float" },
"longitude" : { "type" : "half_float" }
}
}
}
}
}
}

您可能要做的另一种方法是不覆盖 logstash模板,而是使用任何其他id(例如 _template/my_logstash),以便在创建索引时,两个模板都将被插入并使用官方logstash模板和分片中的映射模板中的设置。

关于elasticsearch - Elasticsearch Index模板丢失了原始字符串映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45495449/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com