首页 > 解决方案 > 如何在字段上进行敏感和不敏感的大小写搜索

问题描述

当我像这样使用小写过滤器时,我可以对 foo 字段进行不敏感的大小写搜索,但是我不能对 foo 字段进行敏感的大小写搜索。就我而言,我需要根据情况决定对 foo 字段进行不敏感或敏感的大小写搜索。

{
  "settings": {
    "analysis": {
      "normalizer": {
        "lowercase_keyword": {
          "type": "custom",
          "filter": [
            "lowercase"
          ]
        }
      }
    }
  },
  "mappings": {
    "annotation_type": {
      "properties": {
        "foo": {
          "type": "keyword"
          "normalizer": "lowercase_keyword"
        }
      }
    }
  }
}

标签: elasticsearch

解决方案


这个想法是使用两个keyword字段,如下所示:

  "mappings": {
    "annotation_type": {
      "properties": {
        "foo": {
          "type": "keyword",
          "fields": {
            "insensitive": {
              "type": "keyword",
              "normalizer": "lowercase_keyword"
            }
          }
        }
      }
    }
  }

然后您可以使用foo以区分大小写的方式foo.insensitive进行搜索和不区分大小写进行搜索。


推荐阅读