Lucene5(1)简单示例

来源:互联网 发布:爱站网ip反查域名 编辑:程序博客网 时间:2024/04/27 01:12

NO BIBI亮代码

private IndexWriter writer;private IndexReader reader;// lucene索引存放了路径private static final String INDEX_DIR = "E:/LuceneIndex";/** * 实例化写索引 */public IndexWriter getIndexWriter(String indexDir) throws Exception {    if (writer == null) {        Analyzer analyzer = getAnalyzer();        IndexWriterConfig writerConfig = new IndexWriterConfig(analyzer);        // Directory ramDirectory= new RAMDirectory();//索引写入内存        // 索引存储磁盘位置        Directory directory = FSDirectory.open(Paths.get(indexDir));        writer = new IndexWriter(directory, writerConfig);    }    return writer;}/** * 获取读索引实体,并打印读到的索引信息 */public IndexReader getIndexReader(String indexDir) throws IOException {    if (reader == null) {        Directory directory = FSDirectory.open(Paths.get(indexDir));        reader = DirectoryReader.open(directory);        // 通过reader可以有效的获取到文档的数量        System.out.println("当前存储的文档数:" + reader.numDocs());        System.out.println("当前存储的文档数,包含回收站的文档:" + reader.maxDoc());        System.out.println("回收站的文档数:" + reader.numDeletedDocs());    }    return reader;}/** * 关闭写索引 */public void close() throws Exception {    writer.close();    reader.close();}/** * 获取分词器 */private Analyzer getAnalyzer(){    return new StandardAnalyzer();}@Testpublic void testWriter() throws Exception {    IndexWriter writer = getIndexWriter(INDEX_DIR);    Document document = new Document();// 实例化一个文档    // 添加一个文档信息,相当于一个数据库表字段    document.add(new TextField("name", "hello world", Field.Store.YES));    document.add(new TextField("describes", "测试luence", Field.Store.YES));    writer.addDocument(document);    writer.close();}@Testpublic void testReader() throws Exception {    IndexReader reader = getIndexReader(INDEX_DIR);    IndexSearcher searcher = new IndexSearcher(reader);    // 指定Document被搜索的属性    QueryParser parser = new QueryParser("describes", getAnalyzer());    // 指定索引内容    Query query = parser.parse("试");    // 搜索前十个    TopDocs hits = searcher.search(query, 10);    for (ScoreDoc sd : hits.scoreDocs) {        Document doc = searcher.doc(sd.doc);        System.out.println(doc.get("name") + "[describes]=" + doc.get("describes"));    }    reader.close();}