ES查詢區分大小寫
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"
}
}
}
}



