lucene 高亮显示

原文地址: http://blog.csdn.net/javaman_chen/article/details/8224407 

Lucene针对高亮显示功能提供了两种实现方式,分别是Highlighter和FastVectorHighlighter。
顾名思义,FastVectorHighlighter较Highlighter速度更快,功能也更强大,但是有使用前提:创建索引时,需要存储Field的分词向量信息。(TermVector.WITH_POSITIONS_OFFSETS),而Highlighter则不需要,如何在时间和空间上进行取舍,需要开发人员自己衡量

Lucene处理高亮显示的大概流程如下


1.首先获取原始文档的TokenStream

原始文档可打到索引里(通过Store.YES属性),也可从其他物理媒介中获取(考虑到Lucene的存储性能不是很高效)
高亮显示功能需要知道每一个Term的位置和偏移量信息,在索引库中这些信息是通过分词向量(TermVector)来存储的,因此在创建索引阶段,如果为索引域指定TermVector.WITH_POSITIONS_OFFSETS属性,则可以加快TokenStream的获取过程,否则需要通过Analyzer去重新解析获取
Lucene提供了TokenSources这个实用类,通过它提供的静态方法,可以很方便的获取到文档的TokenStream信息:
TokenSources.getAnyTokenStream(reader, docId, field, analyzer);//方法体中会先通过TermVector获取TokenStream,TermVector不存在,通过analyzer获取
该方法的使用前提是创建索引时指定了Store.YES信息,如不指定该信息,可通过Analyzer.tokenStream(field, new StringReader(String text))方法来获取text的TokenStream。
2.将原始文档进行切片处理
当原始文档信息量较大时,我们可能只需要高亮出局部有价值的信息,而将其他的冗余信息过滤掉,这个时候就需要对原始信息进行切片处理,选出最有价值的切片来进行加工。
NullFragmenter:不进行切片处理,保留原始文档的所有字符
SimpleFragmenter:按指定字符长度将文档进行分割(默认字符长度是100)
SimpleSpanFragmenter:功能同SimpleFragmenter类似,但不会将SpanQuery或PhraseQuery的查询结果打散。
3.选出最符合搜索条件的文档切片
Lucene提供了QueryScorer和SpanScorer类来对每一个切片进行评分
在Lucene实战一书中,作者建议我们使用SimpleSpanFragmenter+SpanScorer的组合方式,但在3.6版本的测试中SpanScorer视乎不再适用(个人没搞清楚怎样使用)
4.将最后选定的文档片段进行编码处理
5.格式化显示编码之后的文档片段信息
(加粗、改变字体颜色等等。。。)

Highlighter使用示例:

//首先获取docId的TokenStream
TokenStream tokenStream=TokenSources.getAnyTokenStream(reader, docId, field, analyzer);
//构建Fragmenter对象,用于文档切片
Fragmenter fragmenter = new SimpleFragmenter(100);//默认字符为100
//构建Scorer,用于选取最佳切片
Scorer fragmentScore = new QueryScorer(query);
//构建Formatter格式化最终显示(将字体颜色设置为红色)
Formatter formatter = new SimpleHTMLFormatter("<font color='red'>","</font>");
//实例化Highlighter组件
Highlighter highlighter = new Highlighter(formatter,fragmentScore);
highlighter.setTextFragmenter(fragmenter);
// 最后一步,获取hightlightText
highlighter.getBestFragment(tokenStream, text);//第二个参数为原始文档信息


FastVectorHighlighter使用示例:
//构造Highlighter组件
FragListBuilder fragListBuilder = new SimpleFragListBuilder();
FragmentsBuilder fragmentBuilder =new ScoreOrderFragmentsBuilder(BaseFragmentsBuilder.COLORED_PRE_TAGS,BaseFragmentsBuilder.COLORED_POST_TAGS);
FastVectorHighlighter highligher=new FastVectorHighlighter(true, true,fragListBuilder, fragmentBuilder);
//构造FieldQuery
Query query=new QueryParser(...).parse(...);
FieldQuery fieldQuery = highlighter.getFieldQuery(query);
//高亮最佳文档切片
highlighter.getBestFragment(fieldQuery, IndexReader reader, int docId, String field, int fragCharSize);//fragCharSize需要大于18

注意:使用FastVectorHighlighter,在创建索引时,必须要为field指定TermVector.WITH_POSITIONS_OFFSETS和Store.YES属性


转载于:https://www.cnblogs.com/anyuan9/p/6171543.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/574540.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

u盘 轻量linux,3种方法来创建轻量、持久化的Xubuntu Linux USB系统盘

使用Universal USB Install创建持久化USB XUbuntu系统盘这个教程为你介绍如何使用Xubuntu Linux创建一个轻量并且持久化的Linux USB系统盘。译者注&#xff1a;持久化Linux USB系统盘(Persistent Linux USB drive)&#xff0c;安装在优盘的Linux系统&#xff0c;允许用户保存数…

linux u盘加载阵列卡驱动步骤,Linux U盘加载阵列卡驱动步骤

如果没有Linux的机器,可以使用安装光盘的Linux环境&#xff1a;将 U 盘完全慢速格式化&#xff0c;将驱动拷贝到U盘&#xff0c;将U盘插在服务器上&#xff0c;用Linux安装光盘第一张启动到图形安装界面&#xff0c;按Ctrl&#xff0b;Alt&#xff0b;F2切换到控制台。按F11调用…

linux 笔记本键盘灯驱动程序,安装和使用CKB Next在Linux上更改Corsair键盘背光设置...

本文介绍在Ubuntu、Debian、Arch Linux、Fedora、OpenSUSE系统下安装和使用CKB Next的方法&#xff0c;以在Linux系统上更改Corsair键盘背光设置。Corsair键盘非常适合在PC上进行游戏&#xff0c;特别是在夜间&#xff0c;因为它们具有出色的RGB背光功能&#xff0c;用户可以轻…

c++ linux 环境,C++ 环境设置

C 环境设置本地环境设置如果您想要设置 C 语言环境&#xff0c;您需要确保电脑上有以下两款可用的软件&#xff0c;文本编辑器和 C 编译器。文本编辑器这将用于输入您的程序。文本编辑器包括 Windows Notepad、OS Edit command、Brief、Epsilon、EMACS 和 vim/vi。文本编辑器的…

linux安装pgsql源码包解压,在Linux(centos)中使用源码安装pgRouting

目录一、解压pgRouting二、配置PostgreSQL的环境变量三、编译源代码四、测试由于pgRouting依赖于PostGIS和PostgreSQL&#xff0c;所以阅读本文之前&#xff0c;务必请先阅读&#xff1a;Linux(centos)中使用源码安装PostgreSQLLinux(centos)中使用源码安装PostGIS按照以上文章…

Android无线测试之—UiAutomator UiObject API介绍二

点击与长按 一、组件区域位置关系 Rect 对象代表一个矩形区域 [Left,Top] [Right,Bottom] 二、点击与长按API 返回值API描述booleanclick()点击对象booleanclickAndWaitForNewWindow(lang timeout)点击对象&#xff0c;等待新窗口出现&#xff0c;参数为等待超长时间booleancli…

【Python】进程和多进程的使用

原文作者&#xff1a;我辈李想 版权声明&#xff1a;文章原创&#xff0c;转载时请务必加上原文超链接、作者信息和本声明。 文章目录 前言一、进程1.概念理解2.进程的启动3.python进程 二、多进程 前言 进程是指计算机中正在运行的程序实例。 进程可以是操作系统分配的&#…

android WebView总结

浏览器控件是每一个开发环境都具备的&#xff0c;这为马甲神功提供了用武之地。windows的有webbrowser&#xff0c;android和ios都有webview。仅仅是其引擎不同&#xff0c;相对于微软的webbrowser。android及ios的webview的引擎都是webkit&#xff0c;对Html5提供支持。本篇主…

Windows消息传递机制详解

Windows是一个消息&#xff08;Message&#xff09;驱动系统。Windows的消息提供了应用程序之间、应用程序与Windows系统之间进行通信的手段。应用程序想要实现的功能由消息来触发&#xff0c;并且靠对消息的响应和处理来完成。必须注意的是&#xff0c;消息并非是抢占性的&…

c语言求树上节点的双亲,用非递归算法求二叉树叶子结点的c语言代码怎样写?...

递归算法&#xff1a;是一种直接或者间接地调用自身的算法。在计算机编写程序中&#xff0c;递归算法对解决一大类问题是十分有效的&#xff0c;它往往使算法的描述简洁而且易于理解。递归算法的特点递归过程一般通过函数或子过程来实现。递归算法&#xff1a;在函数或子过程的…

c语言求前15项中偶数项的和,偶数前n项和

初中数学相较于小学数学&#xff0c;在内容、难度等方面均有提高&#xff0c;因此在学生学习中&#xff0c;很多家长不知道怎样去辅导孩子学习数学&#xff0c;今天小编整理了偶数前n项和&#xff0c;仅供参考!1 等差数列的奇数项的前n项和和偶数的前n项和怎么求_百度知道1&am…

av linux,AV Linux 新版发布,多少人知道

原标题&#xff1a;AV Linux 新版发布&#xff0c;多少人知道正文Glen MacArthur宣布发布了全新版本的AV Linux&#xff0c;这是一个基于Debian的面向多媒体的发行版&#xff0c;其中包含一系列音频和视频制作软件。对于那些不了解此发行版的人&#xff0c;你应该知道它包含用于…

android应用对于内存的大小是有限制的,Android 的内存限制

2、单个应用可用的最大内存Android设备出厂以后&#xff0c;java虚拟机对单个应用的最大内存分配就确定下来了&#xff0c;超出这个值就会OOM。这个属性值是定义在/system/build.prop文件中的dalvik.vm.heapstartsize8m它表示堆分配的初始大小&#xff0c;它会影响到整个系统对…

winfrom 从网页中通过源代码截取文章

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.IO;//引用流 using System.Net; using System.Text.RegularExpr…

和平精英android怎么写符号,和平精英名字符号大全 可用的名字特殊符号有哪些...

和平精英名字符号大全&#xff1b;和平精英玩家名可以使用特殊符号使自己的名字与众不同&#xff0c;有哪些特殊符号是可用的呢&#xff1f;下面一起来看看吧。和平精英名字特殊符号大全π-/≤≥≈<>≈≡<>∷∫∮∝∞∧∨⊥‖∠⌒⊙√∟⊿㏒㏑′〃〒&#xffe0;%℃…

android studio课程管理系统,8 个最优秀的 Android Studio 插件

3. Android Drawable Importer为了适应所有Android屏幕的大小和密度&#xff0c;每个Android项目都会包含drawable文件夹。任何具备Android开发经验的开发人员都知道&#xff0c;为了支持所有的屏幕尺寸&#xff0c;你必须给每个屏幕类型导入不同的画板。Android Drawable Imp…

EF – 8.多对多关联

5.6.10 《多对多关联&#xff08;上&#xff09;》 时长&#xff1a;9分57秒 难度&#xff1a;难 5.6.11《多对多关联&#xff08;下&#xff09;》 时长&#xff1a;8分50秒 难度&#xff1a;难 如果单独地把多对多关联的CRUD拿出来讲&#xff0c;确实比较难&#xff0c;但如果…

萌宠历险记html5游戏在线玩,《神武2》天外魔境现世 萌宠历险记首发

在《神武2》古老的传说中&#xff0c;曾经发生过一场未被记载的惨烈战役&#xff0c;据传曾有逆魔肆虐人间&#xff0c;后被三界众神击败并流放天外魔境&#xff0c;传说传到今天已经过去了一千年左右&#xff0c;而天外魔境也几乎无人再次踏入过&#xff0c;但天外魔境却隐藏着…

html实现牌匾效果,4款店面牌匾设计效果图 店铺门头亚克力牌匾样式制作设计图...

4款店面牌匾设计效果图 店铺门头亚克力牌匾样式制作设计图店铺门头亚克力牌匾样式设计很规整自然&#xff0c;同时这种材质也是很受现代人的欢迎&#xff0c;酒红色的色调很自然&#xff0c;醒目的视觉冲击也很不错&#xff0c;中央是点名和logo的设计&#xff0c;再加上图示&a…

html 实现格子效果,div+css实现九宫格效果

divcss实现九宫格效果 有3种方法&#xff1a;1、方法一&#xff1a;把九宫图切割成9张图&#xff0c;用9个div合在一起&#xff0c;改变宽高&#xff0c;实现。优点&#xff1a;兼容性100%支持&#xff0c;缺点div太多&#xff0c;使用不方便。2、方法二&#xff1a;把九宫图按…