在这里就不解释Lucene应用中的基本概念了,直接切入主题
一、添加索引过程
public static void addDocument(String title,String content){
Document doc = new Document();
Field titleField = new Field("title",title,Store.YES, Field.Index.ANALYZED,Field.TermVector.WITH_POSITIONS_OFFSETS);
Field contentField = new Field("content",content, Field.Store.NO, Field.Index.ANALYZED,Field.TermVector.WITH_POSITIONS_OFFSETS);
Field content2Field = null;
//CompressionTools 用于将 长文本 或二进制文件压缩存储
content2Field = new Field("content",CompressionTools.compressString(content), Field.Store.YES);
doc.add(titleField);
doc.add(contentField);
doc.add(content2Field);
docmentList.add(doc);
}
public static void index(){
try {
//获取索引存放的路径
FSDirectory indexDir = FSDirectory.open(new File(FilePathUtils.getIndexPath()));
//实例化IKAnalyzer中文分词器
Analyzer analyzer = new IKAnalyzer();
IndexWriter indexWriter = new IndexWriter(indexDir, analyzer, true, IndexWriter.MaxFieldLength.UNLIMITED);
for (Document doc : docmentList) {
indexWriter.addDocument(doc);
}
indexWriter.optimize();
indexWriter.close();
docmentList = new ArrayList<Document>();
} catch (IOException e) {
e.printStackTrace();
}
}
二、检索过程
public static void search(String keyword){
try {
//获取索引存放的路径
FSDirectory indexDir = FSDirectory.open(new File(FilePathUtils.getIndexPath()));
//集成IKAnalyzer中文分词器
Analyzer analyzer = new IKAnalyzer();
// 实例化搜索器
IndexSearcher searcher = new IndexSearcher(indexDir,true);
// 在索引器中使用 IKSimilarity 相似度评估器
searcher.setSimilarity(new IKSimilarity());
// 使用 IKQueryParser 查询分析器构造 Query 对象
Query query = IKQueryParser.parse("title", keyword);//指定检索的字段
//构建高亮显示格式
SimpleHTMLFormatter sHtmlF = new SimpleHTMLFormatter("<b><font color='red'>", "</font></b>");
//高亮对象
Highlighter highlighter = new Highlighter(sHtmlF,new QueryScorer(query));
//设置高亮附近的字数
highlighter.setTextFragmenter(new SimpleFragmenter(100));
//分页索取结果,每页显示5条记录
TopScoreDocCollector collector = TopScoreDocCollector.create(5, false);
//执行检索
searcher.search(query, collector);
ScoreDoc[] hits = collector.topDocs().scoreDocs;
int numTotalHits = collector.getTotalHits();
System.out.println("共检索到"+numTotalHits+"条记录");
// 输出结果
for (int i = 0; i < hits.length; i++) {
Document targetDoc = searcher.doc(hits[i].doc);
try {
//highlighter.getBestFragment()获取高亮显示结果
System.out.println(" 标题: " + highlighter.getBestFragment(analyzer,"title",targetDoc.get("title")));
Field contentField = targetDoc.getField("content");
//CompressionTools.decompressString() 解压
System.out.println(" 内容: " + CompressionTools.decompressString(contentField.getBinaryValue()));
} catch (InvalidTokenOffsetsException e) {
e.printStackTrace();
} catch (DataFormatException e) {
e.printStackTrace();
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
分享到:
相关推荐
《Lucene2.9开发指南》是一份专为初级开发者准备的资料,旨在详细介绍如何使用开源全文搜索工具包Lucene2.9.1。Lucene作为一个强大的文本搜索库,其核心功能包括建立索引和执行搜索。以下是关于Lucene2.9开发的一些...
Lucene,作为一款开源的全文搜索引擎库,被广泛应用于各种信息检索场景。本文将详细讲解Lucene 2.9.1版本的核心概念、架构以及索引创建与搜索的流程。 一、Lucene 2.9.1环境搭建 在开始使用Lucene之前,首要任务是...
1. **性能优化**:Lucene.NET 2.9.4.2版本在2.9.4的基础上进行了性能提升,可能包括更快的索引和搜索速度,更少的内存占用,以及更好的并发处理能力。 2. **bug修复**:对已知问题的修复是每个版本迭代的重点,2.9....
《Lucene 2.9.4:开源全文检索库的深度探索》 Lucene,作为Apache软件基金会的一个顶级项目,...尽管现在有更新的版本如Lucene 8.x,但2.9.4版本的知识仍然值得我们去挖掘和掌握,因为它奠定了Lucene后续发展的基础。
一、Lucene.Net基础 Lucene.Net是一个基于Java Lucene的.NET全功能搜索库,它提供了强大的文本分析、索引和搜索功能。这个版本2.9.1是该库的一个稳定版本,适用于.NET Framework的应用开发。Lucene.Net的核心设计...
Lucene是一个开源的全文检索库,由Apache软件基金会开发,它提供了强大的文本搜索功能,被广泛应用于各种信息检索系统中。本文将围绕“lucene-2.9.2.jar”这个版本,结合源码,探讨其在中文分词和TF-IDF搜索引擎中的...
通过阅读和运行这些代码,你可以更深入地理解Lucene.NET 2.9.2的工作原理,并学习如何在实际项目中应用。 总结来说,Lucene.NET 2.9.2是一个强大的全文检索库,提供了一套完善的API来处理索引管理、查询和结果处理...
通过这些CHM文档,我们可以深入了解Lucene的演变过程,从基础的搜索功能到复杂查询的支持,再到对多语言和分布式环境的适应。对于开发者来说,这是一个宝贵的资源,有助于理解和掌握Lucene在不同阶段的关键特性,...
#### 搜索引擎基础知识及工作原理 本书开篇便从搜索引擎的基本概念入手,详细介绍了搜索引擎的工作原理和技术框架。在**第1章**“搜索引擎总体结构”中,作者从搜索引擎的基本模块出发,如网络爬虫、全文索引结构与...
2.9 小结 第3章 实现各种框架的集成 3.1 spring框架与其他框架的集成原理 3.2 实现ssh三种框架环境集成 3.3 实现spring与struts 2.x集成 3.4 实现spring、struts2.x和hibernate框架集成 3.5 小...
**2.9 Riak** Riak是一个高度可用的分布式NoSQL数据库,支持数据复制和故障恢复。它采用键值存储方式,支持多种数据类型。 **2.10 ZooKeeper** ZooKeeper是一个分布式协调服务,用于管理和维护分布式系统的元数据...
- **全文检索**:集成Lucene或Elasticsearch实现高效的信息检索。 **1.3 服务器运行环境要求** 根据不同的并发用户数量,对服务器的硬件配置有着不同的要求: - **1.3.1 并发数说明** - **并发200以下用户**:...