2

Rails で食料品店の検索インターフェイスを構築しようとしています。データベースにいくつかの食料品店の商品を保存していますが、それらを検索する良い方法を見つけるのに苦労しています。

これまでのところ、Thinking Sphinxを使用して製品の全文検索を行ってきました。これは、「卵」などの一部のアイテムではうまく機能しますが、「ライム」などの他の検索ではいくつかの問題があります。

たとえば、「ライム」を検索すると、次のアイテムが返されます。

  • ダイエット シエラ ミスト レモン ライム 冷蔵庫 メイト ソーダ
  • G2 レモンライム 低カロリー電解質飲料
  • ディア パーク ベリー ライム スパークリング ウォーター
  • ライムクランベリージュースを使ったオーシャンスプレーカクテル
  • ビンテージ セルツァー ウォーター ライム ライム
  • ライムソーダコンターボトル入りコーラダイエット
  • ライムソーダ冷蔵庫パック入りコーラダイエット
  • ダイエット シエラ ミスト レモン ライム 冷蔵庫 メイト ソーダ
  • リフレシュ ソーダ ダイエット レモン ライム 冷蔵庫パック
  • リフレッシュソーダ レモンライム
  • リフレシュソーダ レモンライム 冷蔵庫パック
  • シエラミスト ナチュラルレモンライムソーダ
  • ...など

私が本当に欲しかったのは実際の果物だけでした。これは私のデータベースに次の製品としてリストされています。

  • ライム大
  • 有機ライム
  • ライムズ キー プレパック

検索をよりインテリジェントにするにはどうすればよいですか?

各製品について多くのカテゴリ データがあることは注目に値します。私は基本的に、各製品がツリーのルートノードである「フードツリー」全体を持っています。

たとえば、商品「Limes Large」の場合、次のカテゴリがあります。

果物と野菜 > 生の果物 > 柑橘類 > ライム 大

検索を改善するために、これらのカテゴリをどのように使用すればよいですか?

私の研究では、全文検索の代わりにセマンティック検索を使用する必要があると考え始めています。Ruby のPicky gemに出会いました。これは有望に見えますが、適切なアプローチがあるかどうかはわかりません。

セマンティック検索はより良い検索を実行するのに役立ちますか? Picky は、このように分類されたデータに適していますか? 他の洞察はありますか?ご指導いただければ幸いです。前もって感謝します。

4

2 に答える 2

3

私はPickyの開発者なので、少し偏見があります;)

私が正しく理解していれば、あなたの質問は次のように思われます。

名前に「ライム」という単語が含まれている製品があり、それらの製品の一部が果物として分類されておらず、それらの製品の一部が果物として分類されていないが、飲料として分類されていることを考えると、ユーザーは果物のみを検索するようにクエリをフィルタリングできるようにします。

正しく理解できれば幸いです。

Pickyのメインモードは分類された検索です。つまり、誰かがクエリに「ライムフルーツ」と入力すると、Pickyは(name:lime、type:fruit)のようなもの、および他のすべての組み合わせを見つけます。(会社:ライム、タイプ:飲料)。または、ユーザーが果物を検索するという素敵なインターフェースを介して事前に定義することもできます。「type:fruit lime」。これにより、Pickyは、タイプ「fruit」で、任意のカテゴリの「lime」の結果のみを検索するようになります。

ただし、カテゴリに含まれるかどうかでフィルタリングしたいので、このようなタスクにはファセット検索が最適だと思います。Pickyは最近ファセット検索を追加しました。したがって、次のようなことを行います。

picky_search.search "lime"

ライムの結果を表示するだけでなく、を使用して側面に「ライム」のすべての可能なタイプを表示します

picky_search.facets :type, filter: "lime"

次のように、可能なタイプのハッシュを取得します{ :fruit => 3, :beverage => 150 }。次に、ユーザーが「フルーツ」をクリックした場合、Pickyに別のクエリを送信します。今回は、フィルターを追加します。

picky_search.search "type:fruit lime"またはpicky_search.search "type:fruit name:lime"、その人が「ライム」の名前を検索していることがすでに明らかな場合。

これは、タイプフルーツのライムのみを返します。

これは簡単な概要にすぎません。お役に立てば幸いです。

于 2012-08-08T13:53:51.293 に答える
1

「カテゴリ」に関しては、タグ付けシステムの使用についても考えたいと思うかもしれません。そこには多くのタグ付け宝石があります。そうすれば、検索対象は、作成した他のデータ構造または「ツリー」から切り離されます。

簡単にするために、作成時にアイテムに自動的に付けられるタグが、ツリー内の位置やアイテム名に基づいているようにすることができます。これにより、必要に応じて簡単に変更することができますが、同時にツリーシステムの使いやすさを持ちながら、タグシステムの狭い検索機能も備えています.

開始するのに適した場所は次のとおりです。

https://github.com/mbleigh/acts-as-taggable-on#readme

そうすれば、「ダイエット シエラ ミスト レモン ライム 冷蔵庫 メイト ソーダ」のようなものは「レモン」でタグ付けされていないので表示されませんが、「オレンジ ジュース」でタグ付けされた「サニー D」のようなものはタグ付けできます。デフォルトのタグを使用することで、バックエンド ユーザーに負担をかけることはありません。

実際の検索に関しては、広告なしで、Google 検索システムを使用して調べるだけの価値があるかもしれません。タグをキーワードとして使用して、結果を絞り込むことができます。これは SEO にも役立つと同時に、検索を Google の手に委ねることもできると思います。つまり、サポートは基本的に保証されています。

于 2012-07-30T19:12:50.663 に答える