`

高亮显示和显示部分原文件

阅读更多

lucene笔记十 :关于高亮显示和显示部分原始文件的原则

高亮显示查询项

有一个能使搜索引擎变得更友好的办法,那就是向你的用户提供一些搜索命中结果的上下文,而且更为重要的是这样做是非常有用 的。最好的例子就是本系统用户在查找天气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着手项目了。

分享到:
评论

相关推荐

    vs2010选中全部高亮显示插件

    此外,高亮显示不仅限于当前文件,还可以扩展到整个解决方案,使得开发者能够在整个项目范围内查找和理解代码的相关性。这在调试、重构或审查代码时尤其有用,可以避免遗漏可能的错误或不一致之处。 为了自定义高亮...

    visual studio 2010 高亮显示选中单词

    为了满足这一需求,Visual Studio 2010引入了一个名为“Selection Highlight”的插件,该插件能够实现选中单词的高亮显示,从而提升代码阅读和编辑体验。 "Selection Highlight" 插件的特性在于它能对用户在文档中...

    标签内JavaScript代码的高亮显示插件

    JavaScript作为主流的前端编程语言,其代码的高亮显示能够帮助开发者更容易地理解和调试代码。`&lt;pre&gt;`标签在HTML中常用于保留原文档的空白格式,常用来展示代码片段。本文将探讨一种专门用于在`&lt;pre&gt;`标签内实现...

    onenote2016高亮显示插件

    然而,原生功能中并未包含文本高亮显示这一常见需求,这在一定程度上限制了其在批注和标记重要信息时的便捷性。为了解决这个问题,开发者们推出了OneNote 2016的高亮显示插件,以满足用户对个性化标注的需求。 本...

    vs2010全选高亮显示插件.vsix.rar

    此插件专门设计用于Visual Studio 2010,它的主要功能是在用户选中代码时实现高亮显示,帮助开发者快速定位和理解代码之间的关联性,从而提高编程效率。 在描述中提到,常规的Visual Studio 2010设置并不提供全选后...

    discuz代码高亮插件

    综上所述,"Discuz代码高亮插件"是通过修改和扩展Discuz的核心功能,特别是编辑器部分,实现论坛中代码的插入和高亮显示,从而提升技术讨论区的可读性。用户在安装和使用时,需注意操作步骤,确保数据安全,并充分...

    HRjs微小JavaScript插件用于高亮显示和替换DOM中的文本

    在Web开发中,有时我们需要对页面中的特定文本进行高亮显示或者替换,以增强用户体验或实现特定功能。HR.js(Highlight and Replace JavaScript)是一款轻量级的JavaScript插件,专为这个目的而设计。它允许开发者...

    Opencv项目实战:11 使用Opencv高亮显示文本检测.zip

    在这个项目中,它可能负责加载图像、调用文本检测和高亮显示的函数,以及最后展示或保存结果。 `utilis.py`和`color.py`是辅助模块,它们可能包含了项目中的一些通用函数。`utilis.py`可能包含了一些图像处理的实用...

    ReactNative组件用于高亮单词在一个大的文本中

    在这个场景下,我们关注的是一个特定的React Native组件,它主要用于在大量文本中高亮显示特定的单词。 这个组件名为"react-native-highlight-words",它是为了解决在移动应用中搜索或标记特定单词的需求而设计的。...

    Android自定义高亮控件

    自定义高亮控件通常包括以下几个核心组成部分: 1. **背景图层**:这是控件的基础,通常与应用的背景一致,用于创建一个干净的展示环境。 2. **内容视图**:显示实际的UI元素,可以是按钮、图片或者其他任何...

    jquery实现的超帅动态表格交叉变色高亮显示效果.zip

    本项目“jquery实现的超帅动态表格交叉变色高亮显示效果.zip”显然关注的是如何利用jQuery来增强网页中的表格展示,特别是涉及到动态数据更新时的视觉效果。 首先,我们要理解jQuery如何处理表格(`&lt;table&gt;`)元素...

    这两天做的网页静态搜索和高亮搜索(含源码)

    标题中的“网页静态搜索和高亮搜索”涉及的是在网页中实现搜索功能并高亮显示匹配结果的技术。这里我们可以深入探讨这两个概念。 1. **网页静态搜索**: 在网页中,静态搜索通常指的是不依赖服务器端处理的搜索。...

    原生 js 实现类 3d 地图大屏展示自动高亮轮播、显示悬浮提示 tootip 的方案:svg + popper.js 定位引擎

    在构建原生 JavaScript 实现的类 3D 地图大屏展示时,结合 SVG(Scalable Vector Graphics)和 Popper.js 定位引擎,我们可以创建出具有自动高亮轮播以及显示悬浮提示(tooltip)功能的高效解决方案。本文将深入探讨...

    vb语法高亮类修改版

    语法高亮是指在编辑器或IDE中,通过不同的颜色、样式来区分代码中的关键字、字符串、注释、变量等不同部分,使代码更加醒目、易于理解。在VB环境中,关键字如`Sub`、`Function`、`End If`等会被突出显示,而字符串和...

    Android-EmphasisTextView-支持部分文字高亮的TextView

    `EmphasisTextView` 的核心功能在于它允许开发者指定文本中的某些部分进行高亮处理,通常用于突出显示关键词、提示信息或者吸引用户的注意力。这种组件在许多应用场景中都很有用,比如搜索结果展示、教程引导、新闻...

    linux-一个带有语法高亮和Git集成的cat1克隆

    标题 "linux-一个带有语法高亮和Git集成的cat1克隆" 提及的是一个针对Linux系统的工具,它是对传统`cat`命令的...用户可以通过安装并使用这个工具来提升他们的Linux开发效率,尤其是在处理大量代码文件和Git项目时。

    麦库代码高亮插件(本人亲试可用)

    在这个案例中,插件是为了增强麦库的功能,特别是对于程序员和开发者来说,代码高亮显示是他们在编写和阅读代码时非常需要的一项功能。 【压缩包子文件的文件名称列表】"editor" 可能是指插件的核心组件,即编辑器...

    SyntaxHighlighter 高亮代码插件JS

    - **引入资源**:在HTML文件中引入SyntaxHighlighter的JavaScript文件和CSS文件。 - **设置HTML结构**:为代码段创建预格式化(`&lt;pre&gt;`)或代码(`&lt;code&gt;`)标签,并添加对应的类名以指定编程语言。 - **初始化...

    bin文件对比工具

    1. **可视化比较**:以彩色高亮的方式展示两个文件的不同部分,使差异一目了然。 2. **同步滚动**:当在一个文件中移动时,另一个文件会同步滚动,便于同时查看两者的差异。 3. **块选择和比较**:允许用户选择特定...

Global site tag (gtag.js) - Google Analytics