2

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

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

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

即给定这两个食谱及其成分

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

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

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

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

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

4

2 回答 2

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 方法会稍微复杂一些。如果没有其他人提出好的建议,我稍后会看看它。

于 2013-05-24T12:19:10.263 回答
-2

在大多数情况下,我想使用 PgSearch gem ( https://github.com/Casecommons/pg_search )。我认为在这种情况下,您会发现多搜索方法很有帮助。

于 2013-05-24T14:10:00.833 回答