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

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>调查:重庆忠县一桩疑窦重生的受贿案(转载)
--------------------------

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/462803.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

字典的相关函数

#coding:utf-8""" #第一种写法 """ def func(a,b,c,*,d):print(a,b,c)print(d)func(1,2,3,d4)""" #第二种写法 """ def func(*args,b,c,**kwargs):print(args)print(kwargs)print(b,c)# 函数调用处 func(1,2,3,4,…

python实例31[文件夹清理]

使用&#xff1a; foldercleanup.py -d 10 -k c:\test\keepfile.txt c:\test 表示对c:\test目录只保留最近10天的子文件夹和keepfile.txt中指定的子文件夹。 代码&#xff1a; importosimportos.pathimportdatetime defgetOption(): fromoptparse importOptionParser de…

MySQL中的alter table操作之add/modify/drop列

alter table的操作有增加列、删除列和修改列的长度等 create table t1 (c1 int primary key) engine innodb; // 增加一个列c2 alter table t1 add c2 varchar(16379); drop table t1;create table t1 (c1 int primary key, c2 varchar(50)) engine innodb; // 将列c2长度更…

SUSE Linux启动过程执行脚本顺序

网上看到的&#xff0c;备忘 mbr->grub->menu.lst->vmlinuz(linux)->initrd->etc/inittab->/etc/rc.status->/etc/sysconfig/boot->/etc/init.d/boot.d/*->/etc/init.d/boot.local->/etc/rc.d/rc*.d/*->mingetty->login->/etc/profile.…

jdk8 Function

例子 1&#xff1a; // 定义function Function<String, String> fun parm -> { // 这里是定function中的逻辑 return String.valueOf(parm "xing"); };Function<String, String> fun1 parm -> { // 这里是定function中的逻辑 return String.val…

std::unique_ptr<T>与boost::scoped_ptr<T>的特殊性

std::unique_ptr<T>与boost::scoped_ptr<T>的底层实现原理类型&#xff0c;不清楚是谁"借鉴"另一个的实现的&#xff0c;但这不重要。 std::unique_ptr<T>与boost::scoped_ptr<T> 都禁用了拷贝构造和赋值函数&#xff0c;所以不能作为STL容…

winform Outlookbar

控件提供了一种类似Outlook方式的工具条&#xff0c;用来切换各种业务窗口&#xff0c;用上这个控件&#xff0c;肯定为您的程序增色不少。这个控件结合上面介绍的布局控件"WeifenLuo.WinFormsUI.Docking"&#xff08;具体见文章WinForm界面开发之布局控件"Weif…

[leetcode](4.21)4. 有效子数组的数目

给定一个整数数组 A&#xff0c;返回满足下面条件的 非空、连续 子数组的数目&#xff1a; 子数组中&#xff0c;最左侧的元素不大于其他元素。 示例 1&#xff1a; 输入&#xff1a;[1,4,2,5,3] 输出&#xff1a;11 解释&#xff1a;有 11 个有效子数组&#xff0c;分别是&…

Android SDK 2.2 开发环境安装

本文描述 Android SDK 安装过程&#xff0c;包括&#xff1a;Android SDK 2.2, Eclipse 3.5.2(galileo), 和 Andoid Development Tools (ADT) Plugin。一个前提是用户已经安装了 JDK5.0 或 jdk 6.0。并且在系统环境变量设置了 Path 包含 JDK 的 bin 目录。编辑本段 回目录安装 …

std::make_shared<T>/std::make_unique<T>与std::shared_ptr<T>/std::unique_ptr<T>的区别与联系

(1)、std::make_shared<T>与std::make_unique<T>相对于std::shared_ptr<T>/std::unique_ptr<T>只有一次内存的分配 (2)、std::make_shared<T>与std::make_unique<T>不会抛出异常&#xff1b; 此外&#xff0c;std::make_shared<T>是…

Hibernate实体JSONObject化时遇到的问题

2019独角兽企业重金招聘Python工程师标准>>> ###在对Hibernate持久化的对象进行JSON化的时候&#xff0c;出现了几个问题。 第一个是因为在对象中有相互引用&#xff0c;如A->B,B.set->A这样的一对多关系&#xff0c;使得在遍历构造JSON时&#xff0c;产生了死…

截取中英文字符串

代码 functionsubstr(str, len){if(!str ||!len) { return; }//预期计数&#xff1a;中文2字节&#xff0c;英文1字节vara 0;//循环计数vari 0;//临时字串vartemp ;for(i0;i<str.length;i){if(str.charCodeAt(i)>255){//按照预期计数增加2a2; }else{ a; }//如果增加计数…

mysql概述

MySql大致分为三层结构&#xff1a; 第一层&#xff1a;客户端并非MySql所独有&#xff0c;例如&#xff1a;连接处理、授权认证、安全等功能均在这一层处理 第二层&#xff1a;核心服务包括查询解析、分析、优化、缓存、内置函数(比如 : 时间、数学、加密等函数)&#xff0c;所…

mysql 8.0 一条insert语句的具体执行流程分析(二)

继续上一篇文章&#xff1a;mysql 8.0 一条insert语句的具体执行流程分析(一)_一缕阳光的博客-CSDN博客 由于最近换工作一直在试用期内&#xff0c;在拼命的学习、总结中&#xff0c;因此没有时间写文章&#xff0c;今天转正了腾出来时间继续写下一篇文章。mysql 8.0 一条inse…

关于C#序列化结果的长度获取

关于C#序列化的文章真的是好多&#xff0c;但是内容大致一样&#xff0c;主要分四类&#xff1a; BinarySerialize SoapSerialize XmlSerialize JSON.Net和DataContractJsonSerializer最近的一个项目需要使用Socket进行通信&#xff0c;所以必然涉及序列化的问题。使用BinarySe…

团队项目-需求分析

团队作业-需求分析 这个作业属于哪个课程https://edu.cnblogs.com/campus/xnsy/SoftwareEngineeringClass2这个作业的要求在哪里https://edu.cnblogs.com/campus/xnsy/SoftwareEngineeringClass2/homework/3105团队名称快乐小分队这个作业的目标完成英语学习app&#xff0c;尽量…

REMarkerClusterer

2019独角兽企业重金招聘Python工程师标准>>> REMarkerClusterer 创建和管理大量的标记每个缩放级别的集群。REMarkerClusterer 受苹果的照片应用程序在iPhone上的启发&#xff0c;模仿它的行为提供分组和取消分组集群的动画。 转载:http://www.adobex.com/ios/sourc…

mysql 8.0 一条insert语句的具体执行流程分析(三)

代码版本&#xff1a;mysql 8.0.22 编程语言&#xff1a;c && c11 && c14 && c17 上一篇文章&#xff1a;mysql 8.0 一条insert语句的具体执行流程分析(二)_一缕阳光的博客-CSDN博客 主要介绍了存储引擎部分&#xff0c;这个章节主要介绍insert一条…

corosync+openais+pacemaker+web

corosync 和openais 各自都能实现群集功能&#xff0c;但是功能比较简单&#xff0c;要想实现功能齐全、复杂的群集&#xff0c;需要将两者结合起来.corosync 和openais 各自都能实现群集功能&#xff0c;但是功能比较简单&#xff0c;要想实现功能齐全、复杂的群集&#xff0c…

Asp.net MVC 3实例学习之ExtShop(五)——产品详细页

在产品详细页需要使用到tab控件&#xff0c;在jquery的ui包已包含改控件&#xff0c;因而将相应文件链接加到母版页就可以了。 打开“ProductController”文件&#xff0c;在里面添加一个Details操作&#xff0c;代码如下&#xff1a; 1 public ActionResu…