ElasticSearch 5.X 搜索并用高亮显示
public List<WOSearchModel> searchOrder(OrderSearchReqVO request) throws Exception{
List<WOSearchModel> woSearchModels = new ArrayList<>();
//设置高亮显示
HighlightBuilder highlightBuilder = new HighlightBuilder().field("*").requireFieldMatch(false);
highlightBuilder.preTags(EagleConst.PRE_TAGS);
highlightBuilder.postTags(EagleConst.POST_TAGS);
//搜索title和orperator和detail
//TODO: 搜索项目名称
QueryStringQueryBuilder queryBuilder = new QueryStringQueryBuilder(request.getKeyWord());
queryBuilder.analyzer(EagleConst.ES_ANALYSER);
queryBuilder.field(EagleConst.ORDER_TITLE).field(EagleConst.ORDER_OPERATOR).field(EagleConst.ORDER_DETAIL);
//搜索
SearchRequestBuilder searchRequestBuilder = eagleTcpClient.getClient().prepareSearch(EagleConst.INDEX)
.setFrom(request.getStart())
.setSize(request.getSize())
.setTypes(EagleConst.TYPE)
.setSearchType(SearchType.DFS_QUERY_THEN_FETCH)
//.setQuery(builder)
.setQuery(queryBuilder)
.highlighter(highlightBuilder)
.setExplain(true); //设置是否按查询匹配度排序
SearchResponse searchResponse = searchRequestBuilder.get();
//获取搜索结果
SearchHits searchHits = searchResponse.getHits();
SearchHit[] hits = searchHits.getHits();
if (hits != null && hits.length != 0){
for (SearchHit hit : hits) {
List<String> highLights = new ArrayList<>();
Map<String, HighlightField> highlightFields = hit.getHighlightFields();
Map<String, Object> source = hit.getSource();
//处理高亮 获取高亮字符串
if (highlightFields != null && highlightFields.size() != 0){
String[] needHighLightFields = new String[]{EagleConst.ORDER_TITLE, EagleConst.ORDER_DETAIL, EagleConst.ORDER_OPERATOR};
for (String needHighLightField : needHighLightFields){
HighlightField titleField = highlightFields.get(needHighLightField);
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(needHighLightField, name.toString());
highLights.add(needHighLightField + ":" + name.toString());
}
}
}
}
WOSearchModel woSearchModel = new WOSearchModel();
woSearchModel.setHighLightTexts(highLights);
OrderModel orderModel = new OrderModel();
BeanUtils.populate(orderModel, source);
woSearchModel.setModel(orderModel);
StringBuilder urlStringBuilder = new StringBuilder();
urlStringBuilder.append(EagleConst.URL_PRE).append("ids=").append(orderModel.getId())
.append("&tenantId=").append(orderModel.getTenantId()).append("&projectId=").append(orderModel.getProjectId());
woSearchModel.setUrl(urlStringBuilder.toString());
woSearchModels.add(woSearchModel);
}
}
return woSearchModels;
}
ElasticSearch 5.X 搜索并用高亮显示的更多相关文章
- 搜索结果高亮显示(不改变html标签)
分类: 代码2010-02-28 13:44 1574人阅读 评论(3) 收藏 举报 htmlinputstring 一.问题的产生 搜索结果高亮显示,在新闻标题,来源之类的地方好做,只需要用st ...
- asp实现关键词不区分大小写搜索并高亮显示
用ASP做搜索很容易,但要实现智能搜索这类就比较累一点,其实任何程序都差不多,主要还是看数据库的处理能力,一般小网站ASP经常跟ACCESS数据库搭配,在这种配置下我们要实现关键词不区分大小写搜索并高 ...
- elasticsearch的rest搜索--- 查询
目录: 一.针对这次装B 的解释 二.下载,安装插件elasticsearch-1.7.0 三.索引的mapping 四. 查询 五.对于相关度的大牛的文档 四. 查询 1. 查询的官网的文档 ...
- elasticsearch实现网站搜索
使用elasticsearch 实现网站搜索,可以支持商品搜索,筛选项过滤搜索 ,价格排序, 打分 筛选项聚合,还有其他综合排序 后续推出搜索人工干预排序,根据销量,好评率,售卖率 进行全方位的搜索实 ...
- Python 和 Elasticsearch 构建简易搜索
Python 和 Elasticsearch 构建简易搜索 作者:白宁超 2019年5月24日17:22:41 导读:件开发最大的麻烦事之一就是环境配置,操作系统设置,各种库和组件的安装.只有它们都正 ...
- CentOS 7.4 下搭建 Elasticsearch 6.3 搜索群集
上个月 13 号,Elasticsearch 6.3 如约而至,该版本和以往版本相比,新增了很多新功能,其中最令人瞩目的莫过于集成了 X-Pack 模块.而在最新的 X-Pack 中 Elastics ...
- 笔记13:Python 和 Elasticsearch 构建简易搜索
Python 和 Elasticsearch 构建简易搜索 1 ES基本介绍 概念介绍 Elasticsearch是一个基于Lucene库的搜索引擎.它提供了一个分布式.支持多租户的全文搜索引擎,它可 ...
- elasticsearch联想加搜索实例
//搜索框具体的ajax如下: <form class="form-wrapper cf"> <img src="__PUBLIC__/Home/img ...
- spring data solr 搜索关键字高亮显示
spring data solr 搜索关键字高亮显示 public Map<String, Object> highSearch(Map searchMap) { Map map = ne ...
随机推荐
- Serial Wire Debugging the STM32 via the Bus Pirate
Serial Wire Debugging the STM32 via the Bus Pirate 2 October 2010 Step 1 - The Bus Pirate Step 2 - D ...
- [Go] defer 语句
Go 还有一些特有的流程控制语句,其中一个就是 defer 语句.该语句用于延迟调用指定的函数,它只能出现在函数的内部,由 defer 关键字以及针对某个函数的调用表达式组成.这里被调用的函数称为 延 ...
- 使用 NuGet 管理我们的程序集 - 预发行版
1.缘起 在我们的项目中.须要引用的组件统一放在一个 Libs 文件夹下.不管对于平台上的公共组件.还是应用模块,都是如此. 假设一个应用模块,比如能源管理(EM).要引用平台提供的公共组件,比如数据 ...
- 使用SIGALRM信号为阻塞操作设置超时
我们经常会遇到为阻塞操作设置超时的问题,比如说阻塞套接字read读取设置10秒超时,其中一个办法就是调用alarm函数,它在指定超时时期产生SIGALRM信号,使得阻塞操作中断. 但其弊端在于: 1. ...
- 一步一步学习ASP.NET 5 (一)-基本概念和环境配置
编者语:时代在变,在csdn开博一年就发了那么的两篇文章.不管是什么原因都认为有愧了.可是今年重心都会在这里发表一些文章,和大家谈谈.NET, 移动跨平台,云计算等热门话题.希望有更好的交流. 好吧言 ...
- Object [object Object] has no method 'live'
用了2个jquery的2个文件: <script src="~/Scripts/jquery-1.10.2.js"></script> <script ...
- Maven 使用了一个标准的目录结构和一个默认的构建生命周期。
Maven 使用了一个标准的目录结构和一个默认的构建生命周期. 约定优于配置 当创建 Maven 工程时,Maven 会创建默认的工程结构.开发者只需要合理的放置文件,而在 pom.xml 中不再需要 ...
- Java泛型中的标记符含义:
Java泛型中的标记符含义: E - Element (在集合中使用,因为集合中存放的是元素) T - Type(Java 类) K - Key(键) V - Value(值) N - Number( ...
- clientX, clientY,offsetX, offsetY,screenX, screenY, x, y
clientX, clientY是鼠标当前相对于网页的位置,当鼠标位于页面左上角时clientX=0, clientY=0: offsetX, offsetY是鼠标当前相对于网页中的某一区域的位置,当 ...
- WordPress主题开发:开启feed功能
开启feed功能 步骤一:在模版文件的<head></head>元素中添加wp_head()函数,且wp_head()函数要放在</head>标签之前,而且紧邻&l ...