LuceneIndexNumber.java
上传用户:cctqzzy
上传日期:2022-03-14
资源大小:12198k
文件大小:4k
源码类别:

搜索引擎

开发平台:

Java

  1. package chapter5;
  2. import java.util.Date;
  3. import java.io.*;
  4. import org.apache.lucene.search.Hits;
  5. import org.apache.lucene.search.IndexSearcher;
  6. import org.apache.lucene.search.Query;
  7. import org.apache.lucene.search.RangeQuery;
  8. import org.apache.lucene.search.TermQuery;
  9. import org.apache.lucene.store.Directory; 
  10. import org.apache.lucene.store.FSDirectory;
  11. import org.apache.lucene.document.Field;
  12. import org.apache.lucene.document.Document;
  13. import org.apache.lucene.index.IndexWriter;
  14. import org.apache.lucene.index.IndexReader;
  15. import org.apache.lucene.index.Term;
  16. import org.apache.lucene.analysis.Analyzer;
  17. import org.apache.lucene.analysis.standard.StandardAnalyzer;
  18. import org.apache.lucene.analysis.SimpleAnalyzer;
  19. import java.text.DecimalFormat; 
  20. public class LuceneIndexNumber {
  21. private static String Dest_Index_Path = "D:\workshop\TextIndex";
  22. static protected Integer[] keywords = {120,2,30};
  23. static protected String[] textdetail = {"数字一","数字二", "数字三"} ;
  24. /*================================================================
  25.  * 名 称:QueryNumberIndex
  26.  * 功 能:构造检索查询器,对指定的索引进行查询,找到指定区间值,并输出相应结果。
  27.  ===============================================================*/
  28. public static void QueryNumberIndex(){
  29. try {
  30. IndexSearcher searcher = new IndexSearcher(Dest_Index_Path);  // 生成检索器
  31. Term termstart = new Term("id","0006");
  32. Term termend   = new Term("id","0105");
  33. RangeQuery query = new RangeQuery(termstart,termend,false);   // 生成区间检索对象
  34. System.out.println(query.toString());
  35. Hits hits = searcher.search(query);                           // 提交检索
  36. System.out.println("Search result:");
  37. for(int i=0; i < hits.length(); i++)                          // 输出结果
  38. {
  39. System.out.println(hits.doc(i).getField("id").stringValue());
  40. }
  41. }catch (IOException e) {
  42. e.printStackTrace();
  43. }
  44. System.out.println("Search finaish");
  45. }
  46. /*================================================================
  47.  * 名 称:IndexNumberBuilder
  48.  * 功 能:构造数字类型信息的磁盘索引,添加内容到指定目录,为后续检索查询做好准备。
  49.  ===============================================================*/
  50. public static void IndexNumberBuilder(){
  51. try {
  52. Analyzer TextAnalyzer = new SimpleAnalyzer();                 // 生成分析器
  53. IndexWriter TextIndex = new IndexWriter(Dest_Index_Path,TextAnalyzer,true); // 索引器对象
  54.         TextIndex.setUseCompoundFile(true);                           // 使用符合索引
  55. for(int i = 0; i < 3 ; i++){
  56. Document document = new Document();                       // 空文档
  57.     DecimalFormat df = new DecimalFormat("0000");             // 数字化格式
  58.     String idkey = df.format(keywords[i]);                    // 数字关键字转换成定长字符串
  59. Field field_id = new Field("id", idkey,                   // 添加关键字域
  60. Field.Store.YES,Field.Index.UN_TOKENIZED);
  61. System.out.println( idkey );
  62. document.add(field_id);
  63. Field field_content = new Field("content", textdetail[i], // 添加内容域
  64. Field.Store.YES,Field.Index.TOKENIZED);
  65. document.add(field_content);
  66. TextIndex.addDocument(document);
  67. }
  68. TextIndex.optimize();
  69. TextIndex.close();
  70. }catch (IOException e) {
  71. e.printStackTrace();
  72. }
  73. System.out.println("Index success");
  74. }
  75. /*================================================================
  76.  * 名 称:main
  77.  * 功 能:测试Lucene对数字类型内容的索引建立和检索查询功能。
  78.  ===============================================================*/
  79. public static void main(String[] args) {
  80. IndexNumberBuilder();         // 创建索引
  81. QueryNumberIndex();           // 检索内容
  82. }
  83. }