`

Lucene 2.9 基础应用

阅读更多

在这里就不解释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();
		}
	}
 
1
0
分享到:
评论

相关推荐

    lucene2.9开发指南

    《Lucene2.9开发指南》是一份专为初级开发者准备的资料,旨在详细介绍如何使用开源全文搜索工具包Lucene2.9.1。Lucene作为一个强大的文本搜索库,其核心功能包括建立索引和执行搜索。以下是关于Lucene2.9开发的一些...

    本人的Lucene2.9学习笔记

    Lucene,作为一款开源的全文搜索引擎库,被广泛应用于各种信息检索场景。本文将详细讲解Lucene 2.9.1版本的核心概念、架构以及索引创建与搜索的流程。 一、Lucene 2.9.1环境搭建 在开始使用Lucene之前,首要任务是...

    lucene.net2.9.4.2源码版

    1. **性能优化**:Lucene.NET 2.9.4.2版本在2.9.4的基础上进行了性能提升,可能包括更快的索引和搜索速度,更少的内存占用,以及更好的并发处理能力。 2. **bug修复**:对已知问题的修复是每个版本迭代的重点,2.9....

    lucene2.9.4

    《Lucene 2.9.4:开源全文检索库的深度探索》 Lucene,作为Apache软件基金会的一个顶级项目,...尽管现在有更新的版本如Lucene 8.x,但2.9.4版本的知识仍然值得我们去挖掘和掌握,因为它奠定了Lucene后续发展的基础。

    Lucene.Net_2_9_1.zip

    一、Lucene.Net基础 Lucene.Net是一个基于Java Lucene的.NET全功能搜索库,它提供了强大的文本分析、索引和搜索功能。这个版本2.9.1是该库的一个稳定版本,适用于.NET Framework的应用开发。Lucene.Net的核心设计...

    lucene-2.9.2.jar包+源码

    Lucene是一个开源的全文检索库,由Apache软件基金会开发,它提供了强大的文本搜索功能,被广泛应用于各种信息检索系统中。本文将围绕“lucene-2.9.2.jar”这个版本,结合源码,探讨其在中文分词和TF-IDF搜索引擎中的...

    lucene.net 2.9.2 实现索引生成,修改,查询,删除实例

    通过阅读和运行这些代码,你可以更深入地理解Lucene.NET 2.9.2的工作原理,并学习如何在实际项目中应用。 总结来说,Lucene.NET 2.9.2是一个强大的全文检索库,提供了一套完善的API来处理索引管理、查询和结果处理...

    lucenechm集合1.4 1.9 2.1 2.9 3.6 4.2

    通过这些CHM文档,我们可以深入了解Lucene的演变过程,从基础的搜索功能到复杂查询的支持,再到对多语言和分布式环境的适应。对于开发者来说,这是一个宝贵的资源,有助于理解和掌握Lucene在不同阶段的关键特性,...

    解密搜索引擎技术实战:Lucene&Java精华版

    #### 搜索引擎基础知识及工作原理 本书开篇便从搜索引擎的基本概念入手,详细介绍了搜索引擎的工作原理和技术框架。在**第1章**“搜索引擎总体结构”中,作者从搜索引擎的基本模块出发,如网络爬虫、全文索引结构与...

    利用开源工具搭建小型搜索引擎

    - **5.3.2.9 为查询优化索引**: 讨论如何通过优化索引来提高查询性能。 - **5.3.2.12 索引同步和locking机制**: 解释索引同步和锁定机制对于保证数据一致性的必要性。 #### 五、字符分析器 **5.1 LUCENE分析器...

    JAVA WEB典型模块与项目实战大全

    2.9 小结  第3章 实现各种框架的集成  3.1 spring框架与其他框架的集成原理  3.2 实现ssh三种框架环境集成  3.3 实现spring与struts 2.x集成  3.4 实现spring、struts2.x和hibernate框架集成  3.5 小...

    Big Data Glossary-大数据术语

    **2.9 Riak** Riak是一个高度可用的分布式NoSQL数据库,支持数据复制和故障恢复。它采用键值存储方式,支持多种数据类型。 **2.10 ZooKeeper** ZooKeeper是一个分布式协调服务,用于管理和维护分布式系统的元数据...

    A8-V5协同管理软件 V5.1SP1安装维护手册

    - **全文检索**:集成Lucene或Elasticsearch实现高效的信息检索。 **1.3 服务器运行环境要求** 根据不同的并发用户数量,对服务器的硬件配置有着不同的要求: - **1.3.1 并发数说明** - **并发200以下用户**:...

Global site tag (gtag.js) - Google Analytics