【问题标题】:Number of results from elasticserch fuzzy_like_this_field influence "good" results being returnedelasticsearch blur_like_this 字段的结果数影响返回的“好”结果
【发布时间】:2013-07-01 06:47:49
【问题描述】:

对不起,糟糕的标题,但让我解释一下我遇到的问题。我目前正在做一个项目,其中一部分包括地址搜索引擎,我在elasticsearch中有。我正在尝试做的是在我的搜索栏中输入新字符时使用 blur_like_this_field 查询来生成自动完成结果,并尝试“猜测”用户正在输入的(约 100 万个)地址中的哪个。

我的问题是我目前对我的查询有大小限制,因为从时间上讲,返回所有结果既不必要又昂贵。我的问题是,除非我从查询中返回 1000 个或更多结果,否则我经常得不到“正确”的结果。例如,如果我在尝试搜索“100 Broadway”时输入“100 Broadway”,但只返回 200 个结果(大约是我可以在不花费太长时间的情况下完成的最大结果),则 100 Broadway 无处可寻,即使所有返回的结果都比我想要的结果具有更高的 levenshtein 距离。如果我从查询中返回 2000 个结果,我会得到“100 Broadway”作为第一个结果,但它需要的时间太长。我什至无法过滤返回的结果以将正确的结果带到顶部,因为它没有被返回。

不应该对查询设置 N 的大小限制返回最好的 N 个结果,而不是它们的看似随机的子集?

如果措辞不当或过于含糊,请见谅。

【问题讨论】:

    标签: python search autocomplete lucene elasticsearch


    【解决方案1】:

    您可以使用边缘 ngram 标记器编写自定义分析器,这将帮助您实现所需的目标。在这里找到弹性搜索演示的技术 https://www.elastic.co/guide/en/elasticsearch/guide/current/_index_time_search_as_you_type.html

    然后做一个简单的查询比如

    {
        "query": {
            "match":{
                "address": "100 Broadway"
             }
          }
    }
    

    你会做这份工作吗?您也可以考虑使用不同的分析器进行搜索,教程中也显示了(最后)。这将使您能够做一些事情,例如标记您的搜索查询并以不同于索引分析的方式对其进行预处理。

    【讨论】:

      【解决方案2】:

      我认为您可能对fuzzy_like_this query 有一些误解。

      模糊化作为字符串提供的所有术语,然后选择最好的 n 个可区分术语...对于每个源术语,模糊变体都保存在没有坐标因子的 BooleanQuery 中...

      如果您只想基于 Levenshtein 距离进行模糊搜索,请使用 fuzzy query

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-03-26
        • 1970-01-01
        • 1970-01-01
        • 2017-11-14
        • 1970-01-01
        • 2019-12-20
        • 2021-03-04
        相关资源
        最近更新 更多