Lucene 2.4 + Highlighter 2.4 的分页+高亮显示
import net.paoding.analysis.analyzer.PaodingAnalyzer;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.queryParser.MultiFieldQueryParser;
import org.apache.lucene.search.BooleanClause;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.TopDocCollector;
import org.apache.lucene.search.highlight.Highlighter;
import org.apache.lucene.search.highlight.QueryScorer;
import org.apache.lucene.search.highlight.SimpleFragmenter;
import org.apache.lucene.search.highlight.SimpleHTMLFormatter;
/**
* Lucene 2.4 + Highlighter 2.4 的分页+高亮显示代码例子.<br>
* 高亮的css自己写吧。
*
* @author 老紫竹研究室(laozizhu.com)
*/
public class TestLuceneHighlighter {
private static final String FIELD_TITLE = "title";
private static final String FIELD_BODY = "body";
public synchronized Analyzer getAnalyzer() {
return new PaodingAnalyzer();
}
public void test(String queryString, int begin, int number) {
IndexSearcher isearcher = null;
try {
isearcher = new IndexSearcher("d:/index");
/* 下面这个表示要同时搜索这两个域,而且只要一个域里面有满足我们搜索的内容就行 */
BooleanClause.Occur[] clauses = { BooleanClause.Occur.SHOULD, BooleanClause.Occur.SHOULD };
TopDocCollector collector = new TopDocCollector(10);
Query query = MultiFieldQueryParser.parse(queryString, new String[] { FIELD_TITLE, FIELD_BODY }, clauses, getAnalyzer());
isearcher.search(query, collector);
ScoreDoc[] hits = collector.topDocs().scoreDocs;
// 用这个进行高亮显示,默认是<b>..</b>
// 用这个指定<read>..</read>
SimpleHTMLFormatter simpleHTMLFormatter = new SimpleHTMLFormatter("<read>", "</read>");
// 构造高亮
// 指定高亮的格式
// 指定查询评分
Highlighter highlighter = new Highlighter(simpleHTMLFormatter, new QueryScorer(query));
// 这个一般等于你要返回的,高亮的数据长度
// 如果太小,则只有数据的开始部分被解析并高亮,且返回的数据也少
// 太大,有时太浪费了。
highlighter.setTextFragmenter(new SimpleFragmenter(Integer.MAX_VALUE));
for (int i = begin; i < hits.length && i < begin + number; i++) {
Document doc = isearcher.doc(hits[i].doc);
// 有三个参数
// 分析器
// 要解析的字段名
// 要解析的数据
System.out.println(highlighter.getBestFragment(getAnalyzer(), FIELD_TITLE, doc.get(FIELD_TITLE)));
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (isearcher != null) {
try {
isearcher.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
分享到:
相关推荐
本项目结合了这些技术,实现了分页、排序和高亮显示等功能,旨在为用户提供更高效、友好的搜索体验。下面将详细介绍这些知识点: 1. SSH框架: - **Spring**:Spring作为核心容器,管理着应用的Bean,提供了依赖...
本压缩包中的代码着重展示了如何使用 Lucene 进行分页搜索和结果高亮显示。下面将详细解释这两个关键知识点。 **一、Lucene 分页搜索** 在大型数据集上进行搜索时,一次性返回所有结果并不实际,因此分页搜索显得...
标题中的“使用Lucene4.7实现搜索功能,分页+高亮”表明我们要讨论的是如何利用Apache Lucene 4.7版本来构建一个具备搜索、分页和高亮显示功能的系统。Lucene是一个高性能、全文本搜索引擎库,它提供了强大的文本...
本文将深入探讨如何在Lucene中实现高亮显示搜索结果和高效的分页功能,帮助开发者更好地理解和运用这个强大的工具。 一、Lucene简介 Lucene的核心功能是提供文本的索引和搜索,其内部实现了高效的倒排索引结构,...
6. **高亮显示**:掌握如何使用Highlighter类来突出显示搜索结果中的匹配部分。 7. **更新和删除索引**:了解如何添加、更新和删除索引中的文档,以及提交更改的操作。 8. **性能优化**:探讨如何通过调整参数、使用...
同时,为了提高用户体验,搜索结果中的关键词通常会被高亮显示,Lucene的Highlighter类能帮助我们完成这个任务。 **8. 实例代码分析** 在"ch2"这个子目录中,可能包含了示例代码的第二章节,详细展示了如何使用...
- 分页和高亮显示:限制每次返回的结果数量,使用 `Highlighter` 高亮匹配的关键词。 综上所述,Lucene 示例项目提供了完整的站内搜索解决方案,涉及数据预处理、索引构建、查询执行、结果处理等多个环节。通过学习...
结果高亮是Lucene提供的一项功能,用于在搜索结果中突出显示与查询关键词匹配的部分。这提高了用户体验,让用户快速识别出搜索关键词在文档中的位置。在Lucene中,可以通过Highlighter类实现这一功能,它可以根据...
在本实例中,我们将深入探讨Lucene 4.7版本,涵盖索引的创建、修改、删除,以及查询时的排序、分页、优化和高亮显示等功能。此外,我们还将了解如何使用不同的分词器,以适应不同场景的需求。 首先,让我们从基础...
4. **高亮显示(Highlighting)**:为了提高用户体验,可以使用Highlighter组件高亮显示查询词在搜索结果中的位置。 **三、Lucene的高级特性** 1. **多字段搜索**:Lucene支持对多个字段进行同时搜索,通过...
5. **高亮显示**:`Highlighter`类实现搜索结果的关键词高亮。 四、实战应用 在实际项目中,开发者通常会结合Lucene与其他框架,如Spring、Solr或Elasticsearch,来构建更复杂的搜索引擎。例如,通过Spring集成...
- 需要注意的是,高亮显示的实现通常依赖于具体的搜索引擎框架或库,如Lucene、Solr等,因此具体实现细节可能会有所不同。 通过以上分析和解决方案,我们可以有效地解决在搜索引擎开发过程中遇到的关于结果集管理...
5. **高亮显示**: 使用`Highlighter`将搜索关键词在文档中高亮显示。 6. **分页与搜索性能优化**: `ScoreDoc`和`Sort`用于控制搜索结果的分页,通过缓存和位图索引提升搜索性能。 **五、尚学堂全文检索系统...
此外,还可以利用倒排索引的特性进行相关性排名,以及使用`Highlighter`进行查询结果的高亮显示。 综上所述,基于Lucene的搜索系统结合Paoding中文分词,实现了高效、准确的中文全文搜索功能。客户端调用涉及了查询...
8. **分页与高亮**:Lucene提供ScoreDoc和HitQueue等工具进行结果分页,使用Highlighter类可以对搜索结果中的匹配片段进行高亮显示。 9. **分布式搜索**:随着数据量的增大,单机Lucene可能无法满足需求。Solr和...
4. **高亮显示**:示例库还涵盖了如何使用高亮器(Highlighter)突出显示查询匹配的部分,提升用户体验。 5. **性能优化**:通过示例代码,开发者可以学习如何优化索引和搜索性能,如使用倒排索引、位集合(BitSet...
5. **分页与高亮**:可以设置搜索结果的显示数量,并使用Highlighter对匹配的查询词进行高亮。 ### 4. Lucene中文处理 在处理中文时,我们通常使用ChineseAnalyzer。它内置了分词器,如SmartChineseAnalyzer,能较...
6. **高级特性**:可能涉及更复杂的搜索技术,如布尔查询、短语查询、模糊查询、范围查询,以及如何使用Filter和Highlighter进行结果过滤和高亮显示。 7. **优化与性能**:讨论如何通过调整参数、使用复合索引、...
4. **高亮显示**:使用 `Highlighter` 类可以突出显示查询词在搜索结果中的出现位置。 5. **分页和分块检索**:对于大量结果,可以使用 `TopScoreDocCollector` 或 `TopDocsCollector` 实现分页。 6. **分布式搜索...