是否可以選擇性地爲某個類型啓用彈性搜索字段的索引?在彈性搜索中默認禁用字段分析
通過用於特定索引的映射設置,可以設置屬性
{「索引」:「not_analyzed」}
對於一個特定的字段。由於我的文檔有太多的字段,並且很可能在未來會改變結構,所以我需要一個映射,其中默認情況下不分析字段,除非有不同的指定。
這可能嗎?
是否可以選擇性地爲某個類型啓用彈性搜索字段的索引?在彈性搜索中默認禁用字段分析
通過用於特定索引的映射設置,可以設置屬性
{「索引」:「not_analyzed」}
對於一個特定的字段。由於我的文檔有太多的字段,並且很可能在未來會改變結構,所以我需要一個映射,其中默認情況下不分析字段,除非有不同的指定。
這可能嗎?
是 - 看看dynamic templates
嘗試以下操作:
PUT /my_index
{
"mappings": {
"my_type": {
"dynamic_templates": [
{ "notanalyzed": {
"match": "*",
"match_mapping_type": "string",
"mapping": {
"type": "string",
"index": "not_analyzed"
}
}
}
]
}
}
}
動態模板是那些不屬於你的映射新領域 - 從文檔:
使用dynamic_templates,您可以完全控制爲新檢測字段生成的映射 。
您還可以根據字段名稱來改變映射,例如,使用"match": "*_data"
,爲以「_data」結尾的字段名稱有一組不同的映射。
來自elasticsearch 5.x 字符串類型被禁用。相反elasticsearch已經推出了兩種類型文字和關鍵字。閱讀這個博客的原因是遷移數據https://www.elastic.co/blog/strings-are-dead-long-live-strings
因此,而不是添加一個模板來禁用分析器,你可以簡單地使用field.keyword進行精確搜索。 例如如果字段名稱是全名,你有項
然後,全名:「約翰」將返回兩種結果,而全名。關鍵字:「John」將返回單個記錄。
以防萬一,你還是要禁用文本字段,可以使用下面的動態模板,
PUT _template/disable_all_analyzer
{
"template": "*",
"mappings": {
"_default_": {
"dynamic_templates": [
{ "notanalyzed": {
"match": "*",
"match_mapping_type": "string",
"mapping": {
"type": "keyword"
}
}
}
]
}
}
}
乾杯!
我想分析哪些字段? – Edmondo1984
動態模板適用於未被映射覆蓋的新字段 - 「使用dynamic_templates,您可以完全控制爲新檢測字段生成的映射。」您還可以根據字段名稱來改變映射,例如使用「匹配」:「* _data」,以「_data」結尾的字段有一組不同的映射。 –