按部分文本栏搜索3

时间:2012-11-10 07:50:22

标签: ruby-on-rails-3

我有一个搜索表单,搜索我的食谱模型中的多个列,此时它仅以完整字符串为基础返回结果,所以如果我搜索lasagne我得到一个结果,但是如果我搜索lasa然后我什么都没有返回。我是否正确地认为那样做=?搜索我需要做一个LIKE搜索?如果是这样,我不确定实现此目的的语法。

我当前的查询看起来像这样

@countrysearch = Recipe.where("dish_name = ? OR country_of_origin = ? OR difficulty = ? OR preperation_time = ?",
params[:search],
params[:search],
params[:search],
params[:search]

我需要做什么才能通过部分文本进行搜索?或者有人可以指向我建议使用什么语法的资源?

任何帮助表示赞赏

感谢

3 个答案:

答案 0 :(得分:1)

好吧我想我找到了答案,但如果有人有更好的解决方案,请告知

在控制器内我现在有

    q = "%#{params[:search]}%"
    @countrysearch = Recipe.where("dish_name LIKE ? OR country_of_origin LIKE ? OR difficulty LIKE ? OR preperation_time LIKE?",
q,
q,
q,
q

答案 1 :(得分:1)

如果您的表中没有大量数据,这可以工作。如果你有很多食谱,那么对大型数据集的这么多LIKE次查询就会很快陷入困境。

我建议您查看允许模糊搜索的Rails的几个搜索引擎集成。有几个很好的选项可以让您与Rails模型紧密集成,因此无论何时更新模型,它都会更新您的搜索索引。

我最喜欢的是Elasticsearch,在Rails中使用tire,但许多人都对Solr,Thinking Sphinx和其他人发誓。查看Railscasts有几个不错的搜索选项,其中任何一个都可以解决您的问题。

答案 2 :(得分:0)

如果您使用了postgresql数据库,请检查pg_search gem,它支持全文搜索,并提供许多有用的选项。