1. 要求

环境:

  Lucene 4.1版本/IKAnalyzer 2012 FF版本/mmseg4j 1.9版本
功能:
  1).高亮查询演示

注意:

此篇文章开始,索引目录将不再使用示范目录,而是使用真实的数据。即LUCENE_INDEX_DIR = "C:\\lucene\\data"改到了LUCENE_INDEX_DIR = "C:\\solr\\news\\data\\index"。

2. 实现代码

package com.clzhang.sample.lucene;import java.io.*;import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.TokenStream;
import org.apache.lucene.document.Document;
import org.apache.lucene.index.DirectoryReader;
import org.apache.lucene.index.Term;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.queryparser.classic.QueryParser;
import org.apache.lucene.search.IndexSearcher;import org.apache.lucene.search.Query;
import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.TermQuery;
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.SimpleSpanFragmenter;
import org.apache.lucene.search.highlight.SimpleHTMLFormatter;
import org.apache.lucene.search.highlight.TokenSources;
import org.apache.lucene.util.Version;import com.chenlb.mmseg4j.Dictionary;
import com.chenlb.mmseg4j.analysis.SimpleAnalyzer;
import com.chenlb.mmseg4j.analysis.ComplexAnalyzer;import org.junit.Test;/*** 环境:Lucene 4.1版本/IKAnalyzer 2012 FF版本/mmseg4j 1.9版本* 功能:* 1.高亮查询演示* @author Administrator**/
public class HighlightDemo {// mmseg4j字典路径private static final String MMSEG4J_DICT_PATH = "C:\\solr\\news\\conf";private static Dictionary dictionary = Dictionary.getInstance(MMSEG4J_DICT_PATH);// Lucene索引存放路径 private static final String LUCENE_INDEX_DIR = "C:\\solr\\news\\data\\index";@Testpublic void testHighlighting() throws Exception {// 独立测试Highlighting的代码String text = "台保钓人士拟起诉日当局 感谢大陆海监船驰援";TermQuery query = new TermQuery(new Term("title", "当局"));TokenStream tokenStream = new ComplexAnalyzer(dictionary).tokenStream("title", new StringReader(text));QueryScorer scorer = new QueryScorer(query, "title");Fragmenter fragmenter = new SimpleSpanFragmenter(scorer);Highlighter highlighter = new Highlighter(scorer);highlighter.setTextFragmenter(fragmenter);String hlText = highlighter.getBestFragment(tokenStream, text);System.out.println(hlText);System.out.println("--------------------------");}@Testpublic void doHighlightQuery() throws Exception {// 实例化IKAnalyzer分词器
//        Analyzer analyzer = new IKAnalyzer();// 实例化mmseg4j分词器Analyzer analyzer = new SimpleAnalyzer(dictionary);// 实例化搜索器Directory directory = FSDirectory.open(new File(LUCENE_INDEX_DIR));DirectoryReader reader = DirectoryReader.open(directory);IndexSearcher searcher = new IndexSearcher(reader);final String FIELD_NAME = "webTitle";String keyword = "记者";// 使用QueryParser查询分析器构造Query对象QueryParser qp = new QueryParser(Version.LUCENE_41, FIELD_NAME, analyzer);Query query = qp.parse(keyword);// 搜索相似度最高的5条记录TopDocs hits = searcher.search(query, 5);System.out.println("命中:" + hits.totalHits);// 高亮代码1QueryScorer scorer = new QueryScorer(query, FIELD_NAME);// 下面是指定高亮代码样式的代码SimpleHTMLFormatter simpleHtmlFormatter = new SimpleHTMLFormatter("<EM>", "</EM>"); Highlighter highlighter = new Highlighter(simpleHtmlFormatter, scorer);highlighter.setTextFragmenter(new SimpleSpanFragmenter(scorer));// 输出结果for (ScoreDoc scoreDoc : hits.scoreDocs) {Document doc = searcher.doc(scoreDoc.doc);String title = doc.get(FIELD_NAME);// 高亮代码2TokenStream stream = TokenSources.getAnyTokenStream(searcher.getIndexReader(), scoreDoc.doc, FIELD_NAME, doc, analyzer);String fragment = highlighter.getBestFragment(stream, title);System.out.println(fragment);}reader.close();directory.close();System.out.println("--------------------------");}
}

输出:

台保钓人士拟起诉日<B>当局</B> 感谢大陆海监船驰援
--------------------------
命中:125
浙江杭州一男子涉嫌殴打<EM>记者</EM>被警方抓获
领导快看;<EM>记者</EM>曝光!
[视频]节前聚焦烟花爆竹安全 居民楼内存花炮 <EM>记者</EM>举报无人监管 20130203
老夫看过<EM>记者</EM>关于肖某勒索的调查视频,可以说,“胁从犯罪”的证据极为明显——问题就在于,曾经处理方哦,算是结了案,再次处理,法理上有疑问
<EM>记者</EM>调查:重庆忠县一桩疑窦重生的受贿案(转载)
--------------------------

Lucene4:创建查询,并高亮查询关键词相关推荐

  1. ElasticSerach的简单创建和高亮查询

    ElasticSerach 特点: ​ 高可用 :是指通过设计减少系统不能提供服务的时间,通常的方式为在一个服务器宕机时,我们会自动使用备份服务器进行服务,以保证我们的服务不会停止 ​ 水平扩展 :在 ...

  2. Elasticsearch 入门(1):基本概念,安装教程,索引的创建,查询,删除,主键查询,修改,添加,聚合查询,条件查询

    Elasticsearch 入门 基本概念 The Elastic Stack, 包括 Elasticsearch.Kibana.Beats 和 Logstash(也称为 ELK Stack).能够安 ...

  3. Elasticsearch实现商品搜索(关键字查询 条件筛选 规格过滤 价格区间搜索 分页查询 排序查询 高亮查询)

    Elasticsearch实现商品搜索 商品搜索 1.根据关键字查询 2.条件筛选 2.1 品牌筛选 2.1.1 需求分析 2.1.2 代码实现 2.2 规格过滤 2.2.1 需求分析 2.2.2 代 ...

  4. SpringBoot + Elasticsearch7.6实现简单查询及高亮分词查询

    欢迎关注方志朋的博客,回复"666"获面试宝典 前言 该文章需要提前准备好Elasticsearch7.6以及ik分词器的环境,如果还没准备好的可以看看 https://blog. ...

  5. elasticsearch 关键词查询-实现like查询

    背景:我们项目需要对es索引里面的一个字段进行关键词(中文+英文+数字混合,中文偏多)搜索,相当于关系型数据库的like操作.要实现这个功能,我们首先想到的方式是用*通配符,但是实际应用场景查询语句会 ...

  6. Elasticsearch7+SpringBoot实现简单查询及高亮分词查询

    前言 该文章需要提前准备好Elasticsearch7.6以及ik分词器的环境,如果还没准备好的可以看看 https://blog.csdn.net/weixin_44102992/article/d ...

  7. SpringDataElasticSearch - NativeSearchQueryBuilder过滤聚合高亮查询

    本文要实现的一个功能,根据品牌.分类.规格.价格过滤查询商品的功能,并对查询结果的关键字进行高亮显示.只做后端功能. 本文是以代码驱动,如果看不太懂,可以先复制代码,再慢慢看,注释很详细. 1.引入相 ...

  8. SQL 性能优化梳理 —— 基本概念、创建时优化、查询时优化

    点击上方"朱小厮的博客",选择"设为星标" 后台回复"加群"获取公众号专属群聊入口 来源:rrd.me/fVJw6 前言 本文主要针对的是关 ...

  9. 使用django创建一个单表查询的图书管理系统

    使用django创建一个单表查询的图书管理系统 在settings.py文件中添加(用于连接mysql数据库) DATABASES = {'default': {'ENGINE': 'django.d ...

最新文章

  1. 透过计算机视觉,看看苏伊士运河堵船
  2. cisco switch命令大全
  3. 删除word菜单栏上的adobe comments的终极办法
  4. Ubuntu9.10 server 安装配置 vsftpd2.2.0 ftp服务器 并且 解决 putty 登陆 sshd 显示中文乱码
  5. 一个人会python能做什么_利用Python来预测一个人有没有女朋友!无所不能!
  6. 了解※数据科学※(一)之数据的概念及一个数据科学项目的流程分析
  7. http://jackielieu.blog.51cto.com/5586910/1161944
  8. javascript --- [express+ vue2.x + elementUI]登陆的流程梳理
  9. javascript --- 属性描述符
  10. == 和 equals() 区别
  11. 14.5.5.1 An InnoDB Deadlock Example 一个InnoDB 死锁实例
  12. sql除外语句_SQL除外
  13. java 向下转型运行时错误_java多态和向下转型问题。
  14. 【语音去噪】基于matlab GUI LMS+RLS语音去噪【含Matlab源码 528期】
  15. Pandas DataFrame 函数应用和映射
  16. python网络爬虫入门(三)—— 做个简陋的pixabay 图片下载器
  17. 氚云tERP产品介绍-功能
  18. 物联网专业有哪些含金量高的比赛?
  19. “科林明伦杯”哈尔滨理工大学第十届程序设计竞赛
  20. POJ 1375 Intervals

热门文章

  1. lua __index __newindex upvalue 示例
  2. C++(6)--初识循环while,do-while
  3. 推荐算法--时效性(05)
  4. C语言 共用体/联合体 union
  5. C++ 力扣剑指Offer16-数值的整数次方
  6. 员工价值——如何体现自己价值,如何被自己的领导认可
  7. 给程序员们的工资报价提醒
  8. RuntimeException 和 Exception 区别、异常的子父级关系
  9. 解决:A component required a bean of type ‘javax.jms.Queue‘ that could not be found.
  10. 如何使用postman做接口测试