博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Lucene查询结果高亮
阅读量:6696 次
发布时间:2019-06-25

本文共 3657 字,大约阅读时间需要 12 分钟。

检索结果高亮对于用户的体验度和友好度非常重要,可以快速标记出用户检索对关键词。本例中的索引仍使用上一篇博客()中创建的索引,代码高亮参考了。

实现效果:

这里写图片描述

核心代码

package ucas.ir.lucene;import java.io.File;import java.io.IOException;import javax.print.Doc;import org.apache.lucene.analysis.Analyzer;import org.apache.lucene.analysis.TokenStream;import org.apache.lucene.analysis.core.KeywordAnalyzer;import org.apache.lucene.analysis.standard.StandardAnalyzer;import org.apache.lucene.document.Document;import org.apache.lucene.index.DirectoryReader;import org.apache.lucene.index.IndexWriter;import org.apache.lucene.queryparser.classic.QueryParser;import org.apache.lucene.search.IndexSearcher;import org.apache.lucene.search.Query;import org.apache.lucene.search.TopDocs;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.SimpleHTMLFormatter;import org.apache.lucene.search.highlight.SimpleSpanFragmenter;import org.apache.lucene.search.highlight.TokenSources;import org.apache.lucene.store.Directory;import org.apache.lucene.store.FSDirectory;import org.apache.lucene.util.Version;import org.wltea.analyzer.lucene.IKAnalyzer;public class IndexSearch {    public static void main(String[] args) {        Directory directory = null;        try {            File indexpath = new File("/Users/yp/Documents/workspace/UCASIR/WebContent/index");            if (indexpath.exists() != true) {                indexpath.mkdirs();            }            // 设置要查询的索引目录            directory = FSDirectory.open(indexpath);            // 创建indexSearcher            DirectoryReader dReader = DirectoryReader.open(directory);            IndexSearcher searcher = new IndexSearcher(dReader);            // 设置分词方式            Analyzer analyze2 = new StandardAnalyzer(Version.LUCENE_43);// 标准分词            Analyzer analyzer = new IKAnalyzer();            // 设置查询域            String field="news_title";            QueryParser parser = new QueryParser(Version.LUCENE_43, field, analyzer);            // 查询字符串            Query query = parser.parse("阿法狗");            QueryScorer scorer=new QueryScorer(query,field);            SimpleHTMLFormatter fors=new SimpleHTMLFormatter("", "");            Highlighter highlighter=new Highlighter(fors, scorer);            System.out.println("query:" + query.toString());            // 返回前10条            TopDocs topDocs = searcher.search(query, 10);            if (topDocs != null) {                System.out.println("符合条件第文档总数:" + topDocs.totalHits);                for (int i = 0; i < topDocs.scoreDocs.length; i++) {
Document doc = searcher.doc(topDocs.scoreDocs[i].doc); TokenStream tokenStream=TokenSources.getAnyTokenStream(searcher.getIndexReader(), topDocs.scoreDocs[i].doc, field, analyzer); Fragmenter fragment=new SimpleSpanFragmenter(scorer); highlighter.setTextFragmenter(fragment); //高亮news_title域 String str=highlighter.getBestFragment(tokenStream, doc.get("news_title"));//获取高亮的片段,可以对其数量进行限制 System.out.println("高亮title:"+str); tokenStream=TokenSources.getAnyTokenStream(searcher.getIndexReader(), topDocs.scoreDocs[i].doc, "news_summary", analyzer); str=highlighter.getBestFragment(tokenStream, doc.get("news_summary"));//获取高亮的片段,可以对其数量进行限制 System.out.println("高亮summary:"+str); } } directory.close(); dReader.close(); } catch (Exception e) { e.printStackTrace(); } }}

结果:

这里写图片描述

你可能感兴趣的文章
如何对web.config进行加密和解密
查看>>
python(26)查看文件的大小
查看>>
【CDN】域名无法访问,ping不到,tracert不到
查看>>
SVG动画
查看>>
Atititi tesseract使用总结
查看>>
转】MyEclipse使用总结——在MyEclipse中设置jsp页面为默认utf-8编码
查看>>
简记用ArcGIS处理某项目需求中数据的步骤
查看>>
github 开源 代码 学习 集合(转载)
查看>>
[Intel Edison开发板] 02、Edison开发板入门
查看>>
学历是铜牌,能力是银牌,人脉是金牌,思维是王牌
查看>>
SQL中的多表查询,以及JOIN的顺序重要么?
查看>>
项目开发容易出错情况统计
查看>>
sqlite创建表
查看>>
解决larave-dompdf中文字体显示问题
查看>>
C# 指定ip段生成ip地址
查看>>
C# where用法解析
查看>>
javascript时间戳和日期字符串相互转换
查看>>
ubuntu install wiznote
查看>>
EF CodeFirst 如何通过配置自动创建数据库<当模型改变时>
查看>>
系统移植的四大步骤
查看>>