lucene多條件查詢”搜索—BooleanQuery


 

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM