高亮显示查询项
有一个能使搜索引擎变得更友好的办法,那就是向你的用户提供一些搜索命中结果的上下文,而且更为重要的是这样做是非常有用 的。最好的例子就是本系统用户在查找天气Web服务时的搜索结果。如下图1所示,每个命中结果包括了匹配文档的三行左右的内容,并且将查询项高亮显示出 来。通常,我们只需要对搜索项 上下文内容浏览一眼就足以 了解该结果是否值得我们深入地进行研究。
图4.1 高亮显示查询项
Highlighter 最近已经充分升级为一个复杂而灵活的工具。Highlighter包括了三个主要部分:段划分器(Fragmenter)、计分器(Scorer)和格式 化器(Formatter)。这几个部分对应于Java的同名接口,并且每部分都有一个内置的实现以便我们使用。最简单的Highlighter将返回在 匹配项周围的最佳段落,并使用HTML的<B>将这些项标记出来:
String text = “The quick brown fox jumps over the lazy dog”;
TermQuery query = new TermQuery(new Term(“field”, “fox”));
Scorer scorer = new QueryScorer(query);
Highlighter highlighter = new Highlighter(scorer);
TokenStream tokenStream =
new SimpleAnalyzer().tokenStream(“field”,
new StringReader(text));
System.out.println(highlighter.getBestFragment(tokenStream,text));
前述代码将产生如下输出
The quick brown <B>fox</B> jumps over the lazy dog
Highlighter不仅需要你提供记分器和需要高亮显示的文本,还需要一个TokenStream实例。这个TokenStream实例是由分析器生成的。为了成功地对项进行高亮显示,Query中的这些项需要匹配TokenStream产生的Token实例。我们提供的文本则被用于生成TokenStream,而这个TokenStream又被用作高亮显示的原始文本。每个由TokenStream生成的Token实例都包含语汇单元的位置信息,这些信息用来指示原始文本中高亮部分的起始和结束位置。
Highlighter利用Fragmenter将原始文本分割成多个片段。内置的SimpleFragmenter将原始文本分割成相同大小的片段,片段默认的大小为100个字符。这个大小是可控制的。
QueryScorer是内置的计分器。计分器的工作首先是将片段排序。QueryScorer使用的项是从用户输入的查询中得到的;它会从原始输入的单词、词组和布尔查询中提取项,并且基于相应的加权因子(boost factor)给它们加权。为了便于QueryScoere使用,还必须对查询的原始形式进行重写。比如,带通配符查询、模糊查询、前缀查询以及范围查询等,都被重写为BoolenaQuery中所使用的项。在将Query实例传递到QueryScorer之前,可以调用Query.rewrite(IndexReader)方法来重写Query对象(否则,你必须确保用户输入的查询文本就是Lucene直接可以处理最基本的项)。
最后,格式化器(Formatter)用于装饰项文本。如果不指定其他的格式化器,Lucene会默认使用内置的格式化器SimpleHTMLFormatter,这个格式化器将会用HTML的黑体开始标签(begin bold tags <B>)和黑体结束标签(end bold tags </B>)来标识出高亮显示的项文本。Highlighter默认地使用SimpleHTMLFormatter和SimpleFragmenter这两个格式化器。每一个由Formatter高亮显示的项都将会带有一个语汇单元评分。当使用QueryScorer时,这个评分将作为查询该项的加权因子。这个语汇单元评分能够被用来决定该项的重要性。要利用这个特性就必须实现自定义的格式化器。
注:我们项目所用到的 Lucene API是基于最新版Lucene2.1的,如果你用的是以前版本可能这些例子不能很好的运行。不过我觉得看了以上的东西,再结合网上大量的Lucene资 料还有一些例子就能对Lucene有一定的理解了,最起码就可以开始使用Lucene着手项目了。
另外,在文章开始提到了,我们以前一起做项目时没有使用过Lucene,这次是我们团队的赵宁同学开始接触Lucene,然后在我们项目中使用这个工具, 我是在他指导的基础上对Lucene有一点点的理解而已。感兴趣的可以就项目中的更细节问题跟赵宁同学联系:MSN:program-maker@hotmail.com
分享到:
相关推荐
在使用Lucene进行中文分词时,原始的方法是在运行时对每篇文档进行多次分词操作以实现关键词的高亮显示,这种方法虽然能够确保高亮显示的准确性,但会显著降低系统的响应速度,特别是在处理大量文档或复杂查询时,...
本话题聚焦于“Lucene多字段查询”和“文字高亮显示”,这两个特性在信息检索和数据挖掘中具有广泛应用。 首先,让我们深入理解“Lucene多字段查询”。在信息检索系统中,用户可能希望根据多个字段来过滤和排序结果...
**SpringBoot+Lucene搜索结果高亮显示** 在现代Web应用程序中,强大的全文搜索引擎功能是不可或缺的,而Apache Lucene正是这样一个高效的、可扩展的开源全文检索库。在这个SpringBoot+Lucene的Demo中,我们将深入...
《Lucene+HighLighter高亮显示实例解析》 在信息技术领域,搜索引擎的构建与优化是至关重要的一环,其中,如何有效地对搜索结果进行高亮显示,以突出关键信息,是提升用户体验的关键因素之一。本篇文章将深入探讨...
Lucene的高亮显示功能是其强大搜索能力的重要组成部分,通过合理的配置和编码,可以显著提升搜索结果的可读性和用户体验。掌握高亮显示的实现原理和技巧,对于从事全文搜索应用开发的专业人士而言,是不可或缺的技能...
本压缩包中的代码着重展示了如何使用 Lucene 进行分页搜索和结果高亮显示。下面将详细解释这两个关键知识点。 **一、Lucene 分页搜索** 在大型数据集上进行搜索时,一次性返回所有结果并不实际,因此分页搜索显得...
标题中的“lucene.net以及高亮的DLL文件”指的是在.NET环境中使用Lucene搜索引擎库时,涉及到了文本高亮显示的DLL组件。Lucene.Net是一个开源的全文检索库,它是Apache Lucene项目针对.NET Framework的移植版本,为...
下面我们将深入探讨如何在Android环境中利用Lucene来创建一个高效、功能丰富的全文检索系统,并了解如何高亮显示搜索结果中的关键字。 首先,我们要理解全文检索的基本原理。全文检索是指通过建立倒排索引来快速...
总的来说,Lucene.NET在中文分词和高亮显示方面的应用需要结合合适的分词器,并进行适当的配置和优化。开发者可以根据实际需求选择适合的分词器,并通过集成和调优提高系统的搜索效率和用户体验。
本文将详细介绍如何使用Java和Lucene来实现HTML文本的高亮显示,以便用户在搜索结果中能快速识别关键词。提供的`HighLighterUtils.java`文件应该包含了实现这一功能的核心代码。 首先,我们需要理解高亮显示的基本...
Maven坐标:org.apache.lucene:lucene-core:7.7.0; 标签:apache、lucene、core、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档...
### Lucene笔记:全文检索的实现机制 #### 全文检索与中文支持 在全文检索领域,Lucene作为一款开源的高性能全文检索引擎,被广泛应用于各种场景之中。特别是对于中文用户而言,如何确保Lucene能够高效地支持中文...
总之,通过集成IKAnalyzer和Lucene 4.9,我们可以构建一个能够对中文搜索结果进行关键词高亮显示的系统,从而提升用户体验。这个过程涉及到了中文分词、全文搜索、评分系统以及HTML的处理等多个技术点。对于开发人员...
lucene3.5高亮
Maven坐标:org.apache.lucene:lucene-sandbox:6.6.0; 标签:apache、lucene、sandbox、jar包、java、中文文档; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译...
以上内容仅是对《Lucene笔记共38页.pdf》压缩包中部分内容的概述,实际笔记中应包含更多详细信息,如具体代码示例、最佳实践以及常见问题解答等。通过深入学习这份笔记,读者将能够熟练掌握Lucene的使用,从而在实际...
在Android平台上实现全文检索并高亮关键字是一项技术挑战,但通过集成Apache Lucene库,可以有效地解决这个问题。Apache Lucene是一个高性能、可扩展的信息检索库,它为开发人员提供了强大的文本搜索功能。以下是对...
"lucene-highlighter-2.4.0.jar"就是用于高亮显示的Lucene组件,它包含了一系列的类和接口,如QueryScorer、SimpleHTMLFormatter等,可以帮助开发者轻松地实现高亮效果。 "ThesaurusAnalyzer.jar"可能是一个自定义...
### Lucene知识点详解 #### 一、Lucene简介 **1.1 什么是Lucene** ...总结而言,Lucene是一个强大且灵活的全文检索引擎工具包,通过理解和掌握其核心概念和技术细节,我们可以有效地利用它来开发各种复杂的搜索应用。
lucene笔记