我目前正在使用postgres textsearch功能来搜索具有特定成分的食谱
Recipe.includes("ingredients").where("ingredients.name @@ :query", :query => query)
但我想要做的是能够搜索多个成分查询名称,根据情况匹配全部或任何。
即。鉴于这两个食谱及其成分
三明治=>培根,奶酪,番茄 Pasta =>培根,橄榄
使用这些自定义方法id来定义
Recipe.search_by_any(“培根番茄”)=>三明治和面食 Recipe.search_by_all(“培根番茄”)=>三明治
如何在相关记录列上使用pg textsearch实现此目的?
答案 0 :(得分:1)
部分答案:
简单搜索是匹配任何成分的搜索。使用内部联接来过滤所需的结果。
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方法会有点复杂。如果没有人给出好的建议,我稍后会看一下。
答案 1 :(得分:-2)
在大多数情况下,我想使用PgSearch gem(https://github.com/Casecommons/pg_search)。我想你可以在这种情况下找到有用的多搜索方法。