我有一个搜索表单,搜索我的食谱模型中的多个列,此时它仅以完整字符串为基础返回结果,所以如果我搜索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]
)
我需要做什么才能通过部分文本进行搜索?或者有人可以指向我建议使用什么语法的资源?
任何帮助表示赞赏
感谢
答案 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,它支持全文搜索,并提供许多有用的选项。