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

搜索引擎

开发平台:

Java

  1. package chapter6;
  2. import java.io.IOException;
  3. import org.apache.lucene.index.Term;
  4. import org.apache.lucene.document.Field;
  5. import org.apache.lucene.document.Document;
  6. import org.apache.lucene.index.IndexWriter;
  7. import org.apache.lucene.analysis.Analyzer;
  8. import org.apache.lucene.analysis.SimpleAnalyzer;
  9. import org.apache.lucene.search.Query;
  10. import org.apache.lucene.search.Hits;
  11. import org.apache.lucene.search.TermQuery;
  12. import org.apache.lucene.search.IndexSearcher;
  13. import org.apache.lucene.store.Directory;
  14. import org.apache.lucene.store.FSDirectory;
  15. import org.apache.lucene.store.RAMDirectory;
  16. public class LuceneRAMSearchText {
  17. private static String Dest_Index_Path = "D:\workshop\TextIndex";
  18. static protected String[] keywords = {"001","002","003"};
  19. static protected String[] textdetail = {"记录 一","记录 二", "记录 三"} ;
  20. /*================================================================
  21.  * 名 称:QueryRAMIndex
  22.  * 功 能:构造检索查询器,对指定的目录进行查询,找到指定的值,并输出相应结果。
  23.  ===============================================================*/
  24. public static void QueryRAMIndex(){
  25. try {
  26. Directory fsDir = FSDirectory.getDirectory(Dest_Index_Path, false); 
  27. Directory ramDir = new RAMDirectory(fsDir); 
  28. IndexSearcher searcher = new IndexSearcher(ramDir);
  29. Term term = new Term("id","002");
  30. //Term term = new Term("content","记录");
  31. Query query = new TermQuery(term);
  32. System.out.println(query.toString());
  33. Hits hits = searcher.search(query);
  34. System.out.println("Search result:");
  35. for(int i=0; i < hits.length(); i++)
  36. {
  37. System.out.println(hits.doc(i));
  38. System.out.println(hits.doc(i).getField("id"));
  39. }
  40. }catch (IOException e) {
  41. e.printStackTrace();
  42. }
  43. System.out.println("Search success");
  44. }
  45. /*================================================================
  46.  * 名 称:IndexBuilder
  47.  * 功 能:构造磁盘索引,添加内容到指定目录,为后续检索查询做好准备。
  48.  ===============================================================*/
  49. public static void IndexBuilder(){
  50. try {
  51. Analyzer TextAnalyzer = new SimpleAnalyzer();
  52. IndexWriter TextIndex = new IndexWriter(Dest_Index_Path,TextAnalyzer,true);
  53.         TextIndex.setUseCompoundFile(true);
  54. for(int i = 0; i < 3 ; i++){
  55. Document document = new Document();
  56. Field field_id = new Field("id", keywords[i], 
  57. Field.Store.YES,Field.Index.UN_TOKENIZED);
  58. document.add(field_id);
  59. Field field_content = new Field("content", textdetail[i], 
  60. Field.Store.YES,Field.Index.TOKENIZED);
  61. document.add(field_content);
  62. TextIndex.addDocument(document);
  63. }
  64. TextIndex.optimize();
  65. TextIndex.close();
  66. }catch (IOException e) {
  67. e.printStackTrace();
  68. }
  69. System.out.println("Index success");
  70. }
  71. /*================================================================
  72.  * 名 称:main
  73.  * 功 能:测试Lucene索引建立和内存检索查询功能。
  74.  ===============================================================*/
  75. public static void main(String[] args) {
  76. IndexBuilder();
  77. QueryRAMIndex();
  78. System.out.println("Test success");
  79. }
  80. }