Rails模糊搜索标题和描述

时间:2012-10-21 01:41:07

标签: ruby-on-rails ruby full-text-search fuzzy-search

我有一个简单的rails 3应用程序,它将餐馆列为训练练习。我希望能够使用餐厅索引页面上的一个文本字段搜索名称和描述。

鉴于查询披萨。比赛应该是

  • 名字:Tony's,描述:......是一家自1950年代以来一直存在的比萨饼店......
  • 名称:Domino's Pizza,描述:......
  • 名称:大厅,描述:...比萨饼,意大利面和牛排......

由于:

  1. 使用类似于TextMate的Cmd-T的逻辑,使用与 pizz eri a 相匹配的模糊匹配。 (比萨饼这个词中的空格只用于让迷你Markdown工作)
  2. pizza是与Pizza
  3. 小写匹配
  4. pizza是一个子串的比萨饼(应该与end-with with -with和includes一起使用)
  5. 我如何在rails 3中执行此操作?我是否使用thinking_sphinx,轮胎,sunspot-rails或我的应用程序的自定义查询。

3 个答案:

答案 0 :(得分:1)

唯一棘手的是比萨饼/比萨饼店,这是一个叫做词干的问题。

狮身人面像和solr /太阳黑子都支持,但我想你需要告诉他们披萨是披萨店的干。

答案 1 :(得分:1)

删除误报的一种方法是运行用户定义函数(UDF)来计算候选答案与原始字符串之间的编辑距离,并忽略编辑距离过大的答案。

答案 2 :(得分:0)

我找到了一个非常简单的解决方案来满足我的需求。

"%#{"pizza".scan(/./).join("%")}%"

这将创建一个类似于此

的字符串
"%p%i%z%z%a%"

然后我在LIKE查询中使用它,我得到了预期的结果。现在剩下的就是解决确定相关顺序的非平凡问题:)

更新:

基于假设较短的字符串最有可能是较长的字符串而不是较长的字符串,找到一种确定相关性顺序的快速而肮脏的方法。

ORDER BY length(sequence) ASC