博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Elasticsearch关键词高亮检索案例分享
阅读量:5839 次
发布时间:2019-06-18

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

  hot3.png

1.准备工作

参考文档《》导入和配置es客户端

2.创建索引表和初始化数据

通过组件来创建索引表和初始化数据,组件实现本文不做重点介绍:

/** * 创建索引表,并导入高亮检索功能需要的测试数据 */public void initIndiceAndData(){   DocumentCRUD documentCRUD = new DocumentCRUD();   documentCRUD.testCreateIndice();   documentCRUD.testBulkAddDocuments();}

3.高亮检索功能实现

3.1 定义高亮检索dsl

在文件中增加testHighlightSearch配置:

" ], "post_tags": [ "" ], "fields": { "*": {} }, "fragment_size": 2147483647 } }]]>

3.2 编写高亮检索代码

创建检索类-org.bboss.elasticsearchtest.HighlightSearch

在其中定义以下方法

public void highlightSearch() throws ParseException {		//创建加载配置文件的客户端工具,用来检索文档,单实例多线程安全		ClientInterface clientUtil = ElasticSearchHelper.getConfigRestClientUtil(mappath);		//设定查询条件,通过map传递变量参数值,key对于dsl中的变量名称		//dsl中有三个变量		//        condition		//        startTime		//        endTime		Map
params = new HashMap
(); DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); //设置时间范围,时间参数接受long值 params.put("startTime",dateFormat.parse("2017-09-02 00:00:00")); params.put("endTime",new Date()); params.put("condition","喜欢唱歌");//全文检索条件,匹配上的记录的字段值对应的匹配内容都会被高亮显示 //执行查询,demo为索引表,_search为检索操作action ESDatas
esDatas = //ESDatas包含当前检索的记录集合,最多1000条记录,由dsl中的size属性指定 clientUtil.searchList("demo/_search",//demo为索引表,_search为检索操作action "testHighlightSearch",//esmapper/demo.xml中定义的dsl语句 params,//变量参数 Demo.class);//返回的文档封装对象类型 //获取总记录数 long totalSize = esDatas.getTotalSize(); System.out.println(totalSize); //获取结果对象列表,最多返回1000条记录 List
demos = esDatas.getDatas(); for(int i = 0; demos != null && i < demos.size(); i ++){//遍历检索结果列表 Demo demo = demos.get(i); //记录中匹配上检索条件的所有字段的高亮内容 Map
> highLights = demo.getHighlight(); Iterator
>> entries = highLights.entrySet().iterator(); while(entries.hasNext()){ Map.Entry
> entry = entries.next(); String fieldName = entry.getKey(); System.out.print(fieldName+":"); List
fieldHighLightSegments = entry.getValue(); for (Object highLightSegment:fieldHighLightSegments){ /** * 在dsl中通过来标识需要高亮显示的内容,然后传到web ui前端的时候,通过为mark元素添加css样式来设置高亮的颜色背景样式 * 例如: * */ System.out.println(highLightSegment); } } } }

4.运行检索功能

定义junit测试用例:

import org.junit.Test;import java.text.ParseException;public class HighlightSearchTest {	@Test	public void testHighlightSearch() throws ParseException {		HighlightSearch highlightSearch = new HighlightSearch();		highlightSearch.initIndiceAndData();		highlightSearch.highlightSearch();	}	@Test	public void testHighlightSearchOther() throws ParseException {		HighlightSearch highlightSearch = new HighlightSearch();		highlightSearch.initIndiceAndData();		highlightSearch.highlightSearchOther();	}}

在idea或者eclipse中运行测试用例即可,输出检索到的高亮内容信息如下:

name:刘德华454name:刘德华488name:刘德华508name:刘德华518

5.完整的demo实例工程

6.参考文档

7.开发交流

elasticsearch技术交流群:166471282

elasticsearch微信公众号:

bboss微信公众号:bbossgroups

转载于:https://my.oschina.net/bboss/blog/1811233

你可能感兴趣的文章
KVM虚拟机内存超配后-虚拟机内存减半现象分析及解决
查看>>
IP地址之IPv4
查看>>
查看myqsl当前连接数
查看>>
Mysql High Performance:Advanced Features
查看>>
HADOOP入门
查看>>
我的友情链接
查看>>
linux强制卸载挂在目录
查看>>
listview点击item后跳转到详细页面后返回listview数据不显示问题
查看>>
linux下sh文件不能执行解决
查看>>
Mysql DBA 高级运维学习之路-mysql数据库乱码问题
查看>>
设置每天凌晨3点备份文件/var/log/alternatives.log到tmp文件夹
查看>>
视频编码方案之间的比较(HEVC,H.264,MPEG2等)
查看>>
2016-9-20 linux虚拟机重新启动后不能联网的问题
查看>>
Injection Attacks-XML注入
查看>>
Redhat gluster storage(一)
查看>>
『高级篇』docker之DockerSwarm的了解(27)
查看>>
通用peU盘启动盘装win10系统
查看>>
nfs服务共享不成功的解决,内涵nfs***
查看>>
SSH 配置 远程管理主机
查看>>
mount挂载
查看>>