前面讲了分词器,但是我们在搜索的时候是不是还有一个效果就是高亮和一段文本。那么这里我们就来介绍一下Highlighter。
Highlighter:
可以截取一段文本,并且让关键字高亮显示(通过指定前缀和后缀实现,因为是在网页中显示,指定<font color=’red’></font>就会在网页中显示为红色)。
FirstLucene03ByHighlighter.java:
package com.iflytek.lucene;
import java.io.File;
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.index.IndexWriter;
import org.apache.lucene.index.IndexWriterConfig;
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.Directory;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.store.RAMDirectory;
import org.apache.lucene.util.Version;
/**
* @author xudongwang 2012-2-10
*
* Email:xdwangiflytek@gmail.com
*/
public class FirstLucene03ByHighlighter {
/**
* 源文件路径
*/
private String filePath01 = "F:\\Workspaces\\workspaceSE\\BlogDemo\\luceneDatasource\\HelloLucene01.txt";
/**
* 索引路径
*/
private String indexPath = "F:\\Workspaces\\workspaceSE\\BlogDemo\\luceneIndex";
/**
* 分词器,这里我们使用默认的分词器,标准分析器(好几个,但对中文的支持都不好)
*/
private Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_35);
private Directory ramDir = null;
/**
* 搜索
*
* @param queryStr
* 搜索的关键词
* @throws Exception
*/
public void search(String queryStr) throws Exception {
// 1、把要搜索的文本解析为Query对象
String[] fields = { "name", "content" };
QueryParser queryParser = new MultiFieldQueryParser(Version.LUCENE_35, fields, analyzer);
Query query = queryParser.parse(queryStr);
// 2、进行查询
IndexReader indexReader = IndexReader.open(ramDir);
IndexSearcher indexSearcher = new IndexSearcher(indexReader);
Filter filter = null;
TopDocs topDocs = indexSearcher.search(query, filter, 10000);
System.out.println("总共有【" + topDocs.totalHits + "】条匹配的结果");// 注意这里的匹配结果是指文档的个数,而不是文档中包含搜索结果的个数
// 准备高亮器
Formatter formatter = new SimpleHTMLFormatter("<font color='red'>", "</font>");
Scorer scorer = new QueryScorer(query);
Highlighter highlighter = new Highlighter(formatter, scorer);
Fragmenter fragmenter = new SimpleFragmenter(10);// 指定10个字符
highlighter.setTextFragmenter(fragmenter);// 决定是否生成摘要,以及摘要有多长
// 3、取出数据,并打印结果
for (ScoreDoc scoreDoc : topDocs.scoreDocs) {
int docSn = scoreDoc.doc;// 文档内部编号
Document document = indexSearcher.doc(docSn);// 根据文档编号取出相应的文档
// 进行高亮处理
// 返回高亮后的结果,如果当前属性值中没有出现关键字,会返回null
String highlighterStr = highlighter.getBestFragment(analyzer, "content", document.get("content"));
if (highlighterStr == null) {
String content = document.get("content");
int endIndex = Math.min(20, content.length());
highlighterStr=content.substring(0, endIndex);//最多前20个字符
}
document.getField("content").setValue(highlighterStr);
File2Document.printDocumentInfo(document);// 打印出文档信息
}
}
/**
* 优化创建索引,将索引存在在内存和磁盘配合使用
*
* @throws Exception
*/
public void createIndexByYouHua() throws Exception {
File indexFile = new File(indexPath);
Directory fsDir = FSDirectory.open(indexFile);
// 1、启动时,将磁盘中的索引读取到内存中
ramDir = new RAMDirectory(fsDir);
IndexWriterConfig ramConf = new IndexWriterConfig(Version.LUCENE_35, analyzer);
// 运行程序时操作内存中的索引
IndexWriter ramIndexWriter = new IndexWriter(ramDir, ramConf);
Document document = File2Document.file2Document(filePath01);
ramIndexWriter.addDocument(document);
ramIndexWriter.close();
// 2、退出时将内存中的索引保存到磁盘中
IndexWriterConfig fsConf = new IndexWriterConfig(Version.LUCENE_35, analyzer);
IndexWriter fsIndexWriter = new IndexWriter(fsDir, fsConf);
fsIndexWriter.addIndexes(ramDir);// 把另外几个索引库中的所有索引数据合并到当前的索引库中
fsIndexWriter.commit();
// fsIndexWriter.optimize();//对索引文件进行优化,从而减少IO操作
fsIndexWriter.forceMerge(1);
fsIndexWriter.close();
}
public static void main(String[] args) throws Exception {
FirstLucene03ByHighlighter lucene = new FirstLucene03ByHighlighter();
lucene.createIndexByYouHua();
lucene.search("iteye");
}
}
运行结果:
总共有【1】条匹配的结果
name
-->HelloLucene01.txt
content --> in
<font color='red'>iteye</font> blog
path
-->F:\Workspaces\workspaceSE\BlogDemo\luceneDatasource\HelloLucene01.txt
size -->84
|
分享到:
相关推荐
赠送jar包:lucene-highlighter-6.6.0.jar; 赠送原API文档:lucene-highlighter-6.6.0-javadoc.jar; 赠送源代码:lucene-highlighter-6.6.0-sources.jar; 赠送Maven依赖信息文件:lucene-highlighter-6.6.0.pom;...
赠送jar包:lucene-highlighter-7.3.1.jar; 赠送原API文档:lucene-highlighter-7.3.1-javadoc.jar; 赠送源代码:lucene-highlighter-7.3.1-sources.jar; 赠送Maven依赖信息文件:lucene-highlighter-7.3.1.pom;...
赠送jar包:lucene-highlighter-7.7.0.jar; 赠送原API文档:lucene-highlighter-7.7.0-javadoc.jar; 赠送源代码:lucene-highlighter-7.7.0-sources.jar; 赠送Maven依赖信息文件:lucene-highlighter-7.7.0.pom;...
赠送jar包:lucene-highlighter-7.2.1.jar; 赠送原API文档:lucene-highlighter-7.2.1-javadoc.jar; 赠送源代码:lucene-highlighter-7.2.1-sources.jar; 赠送Maven依赖信息文件:lucene-highlighter-7.2.1.pom;...
赠送jar包:lucene-highlighter-7.3.1.jar; 赠送原API文档:lucene-highlighter-7.3.1-javadoc.jar; 赠送源代码:lucene-highlighter-7.3.1-sources.jar; 赠送Maven依赖信息文件:lucene-highlighter-7.3.1.pom;...
lucene-highlighter-3.0.1.jar 还在为找不到jar文件烦心吗,不用了到我空间来有你想要的,持续更新。
赠送jar包:lucene-highlighter-7.7.0.jar; 赠送原API文档:lucene-highlighter-7.7.0-javadoc.jar; 赠送源代码:lucene-highlighter-7.7.0-sources.jar; 赠送Maven依赖信息文件:lucene-highlighter-7.7.0.pom;...
赠送jar包:lucene-highlighter-7.2.1.jar; 赠送原API文档:lucene-highlighter-7.2.1-javadoc.jar; 赠送源代码:lucene-highlighter-7.2.1-sources.jar; 赠送Maven依赖信息文件:lucene-highlighter-7.2.1.pom;...
赠送jar包:lucene-highlighter-6.6.0.jar; 赠送原API文档:lucene-highlighter-6.6.0-javadoc.jar; 赠送源代码:lucene-highlighter-6.6.0-sources.jar; 赠送Maven依赖信息文件:lucene-highlighter-6.6.0.pom;...
lucene-highlighter-4.3.0.jar
lucene-highlighter-2.9.0.jar
使用compass+lucene实现简单的全文检索功能 里面整合了spring2.5、hibernate3.2、struts2.0,是对数据库进行全文检索的一个非常好的demo的所有jar包组合! 对研究基于数据库检索的java开源搜索引擎的朋友有很大的...
实现中文分词的jar包:lucene-highlighter-3.6.1.jar
lucene3.0-highlighter.jar lucene3.0的高亮jar包,从lucene3.0源码中导出来的
lucene-highlighter-3.6.2.jar
《深入解析Lucene高亮显示源码:剖析`lucene-highlighter-2.2.0-src.zip`》 Lucene,作为一个开源全文检索库,以其高效、灵活的特点在信息检索领域广泛应用。在处理搜索结果时,为了提升用户体验,通常会采用高亮...
《Lucene Highlighter 3.4.0:搜索引擎中的文本高亮工具》 在信息爆炸的时代,搜索引擎成为了我们获取知识的重要途径。Apache Lucene,作为一款高性能、全文本搜索库,为开发者提供了强大的搜索功能。其中,Lucene ...
lucene-highlighter-2.3.2.jar lucene-highlighter-2.3.2.jar lucene-highlighter-2.3.2.jar
lucene-highlighter-4.4.0.jar
lucene-highlighter-2.2.0.jarlucene-highlighter-2.2.0.jarlucene-highlighter-2.2.0.jarlucene-highlighter-2.2.0.jarlucene-highlighter-2.2.0.jarlucene-highlighter-2.2.0.jarlucene-highlighter-2.2.0.jar