3

理想的には、「ストア」、「ショップ」、「レストラン」などの特定の単語の重要性を減らしたいと考えています。

ユーザーが「ステーキ レストラン」を検索したときに、「ジミーズ ステーキ レストラン」が「ラルフズ ステーキ ハウス」と同じくらい重要になるようにしたいと考えています。「レストラン」という言葉の重要性を大幅に減らすことで、これを達成したいと考えています(他の20〜50の言葉とともに)。

ストップ ワードは、「a」、「the」、「of」などの一部の単語に適していますが、オール オア ナッシングです。

インデックスまたはマッピング レベルで単語ごとに重み付けまたはブースト値を提供する方法はありますか?

おそらくクエリレベルでこれを達成できますが、影響を減らす必要がある 50 個の単語がある場合、それは非常に悪いことになる可能性があります。

これは一般化された例でした。私の実際の複雑なソリューションでは、かなりの数の検索用語の影響を減らす必要があります。

4

1 に答える 1

4

インデックス作成中に用語レベルのブーストを指定することは不可能だと思います。 このスレッドで、Shay は Lucene で可能であると述べていますが、API を介して表示するのは難しい機能です。

同じことを示唆する別の関連スレッド。Shay は、custom_score クエリを使用して整理することをお勧めします。

まずは検索側で解決してみるといいと思います。検索時に重みがわかっている場合は、タグに応じて異なるブーストを適用するクエリを作成するか、custom_score クエリを使用できます。

Custom_score クエリは他のクエリよりも低速ですが、(実際のデータと関連するインデックス サイズを使用して) 実行して問題がないかどうかを確認することをお勧めします。良いことは、速度が遅い場合 (ここでの速度が遅いとは、負荷がかかった状態での待機時間と QPS の両方を意味します)、いつでもレプリカとマシンを追加して負荷を分離できることです。

これは、やや類似した用語レベルでブーストする custom_score クエリの例です (ただし、カテゴリ用語が 1 つしかない特別なフィールド用であるため、これは当てはまらない場合があります)。大量の単語リストがあるため、mvel を使用する代わりに、スクリプトをネイティブ スクリプトに分割する方が簡単な場合があります。

別の方法として、 「shop」、「restaurant」、「store」などの単語を交換する類義語トークン フィルターを追加することはできますか?

于 2013-01-23T16:54:42.817 に答える