ES搜索高亮分词排序聚合搜索
分词高亮搜索代码
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搜索高亮分词排序聚合搜索的更多相关文章
- Compass 更智能的搜索引擎(3)--高亮,排序,过滤以及各种搜索
要想使得一个搜索系统更加的完美,查询精确度和页面显示算是其中比较重要的两个方面.今天,我们就来谈谈怎么使得我们的搜索系统更加的完美. 关于分词 下载地址 配置 关于高亮 关于排序 原理 冗余字段 使用 ...
- es 修改拼音分词器源码实现汉字/拼音/简拼混合搜索时同音字不匹配
[版权声明]:本文章由danvid发布于http://danvid.cnblogs.com/,如需转载或部分使用请注明出处 在业务中经常会用到拼音匹配查询,大家都会用到拼音分词器,但是拼音分词器匹配的 ...
- Elastic Search的聚合搜索
就是使用ES提供的aggs语法结果,使用DSL搜索的语法,实现聚合数据的统计,查询.ES中,如果新增document数据的时候,对应的index和type不存在,则自动创建. 1 准备源数据 PUT ...
- lucene全文搜索之四:创建索引搜索器、6种文档搜索器实现以及搜索结果分析(结合IKAnalyzer分词器的搜索器)基于lucene5.5.3
前言: 前面几章已经很详细的讲解了如何创建索引器对索引进行增删查(没有更新操作).如何管理索引目录以及如何使用分词器,上一章讲解了如何生成索引字段和创建索引文档,并把创建的索引文档保存到索引目录,到这 ...
- (四)Lucene——搜索和相关度排序
1. 搜索 1.1 创建查询对象的方式 通过Query子类来创建查询对象 Query子类常用的有:TermQuery.NumericRangeQuery.BooleanQuery 特点:不能输入luc ...
- 【搜索引擎】 PostgreSQL 10 实时全文检索和分词、相似搜索、模糊匹配实现类似Google搜索自动提示
需求分析 要通过PostgreSQL实现类似Google搜索自动提示的功能,例如要实现一个查询海量数据中的商品名字,每次输入就提示用户各种相关搜索选项,例如淘宝.京东等电商查询 思路 这个功能可以用 ...
- lucene分词器与搜索
一.分词器 lucene针对不同的语言和虚伪提供了许多分词器,我们可以针对应用的不同的需求使用不同的分词器进行分词.我们需要注意的是在创建索引时使用的分词器与搜索时使用的分词器要保持一致.否则搜索的结 ...
- MVC5 + EF6 + Bootstrap3 (11) 排序、搜索、分页
系列教程:MVC5 + EF6 + Bootstrap3 上一节:MVC5 + EF6 + Bootstrap3 (10) 数据查询页面 源码下载:点我下载 我工作的源码:http://www.jin ...
- 记忆化搜索 codevs 2241 排序二叉树
codevs 2241 排序二叉树 ★ 输入文件:bstree.in 输出文件:bstree.out 简单对比时间限制:1 s 内存限制:128 MB [问题描述] 一个边长为n的正三 ...
- numpy教程:排序、搜索和计数
http://blog.csdn.net/pipisorry/article/details/51822775 numpy排序.搜索和计数函数和方法.(重新整合过的) ],, , ], [, , ]] ...
随机推荐
- 钉钉群机器人群发[ PHP ]
// secret 机器人设置 - 加签秘钥 // access_token 机器人设置 - Webhook带此参数 // message 机器人设置- 关键词设置的内容需要和message一致 pu ...
- tiktok运营工具
1.自信点!这就是TikTok最全运营工具合集! - 知乎 (zhihu.com) 2.骄傲的和大家说!这就是TikTok最全运营工具合集! - 知乎 (zhihu.com) 3.如何批量去水印下载抖 ...
- bladex 通用日志不入库,日志无法使用
公司最近要记录操作日志,然后用的是bladex脚手架.想起来刚好有自带的日志管理功能,然后就很happy的将日志功能授权给了管理员. 也就是那几个通用日志.接口日志.错误日志. 结果人傻了,根本不会记 ...
- 常用软件版本记录 lisoaring
操作系统 windows XP(2014年4月8日) windows 7(2020年1月14日终止支持) wiindows 10 Internet Explorer 1995-20220507 Fla ...
- gin web 2
routers/router.go package routers import ( "github.com/gin-gonic/gin" "gin-blog/pkg/s ...
- dendrogram
https://ww2.mathworks.cn/help/stats/dendrogram.html
- 2022-04-18内部群每日三题-清辉PMP
1.在为一个有预算限制的项目生成状态报告时,项目经理发现该项目比进度计划落后一周.若要将项目拉回正轨,项目经理应该怎么做? A.重新分配关键路径活动的团队成员. B.向项目发起人要求额外的时间. C. ...
- vue-webpack代理
baseUrl 改为 '/api'
- kvm介绍(1)
- BZOJ1008 [HNOI2008]越狱 (快速幂,组合)
题目大意 求\(m\)种数字组成的长度为\(n\)的序列的种数,序列中至少有一段连续的数字 分析 用可重排列的种数减去,相邻数字互不相同的序列种数 考虑相邻互不相同,第一个元素有\(m\)种可能,后面 ...