我目前使用 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/