/** * “多條件查詢”搜索—BooleanQuery * BooleanQuery也是實際開發過程中經常使用的一種Query。 * 它其實是一個組合的Query,在使用時可以把各種Query對象添加進去並標明它們之間的邏輯關系。 * 在本節中所討論的所有查詢類型都可以使用BooleanQuery綜合起來。 * BooleanQuery本身來講是一個布爾子句的容器,它提供了專門的API方法往其中添加子句, * 並標明它們之間的關系,以下代碼為BooleanQuery提供的用於添加子句的API接口: * @throws Exception */ @Test public void testBooleanQuery()throws Exception{ String searchField="contents"; String q1="xxxxxxxxx"; String q2="oooooooooooooooo"; Query query1=new TermQuery(new Term(searchField,q1)); Query query2=new TermQuery(new Term(searchField,q2)); BooleanQuery.Builder builder=new BooleanQuery.Builder(); // 1.MUST和MUST:取得連個查詢子句的交集。 // 2.MUST和MUST_NOT:表示查詢結果中不能包含MUST_NOT所對應得查詢子句的檢索結果。 // 3.SHOULD與MUST_NOT:連用時,功能同MUST和MUST_NOT。 // 4.SHOULD與MUST連用時,結果為MUST子句的檢索結果,但是SHOULD可影響排序。 // 5.SHOULD與SHOULD:表示“或”關系,最終檢索結果為所有檢索子句的並集。 // 6.MUST_NOT和MUST_NOT:無意義,檢索無結果。 builder.add(query1, BooleanClause.Occur.MUST); builder.add(query2, BooleanClause.Occur.MUST); BooleanQuery booleanQuery=builder.build(); TopDocs hits=is.search(booleanQuery, 10); System.out.println("匹配 "+q1 +"And"+q2+",總共查詢到"+hits.totalHits+"個文檔"); for(ScoreDoc scoreDoc:hits.scoreDocs){ Document doc=is.doc(scoreDoc.doc); System.out.println(doc.get("fullPath")); } }