来源: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使用示例:
01.//首先获取docId的TokenStream 02.TokenStream tokenStream=TokenSources.getAnyTokenStream(reader, docId, field, analyzer); 03.//构建Fragmenter对象,用于文档切片 04.Fragmenter fragmenter = new SimpleFragmenter(100);//默认字符为100 05.//构建Scorer,用于选取最佳切片 06.Scorer fragmentScore = new QueryScorer(query); 07.//构建Formatter格式化最终显示(将字体颜色设置为红色) 08.Formatter formatter = new SimpleHTMLFormatter("<font color='red'>","</font>"); 09.//实例化Highlighter组件 10.Highlighter highlighter = new Highlighter(formatter,fragmentScore); 11.highlighter.setTextFragmenter(fragmenter); 12.// 最后一步,获取hightlightText 13.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高亮显示功能的准确性,还能在处理中文分词时显著提升系统性能,特别是对于大数据量和高并发场景下的应用,这种优化显得尤为重要。Lucene的TermVector特性,配合合理的代码实现,为...
### Lucene高亮显示详解 在全文搜索领域,Apache Lucene是业界标准的搜索引擎库,提供了强大的文本搜索功能。而在搜索结果中实现关键词高亮显示,可以极大地提升用户体验,让用户快速定位到搜索词所在的位置。本文...
**SpringBoot+Lucene搜索结果高亮显示** 在现代Web应用程序中,强大的全文搜索引擎功能是不可或缺的,而Apache Lucene正是这样一个高效的、可扩展的开源全文检索库。在这个SpringBoot+Lucene的Demo中,我们将深入...
4. **高亮显示**:可以突出显示查询关键词在搜索结果中的位置,提高用户体验。 5. **多语言支持**:Lucene内建了多种语言的分词器,可以处理不同语言的文本。 四、使用流程 使用Lucene通常涉及以下步骤: 1. 创建...
《深入理解Lucene 4.7.0:Java全文索引与高亮显示技术》 Lucene是一个由Apache软件基金会开发的开源全文检索库,它为Java开发者提供了强大的文本搜索功能。在4.7.0这个版本中,Lucene不仅强化了其核心搜索功能,还...
《Lucene+HighLighter高亮显示实例解析》 在信息技术领域,搜索引擎的构建与优化是至关重要的一环,其中,如何有效地对搜索结果进行高亮显示,以突出关键信息,是提升用户体验的关键因素之一。本篇文章将深入探讨...
本文将详细介绍如何使用Java和Lucene来实现HTML文本的高亮显示,以便用户在搜索结果中能快速识别关键词。提供的`HighLighterUtils.java`文件应该包含了实现这一功能的核心代码。 首先,我们需要理解高亮显示的基本...
Lucene是一个高性能、全文本搜索库,其核心功能包括文档索引、搜索、排序和高亮显示。它支持多种文本分析器,能够处理多种语言的文本数据。在2.9.4.2这个版本中,开发者对代码进行了优化,修复了已知的bug,以提供更...
4. **lucene-highlighter.jar**:提供高亮显示功能,可以突出显示查询结果中的关键词。 5. **compass-index-patch.jar**:可能是 Compass 的一个补丁或增强版,用于解决特定问题或添加新特性。 **应用实例:** ...
1. **Lucene简介**:Lucene是一个高性能、全文本搜索库,它提供了完整的搜索功能,包括索引、查询、高亮显示结果等。它不包含Web服务器或用户界面,而是作为其他应用程序的一个组件来使用。 2. **工作原理**:...
8. **高级特性**:包括近实时搜索、faceted search(分面搜索)、拼写纠错、高亮显示搜索结果等,丰富了搜索体验。 9. **实战应用**:文档可能会包含实际的代码示例,演示如何集成Lucene到Java项目中,以及如何进行...
- **高级特性**:介绍了 Lucene 的一些高级特性,如分词器定制、高亮显示、近似搜索等,帮助开发者构建更复杂的应用场景。 - **扩展与定制**:讨论了如何根据具体需求对 Lucene 进行扩展和定制,以适应不同的业务...
### Lucene高亮显示实现详解 #### 一、引言 在搜索引擎开发中,为了提升用户体验,往往需要对搜索结果中的关键词进行高亮处理。这样不仅可以让用户一眼就能看到搜索结果与他们输入的关键词之间的关联性,同时也有...
3. **高亮显示**:Lucene能够对搜索结果中的匹配关键词进行高亮,提升用户体验。 4. **排序与评分**:除了返回匹配的文档,Lucene还能根据相关性对结果进行排序,使用TF-IDF等算法计算每个文档的得分。 5. **多...
本话题聚焦于“Lucene多字段查询”和“文字高亮显示”,这两个特性在信息检索和数据挖掘中具有广泛应用。 首先,让我们深入理解“Lucene多字段查询”。在信息检索系统中,用户可能希望根据多个字段来过滤和排序结果...
5. **高亮显示**:可以将搜索关键词在结果文档中高亮显示,提高用户体验。 二、主要功能 1. **索引构建**:从各种数据源(如文件、数据库等)读取内容,创建索引结构。 2. **索引更新**:支持增量索引,仅对变动...
5. 高亮显示:在返回搜索结果时,Lucene可以高亮显示匹配的关键词,帮助用户快速找到相关信息。6.4.0可能对高亮模块进行了改进,提供更美观、更准确的高亮效果。 6. 多语言支持:Lucene对多种语言提供了内置支持,...
标题中的“lucene.net以及高亮的DLL文件”指的是在.NET环境中使用Lucene搜索引擎库时,涉及到了文本高亮显示的DLL组件。Lucene.Net是一个开源的全文检索库,它是Apache Lucene项目针对.NET Framework的移植版本,为...
- **频率和位置信息**:记录关键词在文档中出现的频率和位置,便于精确匹配和高亮显示。 3. **索引存储**: - **词典文件**:保存所有关键词及其相关信息,包括指向频率文件和位置文件的指针。 - **频率文件**:...
5. **分页与高亮**:可以设置搜索结果的显示数量,并使用Highlighter对匹配的查询词进行高亮。 ### 4. Lucene中文处理 在处理中文时,我们通常使用ChineseAnalyzer。它内置了分词器,如SmartChineseAnalyzer,能较...