ElasticSearch查询未提供完全匹配

bvpmtnay  于 2022-11-02  发布在  ElasticSearch
关注(0)|答案(4)|浏览(254)

我搜索ElasticSearch与以下匹配查询,这是不是给我的确切匹配,而不是它给一些更多的不相关的匹配也。
我正在使用ElasticSearch6.2.3
请在下面查找我的查询

get items/_search
{
   "query" : {
      "match" : {
         "code" : "7000-8900"
      }
   }
}

请查找从match查询中获取的响应

7000-8900
7000-8002-WK
7000-8002-W
vfwfrxfs

vfwfrxfs1#

您必须使用term查询,而不是match,如文件所述:
术语查询查找包含倒排索引中指定的确切术语的文档
因此,您必须更改查询,如下所示:

get items/_search
{
   "query" : {
      "term" : {
         "code.keyword" : "7000-8900"
      }
   }
}

如果没有得到任何结果,有两种可能:

  • 搜索的术语与您所想的不一样(例如,未修剪)
  • 索引没有明确的Map,而且自动Map无法将功能变数代码识别为字串。

注意:如果Map正确且代码是术语字段,则可以使用“code”。如果Map是自动的且Map将其识别为文本,则需要使用“code.keyword”

mf98qq94

mf98qq942#

我在匹配中遇到了同样的问题,所以我试着使用term。但这是一个不好的做法。ES说,我们不应该使用term进行字符串匹配。
如果将字段指定为关键字,则匹配将执行完全匹配。
如果您没有将字段定义为关键字,您仍然可以这样进行查询:

get items/_search
{
   "query" : {
      "match" : {
         "code.keyword" : "7000-8900"
      }
   }
}
ztmd8pv5

ztmd8pv53#

您可以尝试此方法此查询返回完全匹配记录

import json
from elasticsearch import Elasticsearch

es = Elasticsearch('http://localhost:9200')
res = es.search(index="test_index", doc_type="test_doc", body=json.dumps({"query": {"match_phrase": {"name": "Jhon"}}})))
vd2z7a6w

vd2z7a6w4#

You can also search exact with .raw:
get items/_search
{
   "query" : {
      "match" : {
         "code.raw" : "7000-8900"
      }
   }
}

相关问题