如何在弹性搜索中进行精确匹配?

how to do exact match in elastic search?

我想找到完全匹配。如果没有匹配。我不想 null

我正在搜索这个id 6a8c283f-1e75-ec11-8943-000d3a15f525。 它给了我这个输出

但是只有这些不匹配ec11匹配

我试过这个搜索查询

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

问题是因为您的 sysid 字段是 text 类型,因此在索引时被分析并标记为 fcf0dd4eabbcec118943000d3a15f525.

此外,当使用匹配查询进行搜索时,搜索词也会被分析为以下标记 6a8c283f1e75ec118943000d3a15f525.

如您所见,匹配成功是因为 ec11 匹配。

对于完全匹配,您需要做的是 运行 您对 keyword 字段的查询。也许你很幸运,你的映射已经包含 sysid.keyword sub-field。如果不是,您需要更改映射并重新索引数据。

然后您将能够 运行 您的 term 查询并获得完全匹配:

  "term": {
     "sysid.keyword":sysid
  }