lucene多条件查询”搜索—BooleanQuery

本文深入探讨了Lucene中BooleanQuery的使用方法,这是一种常用的查询方式,能够将多个查询条件组合起来,并通过布尔逻辑(MUST、SHOULD、MUST_NOT)定义它们之间的关系,实现复杂的多条件查询。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

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

 

转载于:https://www.cnblogs.com/silentmuh/p/7795236.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值