ruby-on-rails - 在多个条件下使用 pg textsearch

标签 ruby-on-rails postgresql

我目前使用 postgres 文本搜索功能来搜索具有特定成分的食谱

Recipe.includes("ingredients").where("ingredients.name @@ :query", :query => query)

但我想做的是能够搜索多个成分查询名称,根据情况匹配全部或任何。

即鉴于这两个食谱及其成分

三明治 => 培根、奶酪、番茄 意大利面 => 培根,橄榄

使用id喜欢的这些自定义方法来定义

Recipe.search_by_any("培根番茄") => 三明治和意大利面 Recipe.search_by_all("培根番茄") => 三明治

如何在关联的记录列上使用 pg textsearch 来实现这一点?

我不想使用 PGSearch gem,因为它会给我一些奇怪的错误

最佳答案

部分答案:

最简单的搜索是匹配任何成分的搜索。使用内部联接来过滤您想要的结果。

def self.search_by_any(query)
  ingredients_query = query.split(' ').join('|')  # Convert queries like "Bacon Tomatoes" to "Bacon|Tomatoes"

  Recipe.joins(:ingredients).includes(:ingredients).where("ingredients.name @@ to_tsquery(:ingredients_query)", :ingredients_query => ingredients_query)
end

search_by_all 方法会稍微复杂一些。如果没有其他人提出好的建议,我稍后再看一下。

关于ruby-on-rails - 在多个条件下使用 pg textsearch,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16733287/

相关文章:

sql - 计算Postgresql中列类型的大小

ruby-on-rails - Rails 4 - 不要在变量中包含自己

mysql - 将 ActiveRecord MySQL 查询输出到页面

python - 如何将 Postgres 日期时间字段设置为 Odoo 日期时间字段

sql - 如何更正 ‘One to Many table’ 在 PL/pgSQL 中缺少引用?

sql - case when in where 子句 Postgresql

postgresql - 从触发器内的文本文件读取数据

jquery - Rails 中使用 jQuery 的模态对话框表单

html - 枚举和 View 集成的 Rails 替代品

ruby-on-rails - 复杂索引的 rails 长度