【问题标题】:Exact match with double quotes in Elasticsearch 7在 Elasticsearch 7 中与双引号完全匹配
【发布时间】:2019-10-12 01:48:26
【问题描述】:

我曾经使用双引号来实现“精确匹配”(这里并不意味着术语级别的精确匹配,“Nike Air”应该匹配“nike air”,但不应该匹配“Nike Air Force”) ES 版本(2.x、5.x):

GET some-index/_search
{
  "query": {
    "match": {
      "brandName": "\"Nike Air\""
    }
  }
}

所以我只得到“Nike Air”而不是“Nike Air Force”。但是该查询在 ES 7 下不起作用 - 还返回了“Nike Air Force”。我怎样才能在 ES 7 下达到同样的效果?

这里是some-index的映射定义:

{
  "some-index" : {
    "mappings" : {
      "properties" : {
        "brandName" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "ignore_above" : 256
            }
          }
        }
      }
    }
  }
}

【问题讨论】:

标签: elasticsearch


【解决方案1】:

Match 查询搜索令牌。所以它会在文档中搜索 token nike 和 air

如果您打算进行完全匹配,请在关键字字段上使用 term 查询

 "query": {
    "term": {
      "brandName.keyword": "Nike Air"
    }
  }

【讨论】:

  • 感谢您的回复,抱歉这里的混淆“完全匹配”并不意味着术语级别的完全匹配,“Nike Air”应该匹配“nike air”,但不应该匹配“Nike Air Force” "。
  • 不区分大小写。如果使用术语查询文档应该有准确的单词(不区分大小写)并且顺序相同。在匹配查询令牌的情况下检查前。它将查找单词 nike / air ,将返回包含它们的任何文档。
猜你喜欢
  • 1970-01-01
  • 2016-01-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-22
  • 2022-10-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多