使用具有多个条件的pg textsearch

时间:2013-05-24 10:50:48

标签: ruby-on-rails postgresql

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

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

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

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

三明治=>培根,奶酪,番茄 Pasta =>培根,橄榄

使用这些自定义方法id来定义

Recipe.search_by_any(“培根番茄”)=>三明治和面食 Recipe.search_by_all(“培根番茄”)=>三明治

如何在相关记录列上使用pg textsearch实现此目的?

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

2 个答案:

答案 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)。我想你可以在这种情况下找到有用的多搜索方法。