/**
* “多條件查詢”搜索—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"));
}
}