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

完工!

參考鏈接一

參考鏈接二


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM