如何在Elasticsearch中进行精确匹配?

3

我想要找到精确匹配的结果,如果没有匹配项,我不希望返回null

我正在搜索此 ID:6a8c283f-1e75-ec11-8943-000d3a15f525。它给出的输出为:

  • fcf0dd4e-abbc-ec11-983f-0022482588e9

但是只有 ec11 能够匹配,其他的不行。

我尝试过这个搜索查询:

 result = await client.search({
          index: 'products',
          "query": {
            "match": {
              "sysid":sysid
            }
          }
        })
1个回答

4
问题出在你的sysid字段是text类型,因此在索引时进行了分析并被拆分成了fcf0dd4eabbcec118943000d3a15f525
当使用匹配查询搜索时,搜索词也会被分析成以下标记:6a8c283f1e75ec118943000d3a15f525
正如你看到的那样,匹配成功是因为有一个ec11
要进行精确匹配,您需要针对一个keyword字段运行查询。也许你很幸运,你的映射已经包含一个sysid.keyword子字段。如果没有,你需要更改你的映射并重新索引你的数据。
然后你就能运行这个term查询,并得到你的精确匹配:
  "term": {
     "sysid.keyword":sysid
  }

如果可能的话,您能回答这个问题吗?https://stackoverflow.com/questions/71882267/how-to-search-in-two-column-in-elastic/71882722#71882722 - user18639304
这是与此问题相同的问题。问题在于您的sysid字段。您能分享一下映射吗?即您从GET products获取了什么。 - Val

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接