0

次のような Lucene ドキュメントを作成しています。

Document document = new Document();
document.add(new Field(FIELD_FOLDER_PATH,mSearchInput, Field.Store.YES, Field.Index.NOT_ANALYZED ));
Reader reader = new FileReader(file);
document.add(new Field(FIELD_CONTENTS, reader));
indexWriter.addDocument(document);

CONTENTS に対して Query を実行し、ワイルド文字も使用すると * 結果を取得できます。

QueryParser queryParser = new QueryParser (Version.LUCENE_36,FIELD_CONTENTS, analyzer);
Query query = queryParser.parse(searchString+"*");

しかし、 FIELD_FOLDER_PATH に対して同じクエリを使用している場合、結果が得られません。

QueryParser queryParser = new QueryParser (Version.LUCENE_36,FIELD_FOLDER_PATH, analyzer);
Query query = queryParser.parse(FolderPath+"*");

ただし、正確な文字列を提供している場合にのみ、結果を取得できます。

私の質問は : FIELD_FOLDER_PATH で結果を取得するために (*) を使用できないのはなぜですか? フィールドの作成方法が原因ですか?

4

1 に答える 1

0

この種の機能をサポートするには、ワイルドカードクエリを使用する必要があります。このリンクは役に立ちます:

http://lucene.apache.org/core/old_versioned_docs/versions/3_0_1/api/core/org/apache/lucene/search/WildcardQuery.html

したがって、正確に行う必要があるのは、1つはqueryparserを使用し、もう1つはワイルドカードクエリを使用して2つのクエリを作成し、両方のクエリに対して「SHOULD」句を指定したBooleanQueryで両方のクエリを使用することです。

ブールクエリの詳細については、次のリンクにアクセスしてください。

http://lucene.apache.org/core/old_versioned_docs/versions/3_0_2/api/core/org/apache/lucene/search/BooleanQuery.html

于 2012-07-16T17:06:21.583 に答える