1

我有一个搜索表单,可以在我的食谱模型中搜索多个列,目前它只返回完整字符串的结果,所以如果我搜索千层面我会得到一个结果,但是如果我搜索 lasa,那么我什么也得不到。我认为这样做是正确的吗 a = ?搜索 我需要进行 LIKE 搜索吗?如果是这样,我不确定实现这一点的语法。

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

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

)

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

任何帮助表示赞赏

谢谢

4

3 回答 3

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

)

于 2012-11-10T08:07:47.900 回答
1

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

我建议您查看几个允许模糊搜索的 Rails 搜索引擎集成。有几个不错的选项可以让您与 Rails 模型紧密集成,这样每当您更新模型时,它也会更新您的搜索索引。

我最喜欢的是Elasticsearch,在 Rails 中使用了轮胎,但很多人对 Solr、Thinking Sphinx 和其他人发誓。查看Railscasts以获得几个很好的搜索选项,其中任何一个都可以解决您的问题。

于 2012-11-10T08:21:48.540 回答
0

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

于 2012-11-10T14:05:59.347 回答