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

搜索引擎

开发平台:

Java

  1. package chapter8;
  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.analysis.WhitespaceAnalyzer;
  10. import org.apache.lucene.analysis.standard.*;
  11. import org.apache.lucene.queryParser.ParseException;
  12. import org.apache.lucene.queryParser.QueryParser;
  13. import org.apache.lucene.search.Query;
  14. import org.apache.lucene.search.Hits;
  15. import org.apache.lucene.search.TermQuery;
  16. import org.apache.lucene.search.IndexSearcher;
  17. public class LuceneSearchAnalyzer {
  18. private static String Dest_Index_Path = "D:\workshop\TextIndex";
  19. static protected String[] keywords = {"001","002","003"};
  20. static protected String[] textdetail = {"记录 一","记录 二", "记录 三"} ;
  21. /*================================================================
  22.  * 名 称:QueryIndex
  23.  * 功 能:构造检索查询器,对指定的目录进行查询,找到指定的值,并输出相应结果。
  24.  ===============================================================*/
  25. public static void QueryIndex(){
  26. try {
  27. IndexSearcher searcher = new IndexSearcher(Dest_Index_Path);
  28. Term term = new Term("id","002");
  29. //Term term = new Term("content","记录");
  30. Query query = new TermQuery(term);
  31. System.out.println(query.toString());
  32. Hits hits = searcher.search(query);
  33. System.out.println("Search result:");
  34. for(int i=0; i < hits.length(); i++)
  35. {
  36. System.out.println(hits.doc(i));
  37. System.out.println(hits.doc(i).getField("id"));
  38. }
  39. }catch (IOException e) {
  40. e.printStackTrace();
  41. }
  42. System.out.println("Search success");
  43. }
  44. /*================================================================
  45.  * 名 称:IndexBuilder
  46.  * 功 能:构造磁盘索引,添加内容到指定目录,为后续检索查询做好准备。
  47.  ===============================================================*/
  48. public static void IndexBuilder(){
  49. try {
  50. Analyzer TextAnalyzer = new SimpleAnalyzer();
  51. IndexWriter TextIndex = new IndexWriter(Dest_Index_Path,TextAnalyzer,true);
  52.         TextIndex.setUseCompoundFile(true);
  53. for(int i = 0; i < 3 ; i++){
  54. Document document = new Document();
  55. Field field_id = new Field("id", keywords[i], 
  56. Field.Store.YES,Field.Index.UN_TOKENIZED);
  57. document.add(field_id);
  58. Field field_content = new Field("content", textdetail[i], 
  59. Field.Store.YES,Field.Index.TOKENIZED);
  60. document.add(field_content);
  61. TextIndex.addDocument(document);
  62. }
  63. TextIndex.optimize();
  64. TextIndex.close();
  65. }catch (IOException e) {
  66. e.printStackTrace();
  67. }
  68. System.out.println("Index success");
  69. }
  70. /*================================================================
  71.  * 名 称:IndexMultiAnalyzerBuilder
  72.  * 功 能:构造磁盘索引,添加内容到指定目录,为后续检索查询做好准备。
  73.  ===============================================================*/
  74. public static void IndexMultiAnalyzerBuilder(){
  75. try {
  76. Analyzer TextAnalyzer = new WhitespaceAnalyzer();
  77. Analyzer DocumentAnalyzer = new StandardAnalyzer();
  78. IndexWriter TextIndex = new IndexWriter(Dest_Index_Path,TextAnalyzer,true);
  79.         TextIndex.setUseCompoundFile(true);
  80. for(int i = 0; i < 3 ; i++){
  81. Document document = new Document();
  82. Field field_id = new Field("id", keywords[i], 
  83. Field.Store.YES,Field.Index.UN_TOKENIZED);
  84. document.add(field_id);
  85. Field field_content = new Field("content", textdetail[i], 
  86. Field.Store.YES,Field.Index.TOKENIZED);
  87. document.add(field_content);
  88. if( 1 == i )
  89. {
  90. TextIndex.addDocument(document);
  91. } else {
  92. TextIndex.addDocument(document,DocumentAnalyzer);
  93. }
  94. }
  95. TextIndex.optimize();
  96. TextIndex.close();
  97. }catch (IOException e) {
  98. e.printStackTrace();
  99. }
  100. System.out.println("Index success");
  101. }
  102. /*================================================================
  103.  * 名 称:QueryAnalyzerTest
  104.  * 功 能:构造检索查询器,使用指定的分析器对检索词进行分析,找到相应结果输出。
  105.  ===============================================================*/
  106. public static void QueryAnalyzerTest(){
  107. try {
  108. Analyzer analyzer1 = new WhitespaceAnalyzer();
  109. Analyzer analyzer2 = new StandardAnalyzer();
  110. IndexSearcher searcher = new IndexSearcher(Dest_Index_Path);
  111.     String searchWords = "记录";
  112.     QueryParser parser1 = new QueryParser("content",analyzer1); 
  113.     QueryParser parser2 = new QueryParser("content",analyzer2); 
  114.     
  115.     try{
  116.     Query query = parser1.parse(searchWords);
  117. System.out.println(query.toString());
  118. System.out.println(query.getClass());
  119. Hits hits = searcher.search(query);
  120. System.out.println("Search result:");
  121. for(int i=0; i < hits.length(); i++)
  122. {
  123. //System.out.println(hits.doc(i));
  124. System.out.println(hits.doc(i).getField("id"));
  125. System.out.println(hits.doc(i).getField("content"));
  126. }
  127.     Query query2 = parser2.parse(searchWords);
  128. System.out.println(query2.toString());
  129. System.out.println(query2.getClass());
  130. Hits hits2 = searcher.search(query2);
  131. System.out.println("Search result:");
  132. for(int i=0; i < hits2.length(); i++)
  133. {
  134. //System.out.println(hits2.doc(i));
  135. System.out.println(hits2.doc(i).getField("id"));
  136. System.out.println(hits2.doc(i).getField("content"));
  137. }
  138.     
  139.     } catch(ParseException e1){
  140. e1.printStackTrace();
  141.     }
  142. }catch (IOException e) {
  143. e.printStackTrace();
  144. }
  145. System.out.println("Search success");
  146. }
  147. /*================================================================
  148.  * 名 称:main
  149.  * 功 能:测试Lucene索引建立和检索查询功能。
  150.  ===============================================================*/
  151. public static void main(String[] args) {
  152. //IndexBuilder();
  153. //QueryIndex();
  154. IndexMultiAnalyzerBuilder();
  155. QueryAnalyzerTest();
  156. System.out.println("Test success");
  157. }
  158. }