2

私は現在、postgresのテキスト検索機能を使用して、特定の成分を含むレシピを検索しています

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

しかし、私がやりたいのは、状況に応じてすべてまたは一部に一致する、複数の成分クエリ名を検索できるようにすることです。

つまり、これらの 2 つのレシピとその材料が与えられた場合

サンドイッチ => ベーコン、チーズ、トマト パスタ => ベーコン、オリーブ

これらのカスタムメソッドを使用して定義したい

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 に答える