2

次のようなフィールド テキストを持つ 5 つのドキュメントがあるとします。

  1. 赤い家は美しい
  2. 家は小さい
  3. 赤い魚
  4. 赤と黄色の家は大きい

「赤い家」を検索した場合、ランクが次のようなドキュメントを取得するには、どのようなクエリを使用すればよいですか?

  1. 赤い家は美しくて大きい [マッチング: 赤い家]
  2. 赤と黄色の家は大きい [マッチング: 赤 xx 家]
  3. the house is little [マッチング: 家]
  4. 赤い魚 [マッチング: 赤]

必要なのは、検索したフレーズに一致するドキュメントに高いランクを付け、フレーズの一部だけが検索されたドキュメントに低いスコアを与えることです。文字列クエリには 3 つ以上の用語が含まれている場合もあります。

これは、各用語が出現するかどうかを示し、用語が近いほどスコアが高くなる PhraseQuery のようなものです。

TermQuery を使用して PhraseQuery を構成しようとしましたが、必要な結果が得られません。

どのようにできるのか?

ありがとう

4

2 に答える 2

1

OR (BooleanClause.Occur.SHOULD) で結合された TermQuery オブジェクトで構成される BooleanQuery を作成してみてください。これは、用語が 1 つだけ出現するドキュメントに一致しますが、両方が出現するドキュメントにはより高いスコアを与える必要があります。

Query term1 = new TermQuery(new Term("text", "red"));
Query term2 = new TermQuery(new Term("text", "house"));
BooleanQuery booleanQuery = new BooleanQuery();
booleanQuery.add(term1, BooleanClause.Occur.SHOULD);
booleanQuery.add(term2, BooleanClause.Occur.SHOULD);
于 2013-10-07T03:26:42.620 に答える