`

<转>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

    Lucene3.0 使 用 教 程

    Lucene3.0 使 用 教 程 Lucene3.0 使 用 教 程 Lucene3.0 使 用 教 程 Lucene3.0 使 用 教 程 Lucene3.0 使 用 教 程 Lucene3.0 使 用 教 程 Lucene3.0 使 用 教 程 Lucene3.0 使 用 教 程 Lucene3.0 使 用 教 程 ...

    lucene 3.0 API 中文帮助文档 chm

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

    Lucene3.0特性,Lucene3.0特性

    Lucene3.0特性Lucene3.0特性

    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之查询类型详解

    Lucene3.0之查询处理(1):原理和查询类型 各种Query对象详解

    lucene3.0 分词器

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

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

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

    dom4j

    &lt;br&gt;&lt;br&gt;/**&lt;br&gt;&lt;br&gt;* @author Holen Chen&lt;br&gt;&lt;br&gt;*/&lt;br&gt;&lt;br&gt;public class Dom4jDemo {&lt;br&gt; public Dom4jDemo() {&lt;br&gt; }&lt;br&gt;&lt;br&gt; /**&lt;br&gt;&lt;br&gt; * 建立一个XML文档,文档名由输入属性决定&lt;br&gt;&lt;br&gt; * @param filename 需...

    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 实例

    lucene3.0 实例,在jdk1.5,lucene3.0下调式通过,可以直接运行。先运行生成索引文件的class,在运行搜索的class。

    lucene3.0核心jar包

    lucene3.0的核心jar包文件,lucene3.0的核心jar包文件,lucene3.0的核心jar包文件,lucene3.0的核心jar包文件。

    传智播客Lucene3.0课程

    传智播客Lucene3.0课程,Lucene3.0的入门教程.

    lucene3.0-highlighter.jar

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

    与lucene3.0兼容的庖丁jar包

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

    Lucene 3.0 原理

    Lucene 3.0 原理 Lucene 3.0 原理 Lucene 3.0 原理 Lucene 3.0 原理

    lucene 2.0 api以及lucene 3.0 api

    全面好用的lucene 2.0 api以及lucene 3.0 api帮助文档

    Lucene3.0浅析

    Lucene3.0浅析Lucene3.0浅析Lucene3.0浅析Lucene3.0浅析

    基于lucene3.0 书籍查询系统

    基于lucene3.0 书籍查询系统 基于lucene3.0 书籍查询系统

    Lucene3.0分词系统.doc

    Lucene3.0分词系统.doc

Global site tag (gtag.js) - Google Analytics