如何在elasticsearch中键入字段时为搜索添加模糊性?

vhmi4jdf  于 2021-06-15  发布在  ElasticSearch
关注(0)|答案(1)|浏览(332)

当你在elasticsearch上键入字段类型时,我一直在尝试给我的搜索添加一些模糊性,但从未得到所需的查询。有没有人有办法实施这个计划?

fkaflof6

fkaflof61#

fuzzy查询返回的文档包含与搜索项相似的项,这些项由levenshtein编辑距离度量。
模糊性参数可以指定为:
auto——它根据术语的长度生成编辑距离。对于长度:
0..2--必须完全匹配
3..5--允许一次编辑大于5--允许两次编辑
添加索引数据和搜索查询的工作示例。
索引数据:

{
  "title":"product"
}
{
  "title":"prodct"
}

搜索查询:

{
    "query": {
        "fuzzy": {
            "title": {
                "value": "prodc",
                "fuzziness":2,
                "transpositions":true,
                 "boost": 5
            }
        }
    }
}

搜索结果:

"hits": [
  {
    "_index": "test",
    "_type": "_doc",
    "_id": "1",
    "_score": 2.0794415,
    "_source": {
      "title": "product"
    }
  },
  {
    "_index": "test",
    "_type": "_doc",
    "_id": "2",
    "_score": 2.0794415,
    "_source": {
      "title": "produt"
    }
  }
]

参考这些博客来获得关于模糊查询的详细解释
https://www.elastic.co/blog/found-fuzzy-search
https://qbox.io/blog/elasticsearch-optimization-fuzziness-performance
更新1:参考本es官方文件
用于构造术语查询的术语支持fuzziness、prefix\ u length、max\ u expansions、rewrite和fuzzy\ u transpositions参数,但对从最终术语构造的前缀查询没有影响。
有一些未解决的问题和讨论的链接指出-模糊性不适用于bool\u前缀multi\u匹配(键入时搜索)
https://github.com/elastic/elasticsearch/issues/56229
https://discuss.elastic.co/t/fuzziness-not-work-with-bool-prefix-multi-match-search-as-you-type/229602/3

相关问题