0

私の Lucene 検索では、特定のセットの一部ではない特定のフィールド要素でインデックス付けされたすべてのドキュメントを除外したいと考えています。

たとえば、私のドキュメントが図面を表しているとしましょう。カラーフィールドがあります。色フィールドでは、図面で使用されるすべての色にインデックスを付けます。ここで、5 つの色にアクセスできるとします。赤、青、緑、紫、茶色。これらの色を使用する図面のみを取得したいので、上記の色以外の色の図面は除外する必要があります。これらすべての色を使用し、これらすべての色のみを使用するすべての図面が必要な場合は、ドキュメントに「色の数」用の新しいフィールドを追加し、各色に MUST 用語クエリを追加してブールクエリを作成できます。カウントを色の数として MUST ブールクエリを追加します。しかし、上記の 5 色の組み合わせを持つすべてのドキュメントも取得したいと考えています。したがって、完全に茶色で行われた図面も取得されます。

私は何千もの色を持っていることに注意してください。したがって、各色のフィールドを作成してから、私の5色以外のすべての人にMUST_NOTを実行することもオプションではありません.

どうもありがとう!

4

1 に答える 1

0

それを行う組み込みの方法はないと思います。代わりに、(特定の図面に含まれる) 色のセットをどこかに保存する必要があります。次に、検索時に各検索結果を調べながら、カラー セットを読み込み、「その他の」カラーが含まれているかどうかを確認し、それに応じて結果をフィルタリングします。

その場所は、少なくとも 2 つの場所のいずれかになります。

  • 格納されたフィールド: たとえば、色セットを色名のコンマ区切りリストとして文字列として格納できます。
  • 単語ベクトル: 色フィールドを単語ベクトルでインデックス付けすると、検索時にIndexReader.getTermFreqVector(int, String)を呼び出して、そのドキュメント/フィールドの単語ベクトル情報を取得できます。結果の TermFreqVector オブジェクトは、そのフィールドの用語 (つまり、この場合は色) のリスト (実際にはセット) を提供します。
于 2012-07-11T04:30:19.207 に答える