`
dreamoftch
  • 浏览: 496667 次
  • 性别: 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. }
分享到:
评论

相关推荐

    Lucence的资料和例子

    - **Query**:表示用户查询,如TermQuery、BooleanQuery等。 - **Searcher**:执行搜索操作,如IndexSearcher。 - **Hit/ScoreDoc**:表示搜索结果的排名和分数。 4. **高级特性** - **多字段搜索**:一个文档...

    lucene开发部分例子

    在Lucene中,这包括创建Query对象,如TermQuery、BooleanQuery等,以及解析用户输入的查询字符串,将其转化为Query对象。理解如何正确构造和解析查询,能确保搜索引擎准确响应用户的意图。 "索引的管理"部分将介绍...

    lucene3小例子

    接着,构建一个`Query`对象,比如`TermQuery`、`WildcardQuery`或`BooleanQuery`等,它们对应不同的查询模式。使用`IndexSearcher`的`search(Query query, int n)`方法,可以找到与查询匹配的前n个文档,并返回一个`...

    lucene_demo例子

    5. **查询构造**:学习使用QueryParser创建标准查询,以及如何使用TermQuery、BooleanQuery、WildcardQuery、PhraseQuery等不同类型的查询来满足复杂搜索需求。 6. **搜索执行**:通过Searcher对象执行查询,获取...

    Lucene使用代码实例之搜索文档

    根据不同的查询需求,`Query`有多个子类,如`TermQuery`、`BooleanQuery`和`PrefixQuery`等。这些子类用于将用户的查询字符串转化为Lucene可以理解和执行的结构。 接着,我们关注`Term`类,它是Lucene中表示搜索的...

    lucene例子

    2. **Query构造**:Lucene提供多种Query类,如TermQuery、BooleanQuery、WildcardQuery等,可以根据需求构造复杂的查询条件。 3. **评分机制**:Lucene使用TF-IDF算法计算文档与查询的相关性,得分高的文档在搜索...

    lucene 3.0 例子

    3. **查询(Query)**:学习如何创建查询对象,如`TermQuery`、`WildcardQuery`或`BooleanQuery`,以及如何使用`IndexSearcher`执行查询。 4. **评分与排序(Scoring and Sorting)**:Lucene根据相关性对搜索结果...

    一个例子学懂搜索引擎(lucene)

    6. `Query`:表示一个搜索条件,例如,你可以创建`TermQuery`、`BooleanQuery`等。 7. `IndexReader`和`IndexSearcher`:分别用于读取索引和执行搜索。`IndexSearcher`使用`IndexReader`来访问索引,并执行`Query`。...

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

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

    lucene 3.6

    6. **Query**:Lucene 提供了多种查询类型,如 TermQuery、BooleanQuery、WildcardQuery 等,它们对应不同的搜索逻辑。用户可以通过这些查询类型组合出复杂的搜索条件。 7. **Hit 和 Score**:搜索结果以 Hit 形式...

    Lucene常用的Demo

    通过查看这些代码,你可以学习如何使用`TokenStream`进行自定义的文本分析,以及如何利用`TermQuery`、`BooleanQuery`和`WildcardQuery`等进行复杂查询。 在学习这些示例时,重点要理解以下几个关键概念: - **...

    Lucene简单列子工程

    9. **Query**:表示搜索条件的抽象对象,如TermQuery(单个词查询)、BooleanQuery(布尔逻辑查询)等。 10. **Hit**:搜索结果中的一个匹配项,包含文档的相关信息,如文档ID、分数等。 **在Eclipse中运行Lucene...

    Lucene在web项目中的应用

    在描述中提到的Leave_msg_project可能是演示如何在留言系统中使用Lucene的例子。在这个项目中,可能会有以下功能: - 用户提交留言时,使用Analyzer对留言内容进行分词并创建索引。 - 当用户搜索留言时,通过构建...

    全文搜索luncene.Net

    用户输入的查询字符串被解析成`Query`对象,Lucene.Net提供多种查询类型,如TermQuery、PhraseQuery、BooleanQuery等。`Analyzer`类用于处理查询字符串的分词,确保查询与索引中的词元匹配。 ### 4. 结果检索与排序...

    lucene-example

    查询解析器将用户的输入转换为Query对象,如TermQuery、BooleanQuery等。然后,Searcher执行查询,通过倒排索引(Inverted Index)找到相关文档。匹配度由评分函数(Scoring Function)确定,如TF-IDF算法。 4. **...

Global site tag (gtag.js) - Google Analytics