【问题标题】:Why is it not suggested to implement typeahead using Wildcard search?为什么不建议使用通配符搜索实现预输入?
【发布时间】:2020-01-10 18:55:18
【问题描述】:

通常大多数教程都建议使用 Suggester 组件或原始类型头技术实现自动提示:

https://blog.griddynamics.com/implementing-autocomplete-with-solr/

但是我的问题是为什么没有人建议使用简单的通配符搜索来在用户键入 mob 时提供名称建议:

q=name:(*mob*)

使用这种方法来实施自动建议与其他方法相比是否可行?会有什么影响?

【问题讨论】:

    标签: solr


    【解决方案1】:

    该策略可以工作 - 用于简单查询。问题是,当您使用通配符进行查询时,不会调用分析链(有点简化 - 大多数过滤器不会被调用,只有 MultiTermAware 的过滤器不会被调用) - 所以只要你输入一个空格,你运气不好。您可以使用 ComplexPhraseQuery 来解决这个问题,但这可能不是您想要的(并且在术语数量方面可能会很快变得昂贵)。

    在带有前导通配符的示例中,查询也将非常昂贵 - 因为它需要 Lucene(Solr 的底层搜索库)实际上查看每个生成的令牌,并查看该令牌内的某个地方是否有文本 @987654322 @。而且由于您没有进行任何分析 - 如果您已索引 men's (在大多数情况下,它将被处理为仅匹配 men 作为单个标记),并搜索 men's* - 你会不会受到打击。

    所以它可以工作 - 有点 - 但它并不理想。这就是实施建议者的原因。 suggester component supports many different configuration options 获得您想要的行为,以及(对于某些后端)上下文过滤(仅使用通配符会更容易实现,因为它是常规的 fq)。建议器还支持权重 - 而通配符并不能真正以正确的方式做到这一点。

    【讨论】:

    • 非常感谢您的回复。但是我尝试用反冲空间替换空间,它似乎对大多数人都有效。
    • 这取决于对输入文本进行了何种分析以生成标记。
    猜你喜欢
    • 1970-01-01
    • 2011-04-08
    • 2015-07-09
    • 2023-03-29
    • 2014-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多