一个简单的接近实时搜索的例子源自(Lucene in aiction)
package com.yale.lucene;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.IndexWriter;
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.RAMDirectory;
import org.apache.lucene.util.Version;
/**
*
* 接近实时搜索
*
*/
public class NearRealTimeTest
{
public static void main(String[] args) throws Exception
{
// Create RAMDirectory
Directory dir = new RAMDirectory();
IndexWriter writer = new IndexWriter(dir, new StandardAnalyzer(
Version.LUCENE_30), IndexWriter.MaxFieldLength.UNLIMITED);
for(int i =0;i<10;i++){
Document doc = new Document();
doc.add(new Field("id",""+i,Field.Store.NO,Field.Index.NOT_ANALYZED_NO_NORMS));
doc.add(new Field("text","aaa",Field.Store.NO,Field.Index.ANALYZED));
writer.addDocument(doc);
}
//Create near-real-time reader
IndexReader reader = writer.getReader();
//Warp reader in IndexSearcher
IndexSearcher searcher = new IndexSearcher(reader);
Query query = new TermQuery(new Term("text","aaa"));
TopDocs docs = searcher.search(query,1);
//Search returns 10 hits
System.out.println("匹配结果:"+docs.totalHits+"次");
//delete 1 document
writer.deleteDocuments(new Term("id","7"));
//add 1 document
Document doc = new Document();
doc.add(new Field("id","11",Field.Store.NO,Field.Index.NOT_ANALYZED_NO_NORMS));
doc.add(new Field("text","bbb",Field.Store.NO,Field.Index.ANALYZED));
writer.addDocument(doc);
//Reopen reader
IndexReader newReader = reader.reopen();
//Confirm reader is new
System.out.println(reader==newReader);
reader.close();
searcher = new IndexSearcher(newReader);
TopDocs hits = searcher.search(query,10);
//Search returns 9 hits
System.out.println("匹配结果:"+hits.totalHits+"次");
query = new TermQuery(new Term("text", "bbb"));
hits = searcher.search(query, 1);
//Search returns 1 hits
System.out.println("匹配结果:"+hits.totalHits+"次");
newReader.close();
writer.close();
}
}
分享到:
相关推荐
5. **近实时搜索**: Lucene的NRT(Near Real Time)特性允许在短时间内看到索引的最新更改。 6. **分布式搜索**: 通过Solr或Elasticsearch,可以搭建分布式Lucene集群,处理大量数据和高并发请求。 ### 五、学习...
7. **近实时搜索(Near Real-time Search)**: 新增或更新文档后,经过短暂延迟即可被搜索到。 **四、扩展与整合** Lucene 可以与其他开源项目结合,如 Solr 提供了 Web 接口和集群支持,Elasticsearch 建立在 ...
此外,还引入了近实时搜索(NRT,Near Real-Time)特性,使得索引更新后的结果几乎可以立即反映在搜索中。 **7. 相较于 Lucene 2.0 的变化** - API 变化:一些类名和方法名进行了调整,以提供更清晰的语义。 - 增强...
2. **近实时搜索(Near Real Time Search)**:新添加的文档几乎立即可以被搜索到。 3. **多字段搜索**:可以基于多个字段进行复合查询。 4. **高亮显示**:突出显示搜索结果中的关键词。 5. **相似性...
4. **高级特性**:除了基本的搜索功能,Demo 可能还会演示一些进阶特性,如分面搜索(faceted search)、近实时搜索(near real-time search)或者自定义排序和评分函数。 **学习资源** 为了更好地理解 Lucene,你...
4. **近实时搜索**:通过NRT(Near Real Time)模式,即使在持续索引时也能快速返回最新结果。 5. **分面搜索**:利用Facet API进行分类统计,支持导航式筛选。 6. **倒排索引优化**:通过设置不同的存储策略、压缩...
2. **实时性**:如果书籍数据实时更新,可以采用近实时搜索(Near Real-Time Search)机制。 3. **多字段搜索**:支持对多个字段同时进行搜索,比如同时搜索书名和作者。 4. **模糊搜索**:允许用户进行部分匹配或...
* NRT(Near Real-Time):指Elasticsearch的近实时处理能力。 * 索引(Index):Elasticsearch中的数据存储单元。 * 分片(Shard):索引的水平分区,用于分布式存储和查询。 * 副本(Replica):分片的副本,用于...