0

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

给定查询Pizza。比赛应该是

  • 名称:Tony's,描述:……是一家自 1950 年代就已存在的比萨店……
  • 名称:Domino's Pizza,描述:...
  • 名称:大厅,描述:...比萨、意大利面和牛排...

因为:

  1. Pizza 这个词是“ pizz eri a ”的模糊匹配,使用与 TextMate 的 Cmd-T 类似的逻辑。(单词 pizzeria 中的空格仅用于使 mini-Markdown 工作)
  2. Pizza 是 Pizza 的小写匹配
  3. Pizza 是 Pizzas 的子字符串(应与 end-with begin-with 和 include 一起使用)

我将如何在 Rails 3 中执行此操作?我是使用thinking_sphinx、轮胎、太阳黑子轨道还是只是我的应用程序的自定义查询。

4

3 回答 3

1

唯一棘手的是披萨/比萨店,这是一个称为词干的问题。

sphinx 和 solr/sunspot 都支持词干提取,但我想你需要教他们两个披萨是披萨店的梗。

于 2012-10-21T02:53:45.970 回答
1

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

于 2012-10-25T05:52:26.307 回答
0

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

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

这将创建一个看起来像这样的字符串

"%p%i%z%z%a%"

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

更新:

找到了一种快速而肮脏的方法来确定相关顺序,假设较短的字符串很可能比较长的字符串更接近匹配。

ORDER BY length(sequence) ASC
于 2012-10-21T11:34:05.820 回答