elasticsearch ElasticSearch查询不区分大小写,elasticsearch,nest,elasticsearch,Nest" /> elasticsearch ElasticSearch查询不区分大小写,elasticsearch,nest,elasticsearch,Nest" />

elasticsearch ElasticSearch查询不区分大小写

elasticsearch ElasticSearch查询不区分大小写,elasticsearch,nest,elasticsearch,Nest,我正在尝试搜索查询,它可以很好地进行精确搜索,但若用户输入小写或大写,它就不能工作,因为ElasticSearch不区分大小写 范例 { "query" : { "bool" : { "should" : { "match_all" : {} }, "filter" : { "term" : {

我正在尝试搜索查询,它可以很好地进行精确搜索,但若用户输入小写或大写,它就不能工作,因为ElasticSearch不区分大小写

范例

{
    "query" : {
        "bool" : { 
            "should" : {
                "match_all" : {} 
            },
            "filter" : {
                "term" : { 
                    "city" : "pune"
                }
            }
        }
    }
}

当city正好是“pune”时,它可以正常工作,如果我们将文本更改为“pune”,它将不工作。

除非您定义自定义映射,否则Elasticsearch将以小写形式分析文本字段

精确值(如数字、日期和关键字)具有精确值 在添加到反向索引的字段中指定,以便 它们是可搜索的

但是,将分析文本字段。这意味着他们的价值观是 首先通过分析器生成术语列表,这些术语是 然后添加到反向索引中。有很多方法可以分析文本: 默认的标准分析器会删除大多数标点符号,分解文本 将其转换为单个单词,并将其小写

见:

因此,如果您想使用术语查询 —  在查询之前,请自行完成。或者在这种情况下,将术语小写

ElasticSearch不区分大小写

“Elasticsearch”不区分大小写。默认情况下,JSON字符串属性将映射为(带有一个子或,我将很快解释)

text
数据类型具有与之相关联的分析概念;在索引时,输入的字符串被输入,结果项存储在一个反向索引数据结构中,用于快速全文搜索。对于未指定分析器的
文本
数据类型,将使用默认分析器,即。标准分析器的一个组件是,它将标记(术语)小写

当涉及到通过搜索API查询Elasticsearch时,有许多不同类型的查询可供使用,以适应几乎任何用例。一系列查询,如
match
multi\u match
查询,都是全文查询。这些类型的查询在搜索时对查询输入执行分析,并将结果项与存储在倒排索引中的项进行比较。默认情况下使用的分析仪也将是标准分析仪

另一类查询,如
术语
术语
前缀
查询,是术语级查询。这些类型的查询不会分析查询输入,因此查询输入将与倒排索引中存储的术语进行比较


在您的示例中,您对
“city”
字段的
术语
查询在大写时未找到任何匹配项,因为它正在搜索其输入在索引时经过分析的
文本
字段。对于默认映射,这是
关键字
子字段可以提供帮助的地方。
关键字
数据类型不进行分析(它的分析类型为),因此可以用于精确匹配以及排序和聚合。要使用它,您只需要针对
“city.keyword”
字段。另一种方法是将
“city”
字段使用的分析器更改为不使用小写标记过滤器的分析器;采用这种方法需要重新索引索引中的所有文档。

为了解决这个问题,我创建了自定义规范化和更新映射以添加

在我们必须删除索引并再次添加它之前

首先删除索引

删除PUT

现在再次创建索引


那么,
city
字段的字段类型是什么?“city”:{“type”:“text”}您可能需要检查映射以查看是否分析了
city
字段。使用
match query
而不是
term query
。谢谢,这样可以轻松配置。
{
  "settings": {
    "analysis": {
      "normalizer": {
        "lowercase_normalizer": {
          "type": "custom",
          "char_filter": [],
          "filter": ["lowercase", "asciifolding"]
        }
      }
    }
  },
  "mappings": {
    "user": {
      "properties": {
        "city": {
          "type": "keyword",
          "normalizer": "lowercase_normalizer"
        }
      }
    }
  }
}