Lucene查询结果高亮
检索结果高亮
实现效果:
核心代码
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查询结果高亮相关推荐
- SSH + Lucene + 分页 + 排序 + 高亮 模拟简略新闻网站搜索引擎
SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎 任务是实现Struts2 SSH分页浏览新闻.Lucene分页高亮排序搜索新闻这个两个功能. com.zly.inde ...
- lucene查询语法,适用于ELk:kibana查询
lucene查询语法,适用于ELk:kibana查询 Kibana在ELK中扮演着数据可视化角色,用来查询及展示数据: Elasticsearch查询采用的是luncene搜索引擎,其4过滤查询语法和 ...
- Lucene查询语法详解
Lucene查询 Lucene查询语法以可读的方式书写,然后使用JavaCC进行词法转换,转换成机器可识别的查询. 下面着重介绍下Lucene支持的查询: Terms词语查询 词语搜索,支持 单词 和 ...
- 【示例】Lucene查询索引库编程步骤
Lucene查询索引库编程步骤
- lucene 查询示例_高级Lucene查询示例
lucene 查询示例 本文是我们名为" Apache Lucene基础知识 "的学院课程的一部分. 在本课程中,您将了解Lucene. 您将了解为什么这样的库很重要,然后了解Lu ...
- lucene 查询示例_Lucene查询(搜索)语法示例
lucene 查询示例 本文是我们名为" Apache Lucene基础知识 "的学院课程的一部分. 在本课程中,您将了解Lucene. 您将了解为什么这样的库很重要,然后了解Lu ...
- 高级Lucene查询示例
本文是我们名为" Apache Lucene基础知识 "的学院课程的一部分. 在本课程中,您将了解Lucene. 您将了解为什么这样的库很重要,然后了解Lucene中搜索的工作方式 ...
- Lucene 查询中的距离查询(proximity query)
http://chenlinux.com/2016/04/04/lucene-proximity-querystring/ 我们在使用 ELK 的时候,使用 Lucene querystring 语法 ...
- lucene查询原理
lucene查询原理 1. lucene 数据模型 2. lucene 查询过程 3. SkipList 哨兵数组 skipDoc docDeltaBuffer Lucene中使用读取跳表SkipLi ...
- mapbox 添加geojson图层实现属性查询、高亮、地图手势变化等功能
<!DOCTYPE html> <html><head><meta charset="utf-8" /><title>m ...
最新文章
- PCL点云特征描述与提取(2)
- iOS架构篇-4 架构模式MVVM
- java中,字符串和集合判断是否为空
- Python按行输出文件内容具体解释及延伸
- 修改git commit默认触发的编辑器
- Java锁 优先级_详解Java的线程的优先级以及死锁
- RDBMS 与 非RDBMS
- SAP Spartacus OccEndpointsService getUrl方法的实现原理
- Andros系列排爆机器人原理_中国製造2025系列M之二:高档数控机床和机器人
- Bootstrap布局
- python复习题答案_python的复习题和答案合集
- 可怜的 JavaScript,他们说你很怪异,你知道吗?
- linux开启新的一行,linux启动ekp脚本【一行命令重启ekp】
- 软考(一):迎战软考
- 老虎ji 剪枝模拟
- 台式机黑苹果Mac OS Big Sur 11.3.1安装指引
- 一份完整的 IPv6 环境下 DNS 相关测试
- 泰坦尼克号数据挖掘项目实战——Task1 数据分析
- Linux进阶 | 2万字总结最详细的Docker的安装、底层隔离机制和简单使用!建议收藏,持续更新❤
- 传真百科:电子传真邮件客户端