lucene利用BooleanQuery进行多个Query组合查询

lucene3.0中BooleanQuery 实现与或的复合搜索 . 
BooleanClause用于表示布尔查询子句关系的类,包括:BooleanClause.Occur.MUST,BooleanClause.Occur.MUST_NOT,BooleanClause.Occur.SHOULD。必须包含,不能包含,可以包含三种.有以下6种组合: 
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:无意义,检索无结果。 

[java]  view plain  copy
  1. package com.jiepu.lucene_23;  
  2. import java.io.File;  
  3. import java.io.IOException;  
  4. import org.apache.lucene.document.Document;  
  5. import org.apache.lucene.index.IndexReader;  
  6. import org.apache.lucene.index.Term;  
  7. import org.apache.lucene.search.BooleanClause.Occur;  
  8. import org.apache.lucene.search.BooleanQuery;  
  9. import org.apache.lucene.search.IndexSearcher;  
  10. import org.apache.lucene.search.ScoreDoc;  
  11. import org.apache.lucene.search.TermQuery;  
  12. import org.apache.lucene.search.TopDocs;  
  13. import org.apache.lucene.search.WildcardQuery;  
  14. import org.apache.lucene.store.Directory;  
  15. import org.apache.lucene.store.FSDirectory;  
  16.   
  17. /** 
  18.  * lucene利用BooleanQuery进行多个Query组合查询 
  19.  *  
  20.  */  
  21. public class LuceneWildCardSearcher {  
  22.   
  23.     public static void main(String[] args) {  
  24.           
  25.         String dir = "D:\\index";  
  26.         try {  
  27.               
  28.             Directory directory = FSDirectory.getDirectory(new File(dir));  
  29.             @SuppressWarnings("deprecation")  
  30.             IndexReader reader = IndexReader.open(directory);  
  31.             IndexSearcher indexSearcher = new IndexSearcher(reader);  
  32.             Term term = new Term("content""java*");  
  33.             WildcardQuery wildcardQuery = new WildcardQuery(term);  
  34.             Term term2 = new Term("datetime""191111");  
  35.             TermQuery termQuery = new TermQuery(term2);  
  36.             BooleanQuery booleanQuery = new BooleanQuery();  
  37.             booleanQuery.add(wildcardQuery, Occur.MUST);  
  38.             booleanQuery.add(termQuery, Occur.MUST);  
  39.             TopDocs topDocs = indexSearcher.search(booleanQuery,null10);  
  40.             ScoreDoc scoreDocs[] = topDocs.scoreDocs;  
  41.             for (int i = 0; i < scoreDocs.length; i++) {  
  42.                 Document document = indexSearcher.doc(scoreDocs[i].doc);  
  43.                 System.out.println(document.get("id"));  
  44.                 System.out.println(document.get("name"));  
  45.                 System.out.println(document.get("text"));  
  46.                 System.out.println(document.get("datetime"));  
  47.             }  
  48.             directory.close();  
  49.         } catch (IOException e) {  
  50.               
  51.             e.printStackTrace();  
  52.         }  
  53.     }  
  54. }  
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值