2012-01-13 7 views
3

私はVersion.Lucene_29を使用しています。私は次のことを行うことができ、通常の文字列のクエリメソッドを使用:LuceneのMultiFieldQueryParserの使い方は?

Directory directory = new FSDirectory(...); 
//Start Lucene retrieval. 
IndexSearcher iSearch = new IndexSearcher(directory, true); 
Analyzer analyzer = new WhitespaceAnalyzer(); 
QueryParser parser = new QueryParser(Version.LUCENE_29, "content", analyzer); 
String str = 'filename:testfile.txt AND filetext:"Singapore food"' 
Query query = parser.parse(str); 
ScoreDoc[] hits = iSearch.search(query, 1000).scoreDocs; 

どのように私は、文字列のクエリ方法と同様のLuceneでMultiFieldQueryParserを使用してクエリを発射しますか?

MultiFieldQueryParser multiParser = new MultiFieldQueryParser(
    Version.LUCENE_29, new String[] {"content", "ne"}, analyzer); 
str = ??? 
Query = ???? 
ScoreDoc[] hits = iSearch.search(query, 1000).scoreDocs; 

答えて

8

MultiFieldQueryParserを使用すると、複数のFiledsで同じAnalyzerを使用して「WORD」を検索することができます。

Query query = MultiFieldQueryParser.parse("development", 
     new String[]{"title", "subject"}, 
     new SimpleAnalyzer()); 

それがフィールドに単語の発展のためになります。複数の単語、例えばを含むキーワードを持っている可能性がある場合は、「件名」

+3

:「タイトル」とフィールド。 "ソフトウェア開発"では、 'MultiFieldQueryParser.setDefaultOperator(Operator.AND)'も設定する必要があります。そうでなければ、 "ソフトウェア" ** OR ** "開発"を含むすべての結果が見つかります。 – Feyyaz

1

MultiFieldQueryParserある-QueryParserMultiFieldQueryParserこの場合BooleanClauseに2つのクエリを作成します。したがって、ファイル名もサポートしています:testfile.txt AND filetext: "Singapore food"

関連する問題