Lucene 6.1 Demo

来源:互联网 发布:维戈 莫特森 知乎 编辑:程序博客网 时间:2024/06/18 13:12

转载出处:http://blog.csdn.net/ayi_5788/article/details/52126481

根据Lucene 6.1.0 及JDK 1.8最新版本,结合前几篇文章所写的最新Demo. 
代码如下:

package HighLightSearch;import java.io.File;import java.io.FileReader;import java.nio.file.FileSystems;import org.apache.lucene.analysis.Analyzer;import org.apache.lucene.analysis.standard.StandardAnalyzer;import org.apache.lucene.document.Document;import org.apache.lucene.document.Field;import org.apache.lucene.document.TextField;import org.apache.lucene.index.DirectoryReader;import org.apache.lucene.index.IndexWriter;import org.apache.lucene.index.IndexWriterConfig;import org.apache.lucene.queryparser.classic.QueryParser;import org.apache.lucene.search.IndexSearcher;import org.apache.lucene.search.Query;import org.apache.lucene.search.ScoreDoc;import org.apache.lucene.search.TopDocs;import org.apache.lucene.store.Directory;import org.apache.lucene.store.FSDirectory;class Index {    // 建立索引    public void index() {        IndexWriter indexWriter = null;        try {            // 1、创建Directory            //JDK 1.7以后 open只能接收Path            Directory directory = FSDirectory.open(FileSystems.getDefault().getPath("C:/Users/jiangl10/Desktop/Java-Workspace/LuceneDemo/data/index"));            // 2、创建IndexWriter            Analyzer analyzer = new StandardAnalyzer();            IndexWriterConfig indexWriterConfig = new IndexWriterConfig(analyzer);            indexWriter = new IndexWriter(directory, indexWriterConfig);            indexWriter.deleteAll();//清除以前的index            //要搜索的File路径            File dFile = new File("C:/Users/jiangl10/Desktop/Java-Workspace/LuceneDemo/data/data");            File[] files = dFile.listFiles();            for (File file : files) {                // 3、创建Document对象                Document document = new Document();                // 4、为Document添加Field                // 第三个参数是FieldType 但是定义在TextField中作为静态变量,看API也不好知道怎么写                document.add(new Field("content", new FileReader(file), TextField.TYPE_NOT_STORED));                document.add(new Field("filename", file.getName(), TextField.TYPE_STORED));                document.add(new Field("filepath", file.getAbsolutePath(), TextField.TYPE_STORED));                // 5、通过IndexWriter添加文档到索引中                indexWriter.addDocument(document);            }        } catch (Exception e) {            e.printStackTrace();        } finally {            try {                if (indexWriter != null) {                    indexWriter.close();                }            } catch (Exception e) {                e.printStackTrace();            }        }    }}/* *  创建Directory    创建IndexReader        根据IndexReader创建IndexSearch            创建搜索的Query     根据searcher搜索并且返回TopDocs      根据TopDocs获取ScoreDoc对象            根据searcher和ScoreDoc对象获取具体的Document对象              根据Document对象获取需要的值 *  */class Search {      /**      * 搜索      */      public void search(String keyWord) {          DirectoryReader directoryReader = null;          try {              // 1、创建Directory              Directory directory = FSDirectory.open(FileSystems.getDefault().getPath("C:/Users/jiangl10/Desktop/Java-Workspace/LuceneDemo/data/index"));            // 2、创建IndexReader              directoryReader = DirectoryReader.open(directory);              // 3、根据IndexReader创建IndexSearch              IndexSearcher indexSearcher = new IndexSearcher(directoryReader);              // 4、创建搜索的Query              Analyzer analyzer = new StandardAnalyzer();              // 创建parser来确定要搜索文件的内容,第一个参数为搜索的域              QueryParser queryParser = new QueryParser("content", analyzer);              // 创建Query表示搜索域为content包含UIMA的文档              Query query = queryParser.parse(keyWord);              // 5、根据searcher搜索并且返回TopDocs              TopDocs topDocs = indexSearcher.search(query, 10);              System.out.println("查找到的文档总共有:"+topDocs.totalHits);            // 6、根据TopDocs获取ScoreDoc对象              ScoreDoc[] scoreDocs = topDocs.scoreDocs;              for (ScoreDoc scoreDoc : scoreDocs) {                  // 7、根据searcher和ScoreDoc对象获取具体的Document对象                  Document document = indexSearcher.doc(scoreDoc.doc);                  // 8、根据Document对象获取需要的值                  System.out.println(document.get("filename") + " " + document.get("filepath"));              }          } catch (Exception e) {              e.printStackTrace();          } finally {              try {                  if (directoryReader != null) {                      directoryReader.close();                  }              } catch (Exception e) {                  e.printStackTrace();              }          }      }  }  public class HighLightSearch {    public static void main(String args[]) {        Index newIndex = new Index();        newIndex.index();        Search newSearch = new Search();        newSearch.search("UIMA");    }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 136
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 136

运行结果及所用JRE如下所图: 
这里写图片描述