2015-10-30 7 views
7

私はほとんどluceneに慣れていて、いくつかのクエリを試して表示しようとしています。 私はウェブ全体でグーグルをしましたが、この問題の正しい解決策を見つけることができません。ブール検索のソリューションには、BooleanQuery luceneクラスがあります。しかし、このクラスは(私が使用している)のLucene 5.3.1で廃止されHereLucene 5.3.xでBooleanQuery Builderを使用するにはどうすればよいですか?

は、これは私のコードの一部です:

public static void searchBooleanQuery(String indexDir, Query query1, 
             Query query2, Query query3, Query query4) throws IOException { 
    IndexReader rdr = DirectoryReader.open(FSDirectory.open(Paths.get(indexDir))); 
    IndexSearcher is = new IndexSearcher(rdr); 
    BooleanQuery.Builder booleanQuery = new BooleanQuery.Builder(); 
    booleanQuery.add(query1, BooleanClause.Occur.MUST); 
    booleanQuery.add(query2, BooleanClause.Occur.MUST); 
    booleanQuery.add(query3, BooleanClause.Occur.MUST); 
    booleanQuery.add(query4, BooleanClause.Occur.MUST); 
} 

更新

問題: 私ができますこのクラス(IndexSearcher)の検索メソッドはQuery!によって渡される必要があるため、この表示をしないでくださいBoolean QueryIndexSearcherオブジェクトです。だから私はこのコードを実行しようとしているとき、それは私にエラーを与える:

TopDocs hits = is.search(booleanQuery,10); 
... 
+0

あなたの問題は何ですか?あなたはクエリに追加しています。今すぐクエリを構築し、IndexSearcherと共に使用してください。 – user1071777

+0

私は更新で答えました。 @ user1071777 –

答えて

6

あなたbooleanQueryオブジェクトが実際にBooleanQuery.Builder、ないBooleanQueryのインスタンスです。

すべてのクエリをビルダーに追加したら、buildメソッドを呼び出す必要があります。

Ex。

TopDocs hits = is.search(booleanQuery.build(),10); 
+0

ありがとうございました!非常に動作します:) –

関連する問題