有没有办法在弹性搜索中匹配相似的匹配项

Is there any way to match similar match in Elastic Search

我有弹性搜索大文档

我正在使用以下查询进行搜索

{"size": 1000, "query": {"query_string": {"query": "( string1 )"}}}

假设我的 string1 = 产品,如果某个人忘记了某个意外类型的产品 o

有什么方法可以搜索到吗

{"size": 1000, "query": {"query_string": {"query": "( prdct )"}}} 还必须 return prdct + 产品的结果

您可以使用fuzzy query that returns documents that contain terms similar to the search term. Refer this blog获取模糊查询的详细解释。

因为,您有更多的编辑距离可以匹配 prdct。模糊参数可以定义为:

0, 1, 2

0..2 = Must match exactly

3..5 = One edit allowed

More than 5 = Two edits allowed

索引数据:

{
  "title":"product"
}
{
  "title":"prdct"
}

搜索查询:

{
    "query": {
        "fuzzy": {
            "title": {
                "value": "prdct",
                "fuzziness":15,
                "transpositions":true,
                 "boost": 5
            }
        }
    }
}

搜索结果:

"hits": [
      {
        "_index": "my-index1",
        "_type": "_doc",
        "_id": "2",
        "_score": 3.465736,
        "_source": {
          "title": "prdct"
        }
      },
      {
        "_index": "my-index1",
        "_type": "_doc",
        "_id": "1",
        "_score": 2.0794415,
        "_source": {
          "title": "product"
        }
      }
    ]

这个问题有很多解决方法:

  • Suggestions(您的意思是 X)。
  • Fuzziness(根据您的原始搜索词进行编辑)。
  • 使用自动完成进行部分匹配(如果有人键入“pr”并且您提供了可用的搜索词,他们可以立即点击正确的结果)或n-grams(匹配字母组)。

所有这些都在索引/搜索开销以及经典的精度/召回问题方面进行了权衡。