Ruby的简单搜索替代品

时间:2010-12-24 09:59:56

标签: ruby-on-rails ruby search

我正在寻找一种简单的方法来生成“你是不是......”样式搜索提示,当搜索记录的标题没有点击子字符串匹配时,因为标点符号或措辞略有不同Rails 3 app。

最常见的是,当用户搜索“Alpha Beta”,“Alpha”和“Alpha”时,我想为“Alpha:Beta”生成点击次数Beta'代表'Alpha和Beta'和'Alpha Beta'代表'Alpha Beta',例如前两个示例的相反方向,因为我当前的子字符串搜索已经捕获了后一种情况。我更倾向于在没有上述每个例子的特定逻辑的情况下这样做,因为可能还有其他我现在想不到的变体。

我也更愿意回避一个解决方案,这个解决方案要求我在生成记录时使用备用拼写来管理记录的隐藏字段,然后搜索而不是公开显示的记录。

我猜测像Sphinx / Thinking Sphinx这样的正确全文搜索会实现这一点,但我想检查一下我的有限范围问题是否有更简单的解决方案。理想情况下,通过删除像''','和'这样的常用词以及像'&'这样的标点符号来自动生成这个隐藏字段的东西和记录标题和搜索词以及标题字段中的':'然后进行搜索。当玩杂耍时('Alpha Beta Gamma'可以匹配'Alpha,Beta,Gamma'而不是'Alpha,Gamma,Beta'),其余单词的实际顺序不一定必须匹配。

1 个答案:

答案 0 :(得分:2)

此解决方案无法满足您的所有要求,但我相信它足够值得一提 - 优秀的“scoped_search”宝石,可在https://github.com/wvanbergen/scoped_search

获取

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

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

但是,我不认为它与删除常用词有任何相似之处。也许你可以通过手动剥离你的常用词来获得一些里程,然后让scoped_search来搜索你修改过的术语?