ES查詢區分大小寫
ES查詢在默認的情況下是不區分大小寫的,在5.0版本之后將
string
類型拆分成兩種新的數據類型,text
用於全文搜索(模糊搜索),keyword
用於關鍵字搜索(精確搜索)。
注意: 5.0之后 ES
字符串將默認同時映射成text
,keyword
類型,將會自動創建字面的動態映射,這是在你沒有修改任何設置的情況下的默認配置,如下:
{
"appname-2021.10.28" : {
"mappings" : {
"properties" : {
"@timestamp" : {
"type" : "date"
},
"@version" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
},
"totalEnabledSize" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
},
"traceId" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
}
}
}
}
}

在這種默認的情況下,我們通過字段查詢的時候都會有兩個字段一個是帶keyword
后綴的,一個是不帶的。帶``keyword`后綴的則是自動生成的。

keyword
后綴的則大小寫敏感,不帶的則不敏感,但經正常使用發現,它居然跟默認的不太一樣,居然不帶高亮,一不做二不休咱們直接修改配置,讓不帶keyword
后綴的,也就是我們使用的默認的字段查詢時大小寫敏感。因我們每日生成的索引名不同,但有固定格式,所我們通過模板修改索引字段類型即可,操作如下:
設置
-
創建一個索引模板,關聯索引
image-20211101100232121 -
索引設置保持默認即可
-
自定義映射字段(這里的映射其實就是索引的
_mapping
)解釋: 我這里是將
traceId
字段的類型修改為keyword
類型,其他字段則還為默認配置image-20211101100433386 { "properties": { "traceId": { "type": "keyword" } } }
-
別名則默認,無需設置
-
保存模板
注意:
當你保存模板了,那么保存模板后關聯到的索引才會生效新配置,在你保存模板之前的索引則不生效。比如你10.29好創建的模板,那么10.30創建的索引才會引用新配置。
分享一下我修改后的配置,如下:
{
"appname-2021.10.30" : {
"mappings" : {
"properties" : {
"@timestamp" : {
"type" : "date"
},
"@version" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
},
"totalEnabledSize" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
},
"traceId" : {
"type" : "keyword"
}
}
}
}
}
當然也可使用api來更新你的索引模板,因api使用不熟悉,所我使用可視化來操作,在此我提供一下我的PUT請求,供大家參考
PUT _template/chenfan-log
{
"order": 0,
"index_patterns": [
"appname*"
],
"settings": {
"index": {
"lifecycle": {
"name": "chenfan-log"
}
}
},
"mappings": {
"properties": {
"traceId": {
"type": "keyword"
}
}
}
}