zoukankan      html  css  js  c++  java
  • 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.

  • 相关阅读:
    page指令
    CMD设IP
    JDBC的几种驱动
    Python的闭包使用
    1189. 扫雷游戏
    1287. 递增的三元子序列
    Pip安装使用国内源的两种方法
    Python Classmethod和Staticmethod函数
    Git提交远程仓库
    Git分支管理
  • 原文地址:https://www.cnblogs.com/zwb7926/p/3115591.html
Copyright © 2011-2022 走看看