`
iluoxuan
  • 浏览: 572856 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

BooleanQuery组合查询2.x版本吧

 
阅读更多

转载:http://zhxmyself.iteye.com/blog/466066

 

 

应用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学习资料】---<下载不扣分,回帖加1分,欢迎下载,童叟无欺>

    一共有2份资料 1&gt; lucene学习笔记 2&gt; 全文检索的实现机制 【1】lucene学习笔记的目录如下 1. 概述 3 2. lucene 的包结构 3 3. 索引文件格式 3 4. lucene中主要的类 4 4.1. Document文档类 4 4.1.1. 常用方法 4 ...

    Lucene 索引的简单使用

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

    lucene2.9.1完整DEMO及开发文档

    2) Query: 查询对象。把用户输入的查询字符串封装成Lucene能够识别的Query对象。 3) Filter: 用来过虑搜索结果的对象。 4) TopDocs: 代表查询结果集信息对象。它有两个属性: a) totalHits: 查询命中数。 b) ...

    Lucene 3.6 学习笔记

    (5) 多条件查询(BooleanQuery) 12 (6) 短语查询(PhraseQuery) 12 (7) 模糊查询(FuzzyQuery) 12 3.3 QueryParser 13 (1) 创建QueryParser 13 (2) 各种匹配方式 13 3.4 分页搜索 14 (1) 普通分页 14 (2) search...

    InformationRetrievalWithLucene

    信息检索 使用Lucene实现一个IR系统 功能: 索引:1.创建索引 2.delete index ...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. 创建...

    lucene例子

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

    lucene第一天完整代码

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

    Elasticsearch入门讲解

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

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

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

    lunces入门资料

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

Global site tag (gtag.js) - Google Analytics