【问题标题】:ElasticSearch toggle between case-sensitive and case-insensitive search?ElasticSearch 在区分大小写和不区分大小写搜索之间切换?
【发布时间】:2021-03-18 09:47:52
【问题描述】:

我知道 ElasticSearch 默认不区分大小写,我们可以使用映射来强制区分大小写。

但是,我的要求是我需要在字段的不区分大小写和区分大小写之间切换。我应该如何解决这个问题。

【问题讨论】:

    标签: elasticsearch


    【解决方案1】:

    您可以使用multi-fields 为区分大小写和不区分大小写的搜索索引相同的字段。

    添加一个包含索引数据、映射、搜索查询和搜索结果的工作示例

    索引映射:

    text 类型字段使用标准分析器(可用于不区分大小写的搜索),keyword 字段使用关键字分析器(可用于不区分大小写的搜索)

    {
      "mappings": {
        "properties": {
          "name": {
            "type": "text",
            "fields": {                  // note this
              "raw": {
                "type": "keyword"
              }
            }
          }
        }
      }
    }
    

    索引数据:

    {
      "name": "john"
    }
    {
      "name": "JOHN"
    }
    

    区分大小写搜索的搜索查询:

    {
      "query": {
        "match": {
          "name.raw": "JOHN"
        }
      }
    }
    

    搜索结果:

    "hits": [
          {
            "_index": "66679730",
            "_type": "_doc",
            "_id": "1",
            "_score": 0.6931471,
            "_source": {
              "name": "JOHN"
            }
          }
        ]
    

    不区分大小写的搜索查询:

    {
      "query": {
        "match": {
          "name": "JOHN"
        }
      }
    }
    

    搜索结果将是

    "hits": [
          {
            "_index": "66679730",
            "_type": "_doc",
            "_id": "1",
            "_score": 0.18232156,
            "_source": {
              "name": "JOHN"
            }
          },
          {
            "_index": "66679730",
            "_type": "_doc",
            "_id": "2",
            "_score": 0.18232156,
            "_source": {
              "name": "john"
            }
          }
        ]
    

    【讨论】:

      猜你喜欢
      • 2017-06-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-15
      • 1970-01-01
      • 2012-01-31
      • 1970-01-01
      • 2018-08-05
      相关资源
      最近更新 更多