基于Spring-Boot框架的Elasticsearch搜索服务器配置
一、相关包maven配置
<!-- https://mvnrepository.com/artifact/org.springframework.data/spring-data-elasticsearch -->
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-elasticsearch</artifactId>
<version>1.3.6.RELEASE</version>
</dependency>
spring-boot 1.3.8.RELEASE能支持配置注解故,elasticsearch的配置可以在 xxx.properties文件中配置
# ELASTICSEARCH (ElasticsearchProperties)
spring.data.elasticsearch.cluster-name=elasticsearch
spring.data.elasticsearch.cluster-nodes=192.9.8.222:9300
spring.data.elasticsearch.repositories.enabled=true
这样可以通过框架自动注入实例化类
@Autowired
private ElasticsearchTemplate elasticsearchTemplate;
二、处理ES返回数据
获取搜索内容:
// 空条件查询默认匹配全部
NativeSearchQueryBuilder nsbIndex = new NativeSearchQueryBuilder();
MatchAllQueryBuilder qbIndex = QueryBuilders.matchAllQuery(); // 设置分页参数
Pageable pageable = new PageRequest(page, limit);
nsbIndex.withPageable(pageable);
nsbIndex.withQuery(qbIndex);
SearchQuery searchQuery = nsbIndex.build();
Page<IndexSearch> pageIndexes = null;
try {
pageIndexes = elasticsearchTemplate.queryForPage(searchQuery, IndexSearch.class, new ElasticsearchResultMapper(heightFields));
} catch (Exception e) {
throw new YMLibWebApplicationException("搜索条件为空,查询全部文献出错,出错原因:" + e.getMessage(), e);
}
List<IndexSearch> indexes = pageIndexes.getContent();
.......
处理个性化设置类,如高亮显示属性:
上图红色部分类是一个个性化设置类,继承重写了SearchResultMapper 的mapResults方法
public class ElasticsearchResultMapper implements SearchResultMapper {
private static Logger log = LoggerFactory.getLogger(ElasticsearchResultMapper.class); private final List<String> heightFields = new ArrayList<String>(); public ElasticsearchResultMapper(){ } public ElasticsearchResultMapper(List<String> heightFields){
this.heightFields.addAll(heightFields);
} @Override
public <T> FacetedPage<T> mapResults(SearchResponse response, Class<T> clazz, Pageable pageable) {
// TODO Auto-generated method stub
// 将返回的结果标记指定的属性高亮显示
List<Object> chunk = setHighlightFieldsForSearchHits(response, heightFields);
// 该搜索条件总共命中多少条数据
long totalHits = response.getHits().totalHits();
// System.out.println("totalHits = "+totalHits);
return new FacetedPageImpl((List<T>) chunk, pageable, totalHits);
} /**
*
* @remark:[]
* @author:hoojjack
* @Description:TODO(对返回的结果设置高亮属性)
*/
public List<Object> setHighlightFieldsForSearchHits(@NotNull SearchResponse response,
@NotNull final List<String> heightFields) {
if (0 == heightFields.size()) {
System.out.println("heightFields不能为空");
return null;
}
List<Object> chunk = new ArrayList<Object>();
for (SearchHit searchHit : response.getHits()) {
// 打印出_score
// System.out.println("searchHitScore = " + searchHit.getScore() + "searchHitSource=" + searchHit.getSource());
if (response.getHits().getHits().length <= 0) {
log.info("未命中搜索结果");
return null;
}
Map<String, Object> entityMap = searchHit.getSource();
if (null == entityMap) {
log.error("搜索返回的结果中无_source属性值");
entityMap = new HashMap<String, Object>();
}
for (String highName : heightFields) {
//枚举类型属性不能标亮显示,标亮显示会多久一些标识,导致找不到相对应的枚举类型
if("literClassfication".equals(highName)){
continue;
}
if (null != searchHit.getHighlightFields().get(highName)) {
Text text[] = searchHit.getHighlightFields().get(highName).fragments();
if (text.length > 0) {
String highValue = searchHit.getHighlightFields().get(highName).fragments()[0].toString();
entityMap.put(highName, highValue);
}
}
}
chunk.add(entityMap);
}
return chunk;
} }
以上只是学习的一部分记录,随着学习的深入,再继续更新!
基于Spring-Boot框架的Elasticsearch搜索服务器配置的更多相关文章
- 基于Spring Boot框架开发的一个Mock
背景:在项目后端接口开发还未完成,我们无法进行自动化接口用例的调试,希望与开发同步完成接口自动化用例的编写及调试,待项目转测后,可以直接跑自动化用例,提高测试效率. 选用的maven + Spring ...
- 手把手写一个基于Spring Boot框架下的参数校验组件(JSR-303)
前言 之前参与的新开放平台研发的过程中,由于不同的接口需要对不同的入参进行校验,这就涉及到通用参数的校验封装,如果不进行封装,那么写出来的校验代码将会风格不统一.校验工具类不一致.维护风险高等其它因素 ...
- 基于Spring Boot的问答系统之一:elasticsearch 7.2的hello world入门
好久没有写代码了,最近想做一个基于spring boot + vue + elasticsearch + NLP(语义相关性)的小系统练练手,系统后面可以成为一个聊天机器人,客服系统的原型等等. 所以 ...
- Spring Boot 框架下使用MyBatis访问数据库之基于XML配置的方式
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.MyBatis 可以使用简单的 XML ...
- 基于Spring Boot、Spring Cloud、Docker的微服务系统架构实践
由于最近公司业务需要,需要搭建基于Spring Cloud的微服务系统.遍访各大搜索引擎,发现国内资料少之又少,也难怪,国内Dubbo正统治着天下.但是,一个技术总有它的瓶颈,Dubbo也有它捉襟见肘 ...
- 基于Spring Boot/Spring Session/Redis的分布式Session共享解决方案
分布式Web网站一般都会碰到集群session共享问题,之前也做过一些Spring3的项目,当时解决这个问题做过两种方案,一是利用nginx,session交给nginx控制,但是这个需要额外工作较多 ...
- step6----->往工程中添加spring boot项目------->修改pom.xml使得我的project是基于spring boot的,而非直接基于spring framework
文章内容概述: spring项目组其实有多个projects,如spring IO platform用于管理external dependencies的版本,通过定义BOM(bill of mater ...
- 基于Spring Boot,使用JPA调用Sql Server数据库的存储过程并返回记录集合
在上一篇<基于Spring Boot,使用JPA操作Sql Server数据库完成CRUD>中完成了使用JPA对实体数据的CRUD操作. 那么,有些情况,会把一些查询语句写在存储过程中,由 ...
- 在Spring Boot框架下使用WebSocket实现消息推送
Spring Boot的学习持续进行中.前面两篇博客我们介绍了如何使用Spring Boot容器搭建Web项目(使用Spring Boot开发Web项目)以及怎样为我们的Project添加HTTPS的 ...
随机推荐
- 服务端API安全解决方案
由于server端和client端需要通信,所以api的安全性需要保证 1.完全开放的 一般只是查询,不能执行增.删.改的操作 裸奔的 <?php public function getGood ...
- faster-rcnn原理及相应概念解释
R-CNN --> FAST-RCNN --> FASTER-RCNN R-CNN: (1)输入测试图像: (2)利用selective search 算法在图像中从上到下提取2000个左 ...
- Hibernate_day02讲义_使用Hibernate完成CRM客户管理中查询所有客户的操作
- scala spray 概念性内容的总结
spray 是基于 akka 的轻量级 scala 库,可用于编写 REST API 服务.了解 spray 的 DSL 后可以在很短的时间内写出一个 REST API 服务,它的部署并不需要 tom ...
- 运行RF测试案例,显示unable to open socket to "localhost:56505" error: [Errno 10061] 错误,且关闭RF卡死的解决办法
问题描述: 执行WEB ui测试案例后,执行请他的测试案例显示unable to open socket to "localhost:56505" error: [Errno 10 ...
- Nginx(五)-- 配置文件之Rewrite
Rewrite支持URL重写 1.常用指令以及语法 1) if指令 if语法: if 空格 (condition) {} 条件: 1. “=” 来判断相等,用于字符的比较 ...
- pyinstaller 将.py生成.exe ----报错 “IndexError: tuple index out of range”
pyinstaller将py打包为exe文件,用pysintaller居然报错 File "c:\anaconda3\lib\site-packages\PyInstaller\depend ...
- python--列表内建函数的方法
List Method Operation list.append(obj) #向列表中添加一个对象obj list.count(obj) #返回一个对象obj 在列表中出现的次数 ...
- 32位win7+vs2008编译mysql 5.6.22源码并安装
以下这部分安装说明是来自http://www.2cto.com/database/201407/316681.html的win7+vs2010源码编译mysql,文章最后会说明用vs2008编译遇见的 ...
- 《计算机图形学》2.1.1 刷新式CRT
图形系统一般使用显示器作为其输出设备. 大部分视频监视器的操作是基于标准的阴极射线管(cathode-ray tube,CRT)设计的,但是也已经出现了其他一些技术,并且固态监视器终究要占据主导地位. ...