`

<转>LUCENE3.0 自学吧 4 TermDocs

 
阅读更多

利用TermDocs也是可以得到一些有用的结果。。。代码如下

 

[java] view plaincopy
  1. package com.fpi.lucene.studying.myfirstlucene;  
  2. import java.io.File;  
  3. import java.io.IOException;  
  4. import org.apache.lucene.LucenePackage;  
  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.index.CorruptIndexException;  
  9. import org.apache.lucene.index.IndexFileNameFilter;  
  10. import org.apache.lucene.index.IndexReader;  
  11. import org.apache.lucene.index.Term;  
  12. import org.apache.lucene.index.TermDocs;  
  13. import org.apache.lucene.queryParser.ParseException;  
  14. import org.apache.lucene.queryParser.QueryParser;  
  15. import org.apache.lucene.search.IndexSearcher;  
  16. import org.apache.lucene.search.Query;  
  17. import org.apache.lucene.search.ScoreDoc;  
  18. import org.apache.lucene.search.TopScoreDocCollector;  
  19. import org.apache.lucene.store.FSDirectory;  
  20. import org.apache.lucene.util.Version;  
  21. public class Searcher {  
  22.     // 关键字,要搜查的对象  
  23.     public static String key_word = "about";  
  24.       
  25.     public static String field = "contents";  
  26.     public static void search() throws CorruptIndexException, IOException, ParseException{  
  27.         //打开索引所在地  
  28.         IndexSearcher sr = new IndexSearcher(FSDirectory.open(new File("d://test//myindex")),true);   
  29.           
  30.         //词法分析器  
  31.         Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_30);  
  32.           
  33.         //解析器  
  34.         QueryParser parser = new QueryParser(Version.LUCENE_30,field,analyzer);  
  35.           
  36.         //根据关键字查询  
  37.         Query query = parser.parse(key_word);  
  38.           
  39.         TopScoreDocCollector collector = TopScoreDocCollector.create(100false);  
  40.           
  41.         //将所搜寻出来的结果以特定的形式放在collector中  
  42.         sr.search(query, collector);  
  43.           
  44.         /** 
  45.          * topDocs():Returns the top docs that were collected by this collector.     
  46.          *            返回的是由这个collector收集的顶级文档。 
  47.          * .scoreDocs():The top hits for the query.  
  48.          *              用于查询的最高命中。 
  49.          */  
  50.         ScoreDoc[] hits = collector.topDocs().scoreDocs;  
  51.         System.out.println("搜索到符合标准的文档数目:"+hits.length);  
  52.           
  53.         //检索,根据关键字在contents这个field里边找,本节关注点。  
  54.         TermDocs temDocs = sr.getIndexReader().termDocs(new Term("contents",key_word));  
  55.         while(temDocs.next()){  
  56.             System.out.println("在文件"+sr.getIndexReader().document(temDocs.doc())+"中," +  
  57.                     "关键字出现了"+temDocs.freq()+"次。");  
  58.         }  
  59.           
  60.         System.out.println("-----------------我是无敌的分割线----------------");  
  61.           
  62.         for (int i = 0; i < hits.length; i++) {  
  63.            
  64.             Document doc = sr.doc(hits[i].doc);      //依此遍历符合标准的文档  
  65.             System.out.println(doc.getField("filename")+" ----  "+hits[i].toString()+" ---- ");  
  66.         }  
  67.         System.out.println("you have " + collector.getTotalHits() +  
  68.                   " file matched query '" + key_word + "':");  
  69.         System.out.println("Lucene's position is in:"+LucenePackage.get());  
  70.     }  
  71.       
  72.       
  73.     public static void main(String[] args) {  
  74.         try {  
  75.             search();  
  76.         } catch (CorruptIndexException e) {  
  77.             // TODO Auto-generated catch block  
  78.             e.printStackTrace();  
  79.         } catch (IOException e) {  
  80.             // TODO Auto-generated catch block  
  81.             e.printStackTrace();  
  82.         } catch (ParseException e) {  
  83.             // TODO Auto-generated catch block  
  84.             e.printStackTrace();  
  85.         }  
  86.     }  
  87. }  

 

 

要说明的是,如果将检索到的结果放在TopScoreDocCollector中 那么他里边的顺序是按照相关度得分从大到小排序的,也即是说最大的排最前。而利用TermDocs:

 

[java] view plaincopy
  1. TermDocs temDocs = sr.getIndexReader().termDocs(new Term("contents",key_word));  
  2. while(temDocs.next()){  
  3.     System.out.println("在文件"+sr.getIndexReader().document(temDocs.doc())+"中," +  
  4.             "关键字出现了"+temDocs.freq()+"次。");  
  5. }  

 

他这个“容器”里边的数据是无序的。

 

还有说明Term的初始化,有2个,一般常用的是new Term(field名称,关键字);

如果将        TermDocs temDocs = sr.getIndexReader().termDocs(new Term("contents",key_word));
错误的写成   TermDocs temDocs = sr.getIndexReader().termDocs();       

 

也就是无参初始化,则得到的结果就是每个文件他的freq都会取到值是1.

 

原链:http://blog.csdn.net/sustbeckham/article/details/5809181

分享到:
评论

相关推荐

    lucene3.0 lucene3.0

    lucene3.0 lucene3.0 lucene3.0 lucene3.0 lucene3.0

    lucene 3.0 API 中文帮助文档 chm

    lucene 3.0 API中文帮助,学习的人懂得的

    Java搜索引擎的研究与实现(含文档+源码)

    Java搜索引擎的研究与实现(含文档+源码)&lt;br&gt;目录 1&lt;br&gt;摘要 3&lt;br&gt;第一章 引言 4&lt;br&gt;第二章 搜索引擎的结构 5&lt;br&gt;2.1系统概述 5&lt;br&gt;2.2搜索引擎的构成 5&lt;br&gt;2.2.1网络机器人 5&lt;br&gt;2.2.2索引与搜索 5&lt;br&gt;2.2.3 Web...

    Lucene3.0之查询类型详解

    4. **Lucene3.0查询工具和类**: - **IndexSearcher**:是主要的检索工具,提供了所有搜索操作的接口,通常使用Directory初始化。 - **Query**:抽象类,用于表示查询需求,通过子类实现不同类型的查询。 - **...

    Lucene 3.0 原理与代码分析完整版

    《Lucene 3.0 原理与代码分析完整版》是一本深入解析Lucene 3.0搜索引擎库的专业书籍。Lucene是Apache软件基金会的开源项目,它为Java开发者提供了一个高性能、全文检索的工具包,广泛应用于各种信息检索系统。这...

    lucene3.0 分词器

    lucene3.0 中文分词器, 庖丁解牛

    lucene3.0核心jar包

    这里的"lucene3.0核心jar包"是 Lucene 的一个重要版本,发布于2009年,为当时的开发人员提供了构建全文搜索引擎的基础框架。 在 Lucene 3.0 中,以下几个关键知识点值得关注: 1. **索引结构**:Lucene 使用倒排...

    lucene使用教程

    &lt;lucene-version&gt;5.3.1&lt;/lucene-version&gt; &lt;/properties&gt; &lt;dependencies&gt; &lt;dependency&gt; &lt;groupId&gt;org.apache.lucene&lt;/groupId&gt; &lt;artifactId&gt;lucene-core&lt;/artifactId&gt; &lt;version&gt;${lucene-version}&lt;/version&gt; ...

    jive.chm

    &lt;br&gt;系统设计&lt;br&gt; 1 jive设计思路 &lt;br&gt; 2 jive的工作内幕 &lt;br&gt; 3 Jive源代码研究 &lt;br&gt; 4 Jive中的设计模式 &lt;br&gt; 5 jive学习笔记 &lt;br&gt;&lt;br&gt;&lt;br&gt; &lt;br&gt;设计模式&lt;br&gt; 1 大道至简-Java之23种模式一点就通 &lt;br&gt; 2 设计模式...

    Lucene3.0全文信息检索

    **Lucene 3.0 全文信息检索** Lucene 是一个由Apache软件基金会4 Jakarta项目组开发的开源全文检索引擎工具包。自1999年发布以来,Lucene 已经发展成为Java世界中最为广泛使用的全文检索库,为开发者提供了构建高...

    lucene3.0资料包

    这里我们主要聚焦于`lucene3.0`版本,该版本在当时是Lucene的一个重要里程碑,引入了许多改进和新特性。 1. **索引构建**: 在Lucene3.0中,索引是数据检索的基础。它通过将文本数据转换为倒排索引来实现快速查询...

    lucene3.0 实例

    在 Lucene 3.0 版本中,虽然已经相对较旧,但仍然包含了基本的搜索引擎功能,适用于简单或特定场景的搜索需求。在这个实例中,我们将探讨如何在 JDK 1.5 和 Lucene 3.0 的环境下构建和运行一个简单的搜索引擎。 ...

    lucene3.0庖丁+索引搜索程序

    《深入剖析Lucene3.0:庖丁解牛与索引搜索实践》 在IT行业中,搜索引擎技术扮演着至关重要的角色,而Lucene作为一个开源全文检索库,为开发者提供了强大的文本搜索功能。本文将深入探讨Lucene3.0版本,结合“庖丁解...

    lucene3.0-highlighter.jar

    lucene3.0-highlighter.jar lucene3.0的高亮jar包,从lucene3.0源码中导出来的

    lucene3.0使用介绍及实例

    在本文中,我们将深入探讨Lucene 3.0版本,了解其核心概念、功能特性,并通过实例来展示如何使用这个强大的工具。 ### 1. Lucene 3.0核心概念 #### 1.1 文档与字段 在Lucene中,数据是以文档(Document)的形式...

    lucene3.0全文检索入门实例

    **Lucene 3.0 全文检索入门实例** Lucene 是一个开源的全文检索库,由 Apache 软件基金会开发。它提供了一个高级、灵活的搜索功能框架,允许开发者在自己的应用中轻松地集成全文检索功能。本文将重点介绍如何使用 ...

    与lucene3.0兼容的庖丁jar包

    lucene升级了,分词也得升级哦! 在使用lucene3与paoding集成的时候可能会出现以下错误: Exception in thread "main" java.lang.AbstractMethodError: org.apache.lucene.analysis.TokenStream.incrementToken()Z ...

Global site tag (gtag.js) - Google Analytics