0

このSOLRの質問について、誰かが私を正しい方向に導くのを手伝ってくれることを願っています...

ホテルの機能と評価を含むデータセットがあります。機能の例としては、「プール」、「ジム」、「無料 Wi-Fi」などがあります。各機能には 1 ~ 10 の評価があります。SOLR を使用して、これらの機能/評価のペアを、「ホテル名」や「場所」などの他のホテル関連の基準と組み合わせてクエリし、最も一致し、最も高いホテルが得られるようにしたいと考えています。評価された機能が検索結果の一番上に表示されます。次に例を示します。

エンド ユーザーがニューヨーク市のホテル (場所:「ニューヨーク市」) を「無料 Wi-Fi」と「プール」で検索しているとします。理想的には、検索結果の上部に一致するのは、次の機能を持つニューヨーク市のホテルです。 「無料wifi」と「プール」が最高の評価です.それが理にかなっていることを願っています?誰かがこのタイプのクエリを実行できるようにするSOLR機能の方向に私を送ることができますか?

ありがとう。

4

1 に答える 1

0

私はedismaxハンドラーを使用し、これを2つの部分で行います。

まず、ホテルにはプールがありますか?複数の値を持つフィールドを使用して、アメニティ:プール、アメニティ:ジムなどを検索するか、ブールフィールドのセット(プール:True、ジム:True)を使用します。

次に、評価のフィールドを用意し、ブースト機能を使用して各評価でブーストします。スコアはブーストで乗算されます。max()を使用して、ゼロまたは負の評価が問題を引き起こさないことを確認しました。solrconfig.xmlのリクエストハンドラー設定に入るサンプル定義は次のとおりです。

<str name="boost">product(max(pool_rating,1),max(gym_rating,1))</str>

product()は複数の引数を受け入れるため、それらを追加し続けることができます。

于 2012-04-16T17:49:50.910 に答える