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

完工!

参考链接一

参考链接二

posted @ 2021-11-01 15:32  自在拉基  阅读(3932)  评论(0编辑  收藏  举报