基于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的 ...
随机推荐
- in语句导致查询很慢
1.表A,表B,表C.其中A中的主键是B的外键,一对多的关系:B的主键是C的外键,一对多的关系.最终想查出所有符合条件的C. 原因:开发人员将A表数据先查出来,放到list中,然后用list作为in的 ...
- 股票的历史市盈率查询PE
浦发银行的历史市盈率PE查询:https://androidinvest.com/Stock/History/SH600000/ 白云机场的历史市盈率PE查询:https://androidinves ...
- office转换成pdf
import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import j ...
- [scala] scala 集合(⑧)
1.List 基础操作 2.Set 基础操作 3. TreeSet 排序Set 4. 拉链操作 5. 流 import scala.collection.immutable.TreeSet impor ...
- 联想一体机u盘启动设置
开机启动按f12键,进入后,到最后一项exit把OS Optimized Defaults(操作系统优化的缺省值)改成Disabled(关闭). 再进入到Startup这一项,选择UEFI/Legac ...
- 【代码审计】iZhanCMS_v2.1 前台存储型XSS漏洞分析
0x00 环境准备 iZhanCMS官网:http://www.izhancms.com 网站源码版本:爱站CMS(zend6.0) V2.1 程序源码下载:http://www.izhancms ...
- Redis存读取数据
这一节演示下载.NET中怎样使用Redis存储数据.在.net中比较常用的客户端类库是ServiceStack,看下通过servicestack怎样存储数据. DLL下载:https://github ...
- unity2017.4.0f1使用AS3.0的AndroidSDK遇到的问题
原因: Unity 在编译时会调用 Android SDK tools 中的 android 命令,而在新版本的 Android SDK tools 中,android这个命令已经废弃了,导致 Uni ...
- 这样理解 HTTPS 更容易(Maybe)
摘要:本文尝试一步步还原HTTPS的设计过程,以理解为什么HTTPS最终会是这副模样.但是这并不代表HTTPS的真实设计过程.在阅读本文时,你可以尝试放下已有的对HTTPS的理解,这样更利于“还原”过 ...
- Android学习之位图BitMap
BitMap代表一张位图,扩展名可以是.bmp或者.dib.位图是Windows标准格式图形文件,它将图像定义为由点(像素)组成,每个点可以由多种色彩表示,包括2.4.8.16.24和32位色彩.例如 ...