package com.bin.lucene.highlighter;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.queryParser.MultiFieldQueryParser;
import org.apache.lucene.queryParser.QueryParser;
import org.apache.lucene.search.Filter;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.TopDocs;
import org.apache.lucene.search.highlight.Formatter;
import org.apache.lucene.search.highlight.Fragmenter;
import org.apache.lucene.search.highlight.Highlighter;
import org.apache.lucene.search.highlight.QueryScorer;
import org.apache.lucene.search.highlight.Scorer;
import org.apache.lucene.search.highlight.SimpleFragmenter;
import org.apache.lucene.search.highlight.SimpleHTMLFormatter;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.util.Version;
import org.junit.Test;
import com.bin.lucene.utils.File2DocUtils;
/**
* 测试高亮器
* @author Administrator
*
*/
public class HighlighterTest {
Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_35);
String filePath = "D:\\workspace\\myeclipse\\LuceneDemo\\luceneDatassource\\CHANGES.txt";
String indexPath = "D:\\workspace\\myeclipse\\LuceneDemo\\luceneIndex";
@Test
public void test1() throws Exception {
//先查询
String queryStr = "Lucene";
QueryParser parser = new MultiFieldQueryParser(Version.LUCENE_35, new String[]{"name", "content"}, analyzer);
Query query = parser.parse(queryStr);
Filter filter = null;
IndexReader indexReader = IndexReader.open(FSDirectory.open(new File(indexPath)));
IndexSearcher searcher = new IndexSearcher(indexReader);
TopDocs topDocs = searcher.search(query, filter, 10000);
System.out.println("总共有【" + topDocs.totalHits + "】条匹配结果");
List<Document> recordList = new ArrayList<Document>();
Formatter formatter = new SimpleHTMLFormatter("<font color='red'>", "</font>");
Scorer fragmentScorer = new QueryScorer(query);
Highlighter highlighter = new Highlighter(formatter, fragmentScorer);
Fragmenter fragmenter = new SimpleFragmenter(50);
highlighter.setTextFragmenter(fragmenter);
//取出当前页的数据
int pageSize = 20;
int pageNo = 1;
int firstResult = (pageNo-1) * pageSize;
int end = Math.min(pageNo * pageSize, topDocs.totalHits);
System.out.println(firstResult + ":" + end);
for(int i=firstResult; i<end; i++) {
ScoreDoc scoreDoc = topDocs.scoreDocs[i];
int docSn = scoreDoc.doc; //文档内部编号
Document doc = searcher.doc(docSn); //根据文档编号取出文档
//高亮===================
String docContent = doc.get("content");
String hc = highlighter.getBestFragment(analyzer, "content", docContent);
if(hc == null) {
if(docContent.length()>=50) {
hc = docContent.substring(0, 50);
} else {
hc = docContent;
}
}
doc.getField("content").setValue(hc);
//高亮===================
recordList.add(doc);
}
//显示
for(Document doc : recordList) {
File2DocUtils.printDocumentInfo(doc);
}
}
}
分享到:
相关推荐
《Lucene+HighLighter高亮显示实例解析》 在信息技术领域,搜索引擎的构建与优化是至关重要的一环,其中,如何有效地对搜索结果进行高亮显示,以突出关键信息,是提升用户体验的关键因素之一。本篇文章将深入探讨...
lucene-highlighter-3.5.0.jar lucene高亮包
在Lucene中,高亮器(Highlighter)负责完成这项工作。它通过对原始文档内容进行分词,然后对比用户的查询语句,找出匹配的关键词,并对这些关键词进行特殊标记,如加粗、斜体等。 在源码中,我们可以看到`...
《Lucene Highlighter 3.4.0:搜索引擎中的文本高亮工具》 在信息爆炸的时代,搜索引擎成为了我们获取知识的重要途径。Apache Lucene,作为一款高性能、全文本搜索库,为开发者提供了强大的搜索功能。其中,Lucene ...
总的来说,Apache Lucene 4.4.0的Highlighter模块是实现搜索结果高亮的关键工具,它通过一系列精细的组件协作,为用户提供清晰、直观的搜索体验。深入了解和掌握这个模块,对于提升Java应用中的全文检索质量至关重要...
lucene3.0-highlighter.jar lucene3.0的高亮jar包,从lucene3.0源码中导出来的
《Lucene 3.6.2与Highlighter:搜索引擎中的文本高亮技术》 Lucene是一个高度可定制的全文搜索引擎库,广泛应用于各种Java应用程序中,以实现强大的搜索功能。在3.6.2版本中,Lucene提供了一整套功能,包括索引构建...
3. **获取Highlighter**:使用`Highlighter`类,传入Analyzer和Query,初始化高亮器。 4. **获取高亮片段**:调用Highlighter的`highlightField`方法,传入字段名和文档的原始文本,获取高亮后的文本片段。 5. **...
用于编写Lucene高亮摘要的jar包,版本2.0.0,好用。谁用谁知道~~~~
2. **Highlighter类**:通常,高亮器类会接受搜索查询和文档内容作为输入,然后在文档中找到匹配的查询术语,并用特定的样式(如颜色、粗体)标出这些术语。 3. **分词器集成**:为了正确地高亮显示,高亮器需要...
而Highlighter插件则是Lucene中用于高亮显示搜索关键词的部分,它可以帮助用户在大量文本中快速定位和识别搜索结果。 **Lucene.NET** Lucene.NET是一个开源的、高性能的全文搜索引擎库,提供了一整套用于构建搜索...
**SpringBoot+Lucene搜索结果高亮显示** 在现代Web应用程序中,强大的全文搜索引擎功能是不可或缺的,而Apache Lucene正是这样一个高效的、可扩展的开源全文检索库。在这个SpringBoot+Lucene的Demo中,我们将深入...
lucene-highlighter-3.6.0-sources
Lucene提供了Highlighter组件来实现搜索结果的高亮显示。Highlighter根据查询和文档内容生成高亮的片段。这个组件支持多种策略,例如基于TF-IDF的评分策略,以确定哪些词最重要,应该被高亮。 **四、使用步骤** 1. ...
Lucene搜索的内容进行高亮显示。
6. 使用Highlighter高亮搜索结果的关键片段。 7. 实现分页逻辑,根据当前页数计算offset,然后调用search方法获取下一批ScoreDoc。 8. 渲染结果,展示高亮的搜索结果和分页导航。 五、总结 Lucene的高亮显示和分页...
《Lucene5学习之Highlighter关键字高亮》 在信息技术领域,搜索引擎的使用已经变得无处不在,而其中的关键技术之一就是如何有效地突出显示搜索结果中的关键字,这就是我们今天要探讨的主题——Lucene5中的...
通过以上内容,我们可以了解到在Lucene中使用IKAnalyzer进行中文分词和利用Highlighter高亮搜索结果的关键点。这两个工具对于构建一个高效的中文搜索系统至关重要,它们使得用户能够更直观、准确地获取所需信息。
首先,需要创建一个Highlighter实例,然后提供查询解析器、文档和字段的Analyzer,以及高亮样式。Highlighter会分析文本,找到匹配的片段,并返回已标记的HTML字符串。 在实际应用中,你可能需要结合这两者,即根据...
Lucene通过`Highlighter`类来实现高亮显示。`Highlighter`类需要一个`QueryScorer`对象,该对象用于计算文档片段的得分,以及一个`Fragmenter`对象,用于将文本切分为片段。`SimpleHTMLFormatter`则用于将高亮的文本...