`

lucene入门代码三(near-real-time)

阅读更多
一个简单的接近实时搜索的例子源自(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();
		
	}
}

分享到:
评论

相关推荐

    lucene 入门资料包

    5. **近实时搜索**: Lucene的NRT(Near Real Time)特性允许在短时间内看到索引的最新更改。 6. **分布式搜索**: 通过Solr或Elasticsearch,可以搭建分布式Lucene集群,处理大量数据和高并发请求。 ### 五、学习...

    lucene入门指南

    7. **近实时搜索(Near Real-time Search)**: 新增或更新文档后,经过短暂延迟即可被搜索到。 **四、扩展与整合** Lucene 可以与其他开源项目结合,如 Solr 提供了 Web 接口和集群支持,Elasticsearch 建立在 ...

    lucene3.0全文检索入门实例

    此外,还引入了近实时搜索(NRT,Near Real-Time)特性,使得索引更新后的结果几乎可以立即反映在搜索中。 **7. 相较于 Lucene 2.0 的变化** - API 变化:一些类名和方法名进行了调整,以提供更清晰的语义。 - 增强...

    Lucene索引搜索简介以及入门实例源码.rar

    2. **近实时搜索(Near Real Time Search)**:新添加的文档几乎立即可以被搜索到。 3. **多字段搜索**:可以基于多个字段进行复合查询。 4. **高亮显示**:突出显示搜索结果中的关键词。 5. **相似性...

    Lucene Demo

    4. **高级特性**:除了基本的搜索功能,Demo 可能还会演示一些进阶特性,如分面搜索(faceted search)、近实时搜索(near real-time search)或者自定义排序和评分函数。 **学习资源** 为了更好地理解 Lucene,你...

    Lucene.zip

    4. **近实时搜索**:通过NRT(Near Real Time)模式,即使在持续索引时也能快速返回最新结果。 5. **分面搜索**:利用Facet API进行分类统计,支持导航式筛选。 6. **倒排索引优化**:通过设置不同的存储策略、压缩...

    基于lucene3.0 书籍查询系统

    2. **实时性**:如果书籍数据实时更新,可以采用近实时搜索(Near Real-Time Search)机制。 3. **多字段搜索**:支持对多个字段同时进行搜索,比如同时搜索书名和作者。 4. **模糊搜索**:允许用户进行部分匹配或...

    es快速入门笔记,自我整理,共75节

    * NRT(Near Real-Time):指Elasticsearch的近实时处理能力。 * 索引(Index):Elasticsearch中的数据存储单元。 * 分片(Shard):索引的水平分区,用于分布式存储和查询。 * 副本(Replica):分片的副本,用于...

Global site tag (gtag.js) - Google Analytics