分词高亮搜索代码

List<A> list = new ArrayList<>();
//设置高亮显示
HighlightBuilder highlightBuilder = new HighlightBuilder().field("*").requireFieldMatch(false);
highlightBuilder.preTags("<em>");
highlightBuilder.postTags("</em>"); QueryStringQueryBuilder queryBuilder = new QueryStringQueryBuilder(keyword);
queryBuilder.field("分词字段"); //搜索
SearchRequestBuilder searchRequestBuilder = elasticsearchTemplate.getClient().prepareSearch(PublicConst.MT_LAW_INDEX_NAME)
.setFrom(开始条数)
.setSize(获取多少条)
.setTypes(数据所在type)
.setSearchType(SearchType.DFS_QUERY_THEN_FETCH)
.setQuery(queryBuilder)
.highlighter(highlightBuilder)
.setExplain(true); //设置是否按查询匹配度排序
SearchResponse searchResponse = searchRequestBuilder.get();
//获取搜索结果
SearchHits searchHits = searchResponse.getHits();
SearchHit[] hits = searchHits.getHits();
page.setTotal(searchHits.totalHits);
// 循环搜索结果
if (hits != null && hits.length != 0) {
for (SearchHit hit : hits) {
Map<String, HighlightField> highlightFields = hit.getHighlightFields();
Map<String, Object> source = hit.getSource();
//处理高亮 获取高亮字符串
if (highlightFields != null && highlightFields.size() != 0) {
HighlightField titleField = highlightFields.get("content");
if (titleField != null) {
Text[] fragments = titleField.fragments();
if (fragments != null && fragments.length != 0) {
StringBuilder name = new StringBuilder();
for (Text text : fragments) {
name.append(text);
}
// 高亮设置完字段
source.put("contentkey", name.toString());
}
}
}
// 组织返回对象
orderModel = new A();
orderModel.setId(Long.parseLong(source.get("id").toString()));
orderModel.setContent(source.get("content").toString());
orderModel.setCode(source.get("code").toString());
list.add(orderModel);
}
}

普通搜索

List<A> list = new ArrayList<>();
SearchRequestBuilder searchRequestBuilder = elasticsearchTemplate.getClient().prepareSearch(PublicConst.MT_LAW_INDEX_NAME);
TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("精确匹配字段", "匹配的值");
searchRequestBuilder = searchRequestBuilder.setQuery(QueryBuilders.boolQuery().must(termQueryBuilder))
.setFrom(分页开始)
.setSize(取多少个)
.addSort("排序字段", SortOrder.ASC);
SearchResponse searchResponse = searchRequestBuilder.execute().actionGet();
//获取搜索结果
SearchHits searchHits = searchResponse.getHits();
page.setTotal(searchHits.totalHits);
SearchHit[] hits = searchHits.getHits();
for (SearchHit hit : hits) {
Map<String, Object> source = hit.getSource();
A orderModel = new A();
orderModel.setId(Long.parseLong(source.get("id").toString()));
orderModel.setContent(source.get("content").toString());
orderModel.setCode(source.get("code").toString());
list.add(orderModel);
}

聚合搜索

List<A> resList = new ArrayList<>();
//封装了获取RestHighLevelClient的方法
Client client = elasticsearchTemplate.getClient();
// 查询的索引
SearchRequest request = new SearchRequest("zuolin_mt_law_hotlaw");
// 构建查询
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
// 设置查询结果的一个别名随便起 , 还有需要聚合的字段(设置一个桶)
searchSourceBuilder.aggregation(AggregationBuilders.terms("classroom_term").field("hotkey"));
request.source(searchSourceBuilder);
ActionFuture<SearchResponse> search = client.search(request);
//获取数据时首先对classroom分桶 , 如果前面设置多个字段分组(多个桶) , 这里需要嵌套for循环来获取
Terms classroomTerm = search.get().getAggregations().get("classroom_term");
for (Terms.Bucket classroomBucket : classroomTerm.getBuckets()) {
System.out.println("classRoom:" + classroomBucket.getKeyAsString() + "count:" + classroomBucket.getDocCount());
A temp = new A();
temp.setHotkey(classroomBucket.getKeyAsString());
temp.setCount(Long.toString(classroomBucket.getDocCount()));
resList.add(temp);
}

ES搜索高亮分词排序聚合搜索的更多相关文章

  1. Compass 更智能的搜索引擎(3)--高亮,排序,过滤以及各种搜索

    要想使得一个搜索系统更加的完美,查询精确度和页面显示算是其中比较重要的两个方面.今天,我们就来谈谈怎么使得我们的搜索系统更加的完美. 关于分词 下载地址 配置 关于高亮 关于排序 原理 冗余字段 使用 ...

  2. es 修改拼音分词器源码实现汉字/拼音/简拼混合搜索时同音字不匹配

    [版权声明]:本文章由danvid发布于http://danvid.cnblogs.com/,如需转载或部分使用请注明出处 在业务中经常会用到拼音匹配查询,大家都会用到拼音分词器,但是拼音分词器匹配的 ...

  3. Elastic Search的聚合搜索

    就是使用ES提供的aggs语法结果,使用DSL搜索的语法,实现聚合数据的统计,查询.ES中,如果新增document数据的时候,对应的index和type不存在,则自动创建. 1 准备源数据 PUT ...

  4. lucene全文搜索之四:创建索引搜索器、6种文档搜索器实现以及搜索结果分析(结合IKAnalyzer分词器的搜索器)基于lucene5.5.3

    前言: 前面几章已经很详细的讲解了如何创建索引器对索引进行增删查(没有更新操作).如何管理索引目录以及如何使用分词器,上一章讲解了如何生成索引字段和创建索引文档,并把创建的索引文档保存到索引目录,到这 ...

  5. (四)Lucene——搜索和相关度排序

    1. 搜索 1.1 创建查询对象的方式 通过Query子类来创建查询对象 Query子类常用的有:TermQuery.NumericRangeQuery.BooleanQuery 特点:不能输入luc ...

  6. 【搜索引擎】 PostgreSQL 10 实时全文检索和分词、相似搜索、模糊匹配实现类似Google搜索自动提示

    需求分析 要通过PostgreSQL实现类似Google搜索自动提示的功能,例如要实现一个查询海量数据中的商品名字,每次输入就提示用户各种相关搜索选项,例如淘宝.京东等电商查询 思路 这个功能可以用 ...

  7. lucene分词器与搜索

    一.分词器 lucene针对不同的语言和虚伪提供了许多分词器,我们可以针对应用的不同的需求使用不同的分词器进行分词.我们需要注意的是在创建索引时使用的分词器与搜索时使用的分词器要保持一致.否则搜索的结 ...

  8. MVC5 + EF6 + Bootstrap3 (11) 排序、搜索、分页

    系列教程:MVC5 + EF6 + Bootstrap3 上一节:MVC5 + EF6 + Bootstrap3 (10) 数据查询页面 源码下载:点我下载 我工作的源码:http://www.jin ...

  9. 记忆化搜索 codevs 2241 排序二叉树

    codevs 2241 排序二叉树 ★   输入文件:bstree.in   输出文件:bstree.out   简单对比时间限制:1 s   内存限制:128 MB [问题描述] 一个边长为n的正三 ...

  10. numpy教程:排序、搜索和计数

    http://blog.csdn.net/pipisorry/article/details/51822775 numpy排序.搜索和计数函数和方法.(重新整合过的) ],, , ], [, , ]] ...

随机推荐

  1. Div的几种选择器

    Div 是一个html标签,一个块级元素(单独显示一行),单独使用没有意义,需要结合CSS来使用,主要用于页面的布局. div选择器: 1.元素选择器: 1 <style> 2 div{ ...

  2. 说说Selenium的几个痛处

    Selenium挺好用,但也有几个不爽的地方: 1. 元素无法点击,因为scroll to element这一招时常不管用 2. 调试慢,一进入调试模式,PyCharm突然变慢, evaluate如同 ...

  3. 发现C++程序中未释放的内存空间

    本篇先后介绍在windows中使用visual studio定位未释放的内存.在linux中使用valgrind定位未释放的内存. Windows+Visual Studio 2015 (企业版) 准 ...

  4. 平台总线模型(注册设备、注册驱动、编写probe函数)

    平台总线模型概念 注册platform设备 struct platform_device结构体 platform_device_register() platform_device_unregiste ...

  5. linux kali 报错Intel VT-x

    报错原因:第一次安装虚拟机intel vt-x 处于禁用状态,没有启用 分析思路:找到 Intel vt - x 位置,并打开 .(intel - x在bios) 解决方法: 联想笔记本为例:进入bi ...

  6. drf从入门到飞升仙界 04

    序列化类常用字段和字段参数 常用字段类 #1 BooleanField BooleanField() #2 NullBooleanField NullBooleanField() #3 CharFie ...

  7. 利用Canal投递MySQL Binlog到Kafka

    https://www.aboutyun.com/thread-27654-1-1.html https://www.cnblogs.com/bigdatalearnshare/p/13832709. ...

  8. ConcurrentHashMap在Java8中的变化

    增加红黑树这个存储结构 在Java8中,为什么要增加红黑树这种数据结构来进行存储,而不是全部使用链表来进行存储呢? 1.因为攻击者可以构造大量具有相同hashCode的内容,使其全部放在同一个列表中, ...

  9. el-table 如果文字过多展示...

    1 <el-table-column label="任务名称" width="120px" align="center" :show- ...

  10. [iOS] 对 UItableView 等界面(ClipsToBounds) 同时使用 圆角和阴影

    展示内容的界面会被 ClipsToBounds = YES(按边缘剪切),但同时需要圆角和阴影效果. 一个界面,ClipsToBounds = YES 之后,阴影会被剪切,不再展示. 感觉只能使用多个 ...