0

Lucene でインデックス化された「説明」フィールドがあります。このフィールドには、本の説明が含まれています。BooleanQuery クラスを使用して、このフィールドで「これらのすべての単語」機能を実現するにはどうすればよいですか? たとえば、ユーザーが「売れ筋の本」と入力した場合、説明にこれらすべての単語が含まれる本を返す必要があります。

ありがとう!

4

2 に答える 2

1

これを機能させるには、次の 2 つの部分があります。

  1. 個々の単語がトークン化され、個別に索引付けされるように、受信文書を適切に分析する必要があります。
  2. ユーザー クエリをトークン化し、トークンを演算子と組み合わせる必要がありますAND

1 については、Lucene に付属するorg.apache.lucene.analysisアナライザーとトークナイザーが多数あります。パッケージを参照してください。多くの異なる言語、ステミング、ストップワードなどのオプションがあります。

#2 については、主にパッケージ内に、Lucene に付属する多くのクエリ パーサーがありますorg.apache.lucene.queryParserMultiFieldQueryParserあなたにとって良いかもしれません:すべての用語が存在することを要求するには、単に電話してください

QueryParser.setDefaultOperator(QueryParser.AND_OPERATOR)

Lucene in Actionは、いくつかのバージョンは古いものの、依然として正確であり、分析とクエリの解析に関する詳細情報を得るために非常に役立ちます。

于 2009-01-10T09:27:19.817 に答える
0

を介してすべてのクエリ部分(用語ごとに1つ)を追加すると信じています

BooleanQuery.add(Query, BooleanClause.Occur)

その2番目のパラメーターを定数BooleanClause.Occur.MUSTに設定すると、必要なものが得られるはずです。同等のクエリ構文は、「+term1+term2 +term3 ...」になります。

于 2009-01-10T09:16:40.947 に答える