lucene高亮显示

Lucene学习之高亮显示 在搜索引擎中我们经常会看到这样的情景: 红色部分我们称之为高亮显示,lucene提供了HighLighter模块来实现这一功能。 高亮显示模块通常包含两个独立的功能,首先是动态拆分,就是从匹配搜索的大量文本中选取一小部分句子。第二个内容就是高亮显示。 我们先来看下高亮显示的原理: 一、TokenSources:IndexReader reader = DirectoryReader.op 阅读详情
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属性


Lucene的高级使用之高亮显示 1.1、高亮显示 原理: 1)给所有关键字加上一个HTML标签 2)给这个特殊的标签设置CSS样式 代码实现: // 高亮显示 @Test public void testHighlighter() throws Exception { // 目录对象 Directory directory = FSDirectory.open(... 阅读详情

相关推荐

使用Lucene的highlight包高亮显示检索关键字

在Lucene的org.apache.lucene.search.highlight包中提供了关于高亮显示检索关键字的工具。 使用百度、Google搜索的时候,检索结果显示的时候,在摘要中实现与关键字相同的词条进行高亮显示,百度和Google指定红色高亮显示。 需要的包有lucene-core-3.4.0.jar,IKAnalyzer3.2.8.jar,lucene-highlight

yyunix的专栏 5096

Lucene的全文搜索及高亮显示

【代码】Lucene的全文搜索及高亮显示。

天真吖的博客 978

【lucene】lucene高亮显示

1.概述 public final void lighter01() { try { String txt = "我爱北京天安门,伟大的毛主席"; Query query = new QueryParser(Version.LUCENE_35, "f", new MMSegAnalyzer()).parse("伟大"); QueryScorer scorer = new QueryScorer(query); Fragmenter fragment = new SimpleSp

九师兄 343

Lucene关键字高亮显示

在Lucene的org.apache.lucene.search.highlight包中提供了关于高亮显示检索关键字的工具。使用百度、Google搜索的时候,检索结果显示的时候,在摘要中实现与关键字相同的词条进行高亮显示,百度和Google指定红色高亮显示。 有了Lucene提供的高亮显示的工具,可以很方便地实现高亮显示的功能。 高亮显示,就是根据用户输入的检索关键字,检索找到该关键字...

baile8410的博客 243

lucene 多字段查询+文字高亮显示

NULL 博文链接:https://navylee.iteye.com/blog/740128

实测对比:DeepSeek、豆包、千问三大AI模型生成测试用例谁更强?(附完整代码)

本文通过实测对比了DeepSeek、豆包、千问三大AI模型在生成测试用例方面的表现。文章提供了完整的Python代码实现,详细分析了各模型在用例完整性、准确性、边界覆盖及幻觉控制等维度的差异,并分享了工程化集成与多模型融合等优化策略,旨在帮助测试团队选择合适工具以提升工作效率。

ik6789012的博客 956

lucene中的高亮

这里我们搜索的内容是“一步一步跟我学习lucene”,搜索引擎展示的结果中对用户的输入信息进行了配色方面的处理,这种区分正常文本和输入内容的效果即是高亮显示;这样做的好处:视觉上让人便于查找有搜索对应的文本块;界面展示更友好;lucene提供了highlighter插件来体现类似的效果;highlighter对查询关键字高亮处理;highlighter包包含了用于处理结果页查询内容高亮显示的功能,...

Java_funds的博客 1316

DRAM自测试模块

1 背景技术DDR3/4 SDRAM属于高速外设,最高时钟频率可达到1600MHz,最高速率可达3200MT/s。在存储控制器与DDR34 SDRAM设备之间有一层专为高速接口设计的模拟电路,此电路对于前端设计人员来说,不管在模拟验证阶段和回片测试阶段,都是一个黑盒子。而对于后端测试人员来说若此部分为外购IP,则内部结构也是无法清楚了解的。所以在测试阶段,对于DDR34 SDRAM的测试就具有一定的

Hierro的DDR世界 7014

Lucene高亮显示详解

在Lucene的org.apache.lucene.search.highlight包中提供了关于高亮显示检索关键字的工具。使用百度、Google搜索的时候,检索结果显示的时候,在摘要中实现与关键字相同的词条进行高亮显示,百度和Google指定红色高亮显示。有了Lucene提供的高亮显示的工具,可以很方便地实现高亮显示的功能。高亮显示,就是根据用户输入的检索关键字,检索找到该关

yiihsia的学习阵地 6117

RuntimeError: The current installed version of g++ (4.8.5) is less than the mininum version CUDA解决方案

本文主要介绍了RuntimeError: The current installed version of g++ (4.8.5) is less than the mininum version CUDA解决方案,希望能对学习python的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 8万+

【GlobalMapper精品教程】070:专题地图制作完整操作教程

与其它GIS软件一样,Globalmapper也可以制作出漂亮的地图,本文讲解专题地图制作完整操作流程。

智慧空间实验室 3755

Lucene之八(Lucene的高亮显示)

在Lucene的org.apache.lucene.search.highlight包中提供了关于高亮显示检索关键字的工具。我们在使用百度、Google搜索的时候,检索结果显示的时候,在摘要中实现与关键字相同的词条进行高亮显示,百度和Google指定红色高亮显示。 有了Lucene提供的高亮显示的工具,可以很方便地实现高亮显示的功能。 高亮显示,就是根据用户输入的检索关键字,检

深圳大力 398

搞定ESD(九):静电放电之PCB设计

不同信号参考地平面应尽量保持完整,减小静电电流流过参考地平面时造成的电位差,防止电位差导致的信号传输电平错误.主芯片GPIO信号布线应保持最短化,减小与参考地平面之间的电场耦合,同时也防止因信号环路面积较大耦合静电放电噪声干扰。外部端子接地引脚顶层采用分地设计,最好是直接过孔到完整参考地平面接地,避免与顶层信号包地、其它包地相连,防止顶层串扰耦合到其它信号,造成ESD问题。

记得诚 1952

Lucene —— 搜索结果高亮显示

零. 前言 谷歌、 百度的搜索结果在关键词命中的时候会高亮显示(飘红), Lucene 也提供了高亮显示的实现, 借助 Lucene 的 Highlighter 类可以快速实现搜索结果高亮。 一. 代码示例 本例使用 Lucene 5.3.1 的包  package com.wenniuwuren.lucene; import org.apache.lucene.anal

wenniuwuren 3403

机器人动力学仿真软件:PyBullet_(10).案例分析:双足机器人行走仿真

在本节中,我们将详细探讨如何使用PyBullet进行双足机器人的行走仿真。双足机器人行走仿真是一个复杂的动力学问题,涉及多个关节的协调运动和环境交互。通过本节的学习,您将了解如何创建和控制双足机器人模型,设置仿真环境,以及实现基本的行走算法。首先,我们需要创建一个双足机器人模型。PyBullet支持多种模型格式,包括URDF(Unified Robot Description Format)和MJCF(MuJoCo XML Format)。URDF是一种广泛使用的机器人模型描述格式,我们将使用URDF来创建

kkchenjj的博客 913

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

lucene 高亮显示

原文地址:点击打开链接 Lucene针对高亮显示功能提供了两种实现方式,分别是Highlighter和FastVectorHighlighter。 顾名思义,FastVectorHighlighter较Highlighter速度更快,功能也更强大,但是有使用前提:创建索引时,需要存储Field的分词向量信息。(TermVector.WITH_POSITIONS_OFFSETS),而Highli

安源 647

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Lucene的高亮显示)

在Lucene的org.apache.lucene.search.highlight包中提供了关于高亮显示检索关键字的工具。我们在使用百度、Google搜索的时候,检索结果显示的时候,在摘要中实现与关键字相同的词条进行高亮显示,百度和Google指定红色高亮显示。     有了Lucene提供的高亮显示的工具,可以很方便地实现高亮显示的功能。     高亮显示,

smile_园少 1180

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Lucene采用TermVector高亮显示方法出现问题

<br />采用的是Lucene3.0.2的核心包和高亮显示包,程序主要代码如下:<br /> Highlighter highlighter = new Highlighter(new SimpleHTMLFormatter(<br />      "<font color=/"red/">", "</font>"), new QueryScorer(<br />        query));<br />    highlighter.setTextFragmenter(new SimpleFragme

每天=生命的最后一天 2913

Lucene高亮显示

前面一节我们基本了解了Lucene的一些基本使用,索引的创建,搜索。 接下去让我们的搜索结果高亮! 需要的架包(版本比较低~) org.apache.lucene lucene-core 2.3.0 org.apache.lucene lucene-highlighter 2.3.0

TangXW的博客 466

lucene的多个字段搜索以及分页并高亮显示

package mutilSearch;import java.io.IOException;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import org.apache.lucene.analysis.Analyzer;import org.apache.lucene.analysis.standard.StandardAnalyzer;import org.

技术人宝哥 3487
上一篇: Spring JMS应用
下一篇: java实现N皇后问题
JavaMan_chen
博客等级 码龄19年 329粉丝 82原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值