ElasticSearch 在区分大小写和不区分大小写的搜索之间切换?

时间:2021-03-17 19:17:36

标签: elasticsearch

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

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

1 个答案:

答案 0 :(得分:1)

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

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

索引映射:

df.fillna(df.mean) 类型字段使用标准分析器(可用于不区分大小写搜索),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"
    }
  }
}