检索结果高亮

实现效果:

核心代码

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);// 创建indexSearcherDirectoryReader 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("<span style=\"color:red;\">", "</span>");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();}}}

结果:

转载于:https://www.cnblogs.com/hainange/p/6153791.html

Lucene查询结果高亮相关推荐

  1. SSH + Lucene + 分页 + 排序 + 高亮 模拟简略新闻网站搜索引擎

    SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎 任务是实现Struts2 SSH分页浏览新闻.Lucene分页高亮排序搜索新闻这个两个功能. com.zly.inde ...

  2. lucene查询语法,适用于ELk:kibana查询

    lucene查询语法,适用于ELk:kibana查询 Kibana在ELK中扮演着数据可视化角色,用来查询及展示数据: Elasticsearch查询采用的是luncene搜索引擎,其4过滤查询语法和 ...

  3. Lucene查询语法详解

    Lucene查询 Lucene查询语法以可读的方式书写,然后使用JavaCC进行词法转换,转换成机器可识别的查询. 下面着重介绍下Lucene支持的查询: Terms词语查询 词语搜索,支持 单词 和 ...

  4. 【示例】Lucene查询索引库编程步骤

    Lucene查询索引库编程步骤

  5. lucene 查询示例_高级Lucene查询示例

    lucene 查询示例 本文是我们名为" Apache Lucene基础知识 "的学院课程的一部分. 在本课程中,您将了解Lucene. 您将了解为什么这样的库很重要,然后了解Lu ...

  6. lucene 查询示例_Lucene查询(搜索)语法示例

    lucene 查询示例 本文是我们名为" Apache Lucene基础知识 "的学院课程的一部分. 在本课程中,您将了解Lucene. 您将了解为什么这样的库很重要,然后了解Lu ...

  7. 高级Lucene查询示例

    本文是我们名为" Apache Lucene基础知识 "的学院课程的一部分. 在本课程中,您将了解Lucene. 您将了解为什么这样的库很重要,然后了解Lucene中搜索的工作方式 ...

  8. Lucene 查询中的距离查询(proximity query)

    http://chenlinux.com/2016/04/04/lucene-proximity-querystring/ 我们在使用 ELK 的时候,使用 Lucene querystring 语法 ...

  9. lucene查询原理

    lucene查询原理 1. lucene 数据模型 2. lucene 查询过程 3. SkipList 哨兵数组 skipDoc docDeltaBuffer Lucene中使用读取跳表SkipLi ...

  10. mapbox 添加geojson图层实现属性查询、高亮、地图手势变化等功能

    <!DOCTYPE html> <html><head><meta charset="utf-8" /><title>m ...

最新文章

  1. PCL点云特征描述与提取(2)
  2. iOS架构篇-4 架构模式MVVM
  3. java中,字符串和集合判断是否为空
  4. Python按行输出文件内容具体解释及延伸
  5. 修改git commit默认触发的编辑器
  6. Java锁 优先级_详解Java的线程的优先级以及死锁
  7. RDBMS 与 非RDBMS
  8. SAP Spartacus OccEndpointsService getUrl方法的实现原理
  9. Andros系列排爆机器人原理_中国製造2025系列M之二:高档数控机床和机器人
  10. Bootstrap布局
  11. python复习题答案_python的复习题和答案合集
  12. 可怜的 JavaScript,他们说你很怪异,你知道吗?
  13. linux开启新的一行,linux启动ekp脚本【一行命令重启ekp】
  14. 软考(一):迎战软考
  15. 老虎ji 剪枝模拟
  16. 台式机黑苹果Mac OS Big Sur 11.3.1安装指引
  17. 一份完整的 IPv6 环境下 DNS 相关测试
  18. 泰坦尼克号数据挖掘项目实战——Task1 数据分析
  19. Linux进阶 | 2万字总结最详细的Docker的安装、底层隔离机制和简单使用!建议收藏,持续更新❤
  20. 传真百科:电子传真邮件客户端

热门文章

  1. (2)css的复合选择器与特性
  2. HTML5基础知识习题 一
  3. java基础学习及总结
  4. 红帽学习笔记[RHCSA] 第一周
  5. SpringBoot学习笔记(15):动态数据源切换
  6. 《修炼之道:.NET开发要点精讲》读书笔记(三)
  7. 【状压DP】OpenJ_POJ - C17K Lying Island
  8. linux pmap命令
  9. Remove Untagged Images From Docker
  10. 【转】如何理解NPV与IRR的区别??