Lucene之八(Lucene的高亮显示)

来源:互联网 发布:华为mate9数据恢复 编辑:程序博客网 时间:2024/06/10 07:19
     在Lucene的org.apache.lucene.search.highlight包中提供了关于高亮显示检索关键字的工具。我们在使用百度、Google搜索的时候,检索结果显示的时候,在摘要中实现与关键字相同的词条进行高亮显示,百度和Google指定红色高亮显示。

有了Lucene提供的高亮显示的工具,可以很方便地实现高亮显示的功能。

高亮显示,就是根据用户输入的检索关键字,检索找到该关键字对应的检索结果文件,提取对应于该文件的摘要文本,然后根据设置的高亮格式,将格式写入到摘要文本中对应的与关键字相同或相似的词条上,在网页上显示出来,该摘要中的与关键字有关的文本就会以高亮的格式显示出来。

高亮显示模块需要两个独立的输入:完整的原始文本以用来提供操作数据,以及来源于该文本的一个TokenStream。为了创建TokenStream,你必须对文本进行重新分析,此时需要使用与索引期间相同的分析器进行。
Highlighter依赖于词汇单元流中每个词汇单元的起始和结束位置偏移量来将原始输入文本中的字符片段进行精确定位,来用于高亮显示。

高亮处理的相关概念:


Fragmenter

作用是将原始字符串拆分成独立的片段。

NullFragmenter 是该接口的一个具体实现类,它将整个字符串作为单个片段返回,这适合于处理title域和前台文本较短的域,而对于这些域来说,我们是希望在搜索结果中全部展示。

SimpleFragmenter 是负责将文本拆分封固定字符长度的片段,但它并处理子边界。你可以指定每个片段的字符长度(默认情况100)但这类片段有点过于简单,在创建片段时,他并不限制查询语句的位置,因此对于跨度的匹配操作会轻易被拆分到两个片段中;

SimpleSpanFragmenter 是尝试将让片段永远包含跨度匹配的文档。

如果不Highlighter实例中设置Fragmenter,那么它会默认的SimpleFragmenter。

Scorer

Fragmenter输出的是文本片段序列,而Highlighter必须从中挑选出最适合的一个或多个片段呈现给客户,为了做到这点,Highlighter会要求Java接口Scorer来对每个片段进行评分。
Highlighter提供了两个Scorer具体实现类:QueryTermScorer和QueryScorer
QueryTermScorer 基于片段中对应Query的项数进行评分。
QueryScorer只对促成文档匹配的实际项进行评分。

Encoder

他的目的很简单,将初始文本编码成外部格式。该接口实现有两个:
DefaultEncoder:默认情况下供Hightlighter使用,它并不对文本进行任何操作。
SimpleHTMLEncoder:负责将文本编码成HTML,并忽略一些如< 、>以及其它非ASCII等特殊字符。一旦完成编码,最后一步就是对片段进行格式化处理向用户展现。
原创粉丝点击