我在单个节点上运行一个小型ELK 5.4.0堆栈服务器。当我开始时,我只是采取了所有的默认设置,这意味着每个索引有5个分片。我不希望所有这些碎片的开销,所以我创建的索引模板,像这样:Elasticsearch索引模板丢失原始字符串映射
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": {...}
}
}
督察,一切,但logs.properties
(持有领域的logstash发送过当前的列表)。
但我不是ES专家,现在我有点担心。我原来的索引模板没有按照我认为的方式工作。我的上述计划是否有效?或者我会让事情变得更糟?当您创建索引模板时,您是否总是包含的一切?在我有模板文件之前,旧版索引的映射来自哪里?
感谢您的明确解释!在不明确的情况下添加一个注释:“.raw”字段现在已更改为“.keyword”字段。但一切都按照你的预测工作! –
真棒,很高兴它帮助! – Val