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 Mapparams = 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
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微信公众号: