仅在Elasticsearch区分大小写时获得结果

时间:2020-06-24 15:26:37

标签: elasticsearch

我目前在ES中的多重匹配搜索存在问题。 就像这样简单:如果我正在搜索“萨克森”市,那么我会得到结果。 如果我搜索“ sachsen”(小写),则没有结果。

如何避免这种情况?

查询无结果

{
"match" : {
    "City" : {
        "query" : "sachsen"
    }
}

我的分析器是analyzer_keyword。我应该添加什么吗?

地图

City: {
type: "string",
analyzer: "analyzer_keyword"
}

1 个答案:

答案 0 :(得分:1)

您的analyzer_keyword分析器很可能是keyword类型的,这意味着您只能对其执行 exact 匹配。


应用多个"variants" of a field是一种标准做法,其中之一将匹配小写的,可能是带ASCII标记的字符(请考虑München-> munchen),而另一个则不会以任何方式标记(这就是您analyzer_keyword中的标记)。

由于您打算搜索Sachsen的小写版本,因此映射可能类似于

PUT sachsen
{
  "mappings": {
    "properties": {
      "City": {
        "type": "keyword",             <----

        "fields": {
          "standard": {
            "type": "text",           
            "analyzer": "standard"     <----
          }
        }
      }
    }
  }
}

将文档编入索引

POST sachsen/_doc
{
  "City": "Sachsen"
}

以下内容适用于完全匹配:

GET sachsen/_search
{
  "query": {
    "match": {
      "City": "Sachsen"
    }
  }
}

这是小写字母

GET sachsen/_search
{
  "query": {
    "match": {
      "City.standard": "sachsen"
    }
  }
}

请注意,我在这里使用默认的standard分析器,但您可以选择任何您认为合适的分析器。