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
            }
          }
        }
      }
    }
  }
}

image-20211101095128241
image-20211101095128241

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

image-20211101095347702
image-20211101095347702

keyword後綴的則大小寫敏感,不帶的則不敏感,但經正常使用發現,它居然跟默認的不太一樣,居然不帶高亮,一不做二不休咱們直接修改配置,讓不帶keyword後綴的,也就是我們使用的默認的欄位查詢時大小寫敏感。因我們每日生成的索引名不同,但有固定格式,所我們通過模板修改索引欄位類型即可,操作如下:

設置

  • 創建一個索引模板,關聯索引

    image-20211101100232121
    image-20211101100232121

  • 索引設置保持默認即可

  • 自定義映射欄位(這裡的映射其實就是索引的_mapping)

    解釋: 我這裡是將traceId欄位的類型修改為 keyword類型,其他欄位則還為默認配置

    image-20211101100433386
    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"
      }
    }
  }
}

完工!

參考鏈接一

參考鏈接二

Tags: