`
dreamoftch
  • 浏览: 486430 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

booleanQuery termQuery 例子

 
阅读更多

转自:<a href="http://zhxmyself.iteye.com/blog/466066">http://zhxmyself.iteye.com/blog/466066</a>

 

 

 

 

应用BooleanQuery进行组合查询时,条件之间的关系是由类BooleanClause.Occur控制的,BooleanClause.Occur中提供了三个参数值进行控制,分别是BooleanClause.Occur.MUST 
BooleanClause.Occur.MUST_NOT 
BooleanClause.Occur.SHOULD 

它们的组合关系代表的意思如下: 
1、MUST和MUST表示“与”的关系,即“并集”。 
2、MUST和MUST_NOT前者包含后者不包含。 
3、MUST_NOT和MUST_NOT没意义 
4、SHOULD与MUST表示MUST,SHOULD失去意义; 
5、SHOUlD与MUST_NOT相当于MUST与MUST_NOT。 
6、SHOULD与SHOULD表示“或”的概念。 

BooleanQuery的条件生成方法如下: 
Term term1 = new Term(FIELD_CONTENT,"共"); 
TermQuery q1 = new TermQuery(term1); 
BooleanQuery booleanQuery = new BooleanQuery(); 
booleanQuery.add(q1, BooleanClause.Occur.MUST); 

Java代码  收藏代码
  1. package com.zhx.test;  
  2.   
  3. import java.io.IOException;  
  4.   
  5. import org.apache.lucene.analysis.Analyzer;  
  6. import org.apache.lucene.analysis.standard.StandardAnalyzer;  
  7. import org.apache.lucene.document.Document;  
  8. import org.apache.lucene.document.Field;  
  9. import org.apache.lucene.index.CorruptIndexException;  
  10. import org.apache.lucene.index.IndexReader;  
  11. import org.apache.lucene.index.IndexWriter;  
  12. import org.apache.lucene.index.Term;  
  13. import org.apache.lucene.search.BooleanClause;  
  14. import org.apache.lucene.search.BooleanQuery;  
  15. import org.apache.lucene.search.IndexSearcher;  
  16. import org.apache.lucene.search.ScoreDoc;  
  17. import org.apache.lucene.search.Searcher;  
  18. import org.apache.lucene.search.TermQuery;  
  19. import org.apache.lucene.search.TopDocs;  
  20. import org.apache.lucene.store.LockObtainFailedException;  
  21.   
  22. public class BooleanQuerySearcher {  
  23.   
  24.     /** 
  25.      * @param args 
  26.      */  
  27.     public static void main(String[] args) {  
  28.          //索引目录  
  29.          String IDNEX_PATH = "Z:/data/paoding/test_index";     
  30.          //字段名  
  31.          String FIELD_NAME = "field_name";  
  32.          //字段名  
  33.          String FIELD_CONTENT = "field_content";  
  34.             //获取Paoding中文分词器     
  35.             Analyzer analyzer = new StandardAnalyzer();     
  36.             //建立索引     
  37.             IndexWriter writer;     
  38.             try {     
  39.                 writer = new IndexWriter(IDNEX_PATH, analyzer, true,new IndexWriter.MaxFieldLength(10));     
  40.                   
  41.                 Document doc = new Document();     
  42.                 Field field = new Field(FIELD_NAME, "第一条记录", Field.Store.YES,     
  43.                         Field.Index.ANALYZED, Field.TermVector.WITH_POSITIONS_OFFSETS);   
  44.                 doc.add(field);    
  45.                 field = new Field(FIELD_CONTENT, "中华人民共和国", Field.Store.YES,     
  46.                         Field.Index.ANALYZED, Field.TermVector.WITH_POSITIONS_OFFSETS);   
  47.                 doc.add(field);     
  48.                 writer.addDocument(doc);   
  49.                   
  50.                 doc = new Document();    
  51.                 field = new Field(FIELD_NAME, "第二条记录", Field.Store.YES,     
  52.                         Field.Index.ANALYZED, Field.TermVector.WITH_POSITIONS_OFFSETS);    
  53.                 doc.add(field);  
  54.                 field = new Field(FIELD_CONTENT, "人民共和国", Field.Store.YES,     
  55.                         Field.Index.ANALYZED, Field.TermVector.WITH_POSITIONS_OFFSETS);     
  56.                 doc.add(field);  
  57.                 writer.addDocument(doc);   
  58.                 writer.close();     
  59.                 System.out.println("Indexed success!");     
  60.                       
  61.                 //检索     
  62.                 IndexReader reader = IndexReader.open(IDNEX_PATH);   
  63.                 //生成查询条件  
  64.                 Term term1 = new Term(FIELD_CONTENT,"共");  
  65.                 Term term2 = new Term(FIELD_CONTENT,"人");  
  66.                 Term term3 = new Term(FIELD_NAME,"二");  
  67.                 TermQuery q1 = new TermQuery(term1);  
  68.                 TermQuery q2 = new TermQuery(term2);  
  69.                 TermQuery q3 = new TermQuery(term3);  
  70.                 BooleanQuery booleanQuery = new BooleanQuery();  
  71.                 booleanQuery.add(q1, BooleanClause.Occur.MUST);  
  72.                 booleanQuery.add(q2, BooleanClause.Occur.MUST);  
  73.                 booleanQuery.add(q3, BooleanClause.Occur.MUST_NOT);  
  74.                 Searcher searcher = new IndexSearcher(reader);     
  75.                 TopDocs topDocs = searcher.search(booleanQuery,10);     
  76.                 if (topDocs.totalHits == 0) {     
  77.                     System.out.println("topDocs.totalHits = 0");     
  78.                 } else{  
  79.                     ScoreDoc[] scoreDocs = topDocs.scoreDocs;  
  80.                     for(int i=0;i<topDocs.totalHits;i++){  
  81.                         int docId = scoreDocs[i].doc;  
  82.                         Document document = searcher.doc(docId);  
  83.                         System.out.println("记录"+i+":"+document.get(FIELD_NAME)+" "+document.get(FIELD_CONTENT));                          
  84.                     }  
  85.                 }  
  86.                 reader.close();     
  87.             } catch (CorruptIndexException e) {     
  88.                 // TODO Auto-generated catch block     
  89.                 e.printStackTrace();     
  90.             } catch (LockObtainFailedException e) {     
  91.                 // TODO Auto-generated catch block     
  92.                 e.printStackTrace();     
  93.             } catch (IOException e) {     
  94.                 // TODO Auto-generated catch block     
  95.                 e.printStackTrace();     
  96.             }  
  97.   
  98.     }  
  99.   
  100. }
分享到:
评论

相关推荐

    lucene第一天完整代码

    @Test ... BooleanQuery booleanQuery = new BooleanQuery(); Query query1 = new TermQuery(new Term("fileName","apache")); Query query2 = new TermQuery(new Term("fileName","lucene"));

    lucene例子

    支持许多强大的查询类型,比如 PhraseQuery、WildcardQuery、RangeQuery、FuzzyQuery、BooleanQuery 等。 支持解析人们输入的丰富查询表达式。 允许用户使用定制排序、过滤和查询表达式解析扩展搜索行为。 使用基于...

    lunces入门资料

    如常见的TermQuery就是将一个简单的关键字进行封装后的对象,类似的还有BooleanQuery,即布尔型的查找。 IndexSearcher对象的search方法中总是需要一个Query对象(或是Query子类的对象),本节就来介绍各种Query类...

    Lucene 索引的简单使用

    Lucene创建索引,查询索引的简单使用。

    lucene2.9.1完整DEMO及开发文档

    // BooleanQuery query = new BooleanQuery(); // query.add(query1, Occur.SHOULD); // query.add(query2, Occur.SHOULD); // QueryParser parser = new MultiFieldQueryParser(Version.LUCENE_CURRENT, new ...

    【分享:lucene学习资料】---<下载不扣分,回帖加1分,欢迎下载,童叟无欺>

    9.4. 按“与或”搜索—BooleanQuery 19 9.5. 在某一范围内搜索—RangeQuery 19 9.6. 使用前缀搜索—PrefixQuery 19 9.7. 短语搜索—PhraseQuery 20 9.8. 多短语搜索—MultiPhraseQuery 20 9.9. 模糊搜索—FuzzyQuery...

    Lucene 3.6 学习笔记

    (3) 创建Term和TermQuery 9 (5) 根据TopDocs获取ScoreDoc 9 (6) 根据ScoreDoc获取相应文档 9 3.2 其他搜索 9 (1) 范围查询(TermRangeQuery) 10 (2) 数字查询(NumericRangeQuery) 11 (3) 前缀查询(PrefixQuery)...

    InformationRetrievalWithLucene

    信息检索 使用Lucene实现一个IR系统 ... 1.termQuery 2.multiFieldQuery 3.booleanQuery 4.prefixQuery 5.phraseQuery 6.multiPhraseQuery 7.regexpQuery 8.fuzzyQuery 9.queryparser 10.sort 11.filter

    lucene2.9.1所有最新开发包及源码及文档

    提供了索引搜索器IndexSearcher类和各种Query类,如TermQuery、BooleanQuery等。 6) queryParser模块:负责查询语句的语法分析。提供了解析查询语句的QueryParser类 7) util模块:包含一些公共工具类。 5. 创建...

    Lucene7.4位置相关性计算源代码思路.xmind

    Lucene7.4检索和打分过程的源代码阅读思路,这里只针对用BooleanQuery作为Query,从IndexSearch说起,从检索到打分的过程,还加入了自己的无关的一些想法,忽略即可。

    Elasticsearch入门讲解

    特详细易懂的《Elasticsearch入门讲解》,包含Elasticsearch使用场景、数据类型、数据映射、BooleanQuery、聚合查询等内容的讲解。是我根据自己的理解,转化为通熟易懂的话,来呈现给大家。

Global site tag (gtag.js) - Google Analytics