【Lucene】近实时搜索
2013-09-03 18:45
423 查看
近实时搜索:可以使用一个打开的IndexWriter快速搜索索引的变更内容,而不必首先关闭writer,或者向该writer提交;这是2.9版本之后推出的新功能。
代码示例(本例参考《Lucene In Action》):
测试代码:
测试结果(建议使用Luke查看索引结果):
【推荐博客:http://qindongliang1922.iteye.com/category/282568】
代码示例(本例参考《Lucene In Action》):
package com.tan.code; import java.io.File; import java.io.IOException; import org.apache.lucene.analysis.Analyzer; import org.apache.lucene.document.Document; import org.apache.lucene.document.Field.Store; import org.apache.lucene.document.StringField; import org.apache.lucene.document.TextField; import org.apache.lucene.index.DirectoryReader; import org.apache.lucene.index.IndexReader; import org.apache.lucene.index.IndexWriter; import org.apache.lucene.index.IndexWriterConfig; import org.apache.lucene.index.Term; import org.apache.lucene.search.IndexSearcher; import org.apache.lucene.search.Query; import org.apache.lucene.search.TermQuery; import org.apache.lucene.search.TopDocs; import org.apache.lucene.store.Directory; import org.apache.lucene.store.SimpleFSDirectory; import org.apache.lucene.util.Version; import org.wltea.analyzer.lucene.IKAnalyzer; public class NearRealTimeTest { public static final String INDEX_DIR_PATH = "E:\\indexDir"; private Analyzer analyzer = null; private File indexFile = null; private Directory directory = null; private IndexReader indexReader = null; private IndexSearcher indexSearcher = null; private IndexWriter indexWriter = null; public void nearRealTime() throws IOException { analyzer = new IKAnalyzer(true); indexFile = new File(INDEX_DIR_PATH); directory = new SimpleFSDirectory(indexFile); indexWriter = new IndexWriter(directory, new IndexWriterConfig( Version.LUCENE_43, analyzer)); for (int i = 0; i < 10; i++) { Document document = new Document(); document.add(new StringField("id", "id" + i, Store.YES)); document.add(new TextField("name", "my name is tank" + i, Store.YES)); document.add(new TextField("content", "content" + i, Store.YES)); indexWriter.addDocument(document); } // indexReader = DirectoryReader.open(directory); // 3.x 旧版本中使用indexWriter.getReader()创建近实时reader,本示例代码使用的是4.3.1版本 indexReader = DirectoryReader.open(indexWriter, true); indexSearcher = new IndexSearcher(indexReader); Query query = new TermQuery(new Term("name", "name")); TopDocs topDocs = indexSearcher.search(query, 100); System.out.println("命中数:" + topDocs.totalHits); /* * 建立索引变更,但是不提交 */ Query q = new TermQuery(new Term("id", "id1")); indexWriter.deleteDocuments(q);// 根据id删除一个文档 // 再添加10个 for (int i = 10; i < 20; i++) { Document document = new Document(); document.add(new StringField("id", "id" + i, Store.YES)); document.add(new TextField("name", "my name is tank" + i, Store.YES)); document.add(new TextField("content", "content" + i, Store.YES)); indexWriter.addDocument(document); } // // reader.reopen(); // 读入新增加的增量索引内容,满足实时索引需求 // IndexReader newReader = DirectoryReader.openIfChanged( (DirectoryReader) indexReader, indexWriter, true); indexReader.close(); Query query2 = new TermQuery(new Term("name", "name")); indexSearcher = new IndexSearcher(newReader); TopDocs topDocs2 = indexSearcher.search(query2, 100); System.out.println("命中数:" + topDocs2.totalHits); newReader.close(); indexWriter.close(); } }
测试代码:
package com.tan.test; import static org.junit.Assert.*; import java.io.IOException; import org.junit.Test; import com.tan.code.NearRealTimeTest; public class MyTest { @Test public void test() throws IOException { //fail("Not yet implemented"); NearRealTimeTest nearRealTimeTest=new NearRealTimeTest(); nearRealTimeTest.nearRealTime(); } }
测试结果(建议使用Luke查看索引结果):
【推荐博客:http://qindongliang1922.iteye.com/category/282568】
相关文章推荐
- 【Lucene3.6.2入门系列】第12节_近实时搜索
- java lucene实现近实时搜索及高亮显示的代码例子下载
- lucene学习之近实时搜索
- lucene(补充QueryParser,Filter,高亮显示,近实时搜索)
- lucene学习笔记(八)lucene实时搜索
- 20、学习Lucene3.5索引之近实时搜索
- 【转】一种基于Lucene的实时搜索方案 - From 淘宝技术部
- lucene3.5通过NRTManager和SearchManager实现近实时搜索
- 我对Lucene3.5实时搜索的一点儿整理
- lucene 近实时搜索实例
- lucene4之后的近实时搜索实现
- 【Lucene3.6.2入门系列】第12节_近实时搜索
- Lucene系列-近实时搜索(1)
- Lucene近实时搜索
- 21、学习Lucene3.5索引之近实时搜索常用工具类
- Lucene系列-近实时搜索(1)
- Lucene.net 实现近实时搜索(NRT)和增量索引
- lucene 4.x 近实时搜索
- Lucene中的近实时搜索SearcherManager
- Lucene4.10使用教程(十一):Lucene的近实时搜索