我在單個節點上運行一個小型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