【问题标题】:Simple search alternatives for RubyRuby 的简单搜索替代方案
【发布时间】:2010-12-24 09:59:55
【问题描述】:

我正在寻找一种简单的方法来生成“您的意思是...”风格的搜索提示,当对记录标题的搜索由于标点符号或措辞略有不同而未命中子字符串匹配时Rails 3 应用程序。

最常见的情况是,当用户搜索“Alpha Beta”时,我想为“Alpha: Beta”生成命中,“Alpha and Beta”为“Alpha & Beta”,“The Alpha Beta”为“Alpha Beta”,例如. 前两个示例的相反方向也是如此,因为我当前的子字符串搜索将已经捕获后一种情况。不过,对于上述每个示例,我更愿意在没有特定逻辑的情况下执行此操作,因为可能还有其他我现在想不出的变体。

我也更愿意回避一种解决方案,该解决方案要求我在生成记录时使用替代拼写来流行记录的隐藏字段,然后搜索该字段而不是公开显示的字段。

我猜像 Sphinx/Thinking Sphinx 这样的适当全文搜索可以实现这一点,但我想检查是否有更简单的解决方案来解决我的有限范围问题。理想情况下,通过从记录标题和搜索词以及标题字段中删除常用词(如“the”、“and”和“&”和“:”等标点符号)自动生成此隐藏字段,然后进行搜索。其余单词的实际顺序不一定要在杂耍时匹配('Alpha Beta Gamma' 可以匹配 'Alpha, Beta, Gamma' 但不能匹配 'Alpha, Gamma, Beta')。

【问题讨论】:

    标签: ruby-on-rails ruby search


    【解决方案1】:

    此解决方案不能满足您的所有要求,但我相信它已经足够接近,值得一提 - 出色的“scoped_search”gem,可在https://github.com/wvanbergen/scoped_search 获得

    它实现了一种简单的查询语言,其中搜索“alpha beta”会匹配包含所有这些词的结果,而不是确切的短语 - 有关它支持的更多信息,请参阅 wiki https://github.com/wvanbergen/scoped_search/wiki/query-language

    它在后台生成 SQL 查询,因此不需要像 Sphinx 这样的单独搜索守护进程。

    但是,我认为它不会做任何类似于去除常用词的事情。也许您可以通过手动删除常用词,然后让 scoped_search 搜索您修改后的词来获得一些里程?

    【讨论】:

    • 谢谢,尼尔斯。我可以很好地将它与我的黑名单逻辑结合起来。
    猜你喜欢
    • 2011-01-23
    • 2012-01-18
    • 2023-03-15
    • 2015-12-08
    • 1970-01-01
    • 2011-07-20
    • 1970-01-01
    • 2018-01-22
    • 2017-10-06
    相关资源
    最近更新 更多