当前位置:   article > 正文

Springboot 快速集成 ES_springboot es集成

springboot es集成

 1、Springboot 官网给出的版本选择标准

2、选择版本依赖

我的 elasticsearch 服务版本为 7.17.13,所以 springboot 版本我选用 2.7.10

  1. <dependency>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-dependencies</artifactId>
  4. <version>2.7.10</version>
  5. <type>pom</type>
  6. <scope>import</scope>
  7. </dependency>

客户端版本选择 springboot 默认版本 

  1. <dependency>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
  4. </dependency>

添加配置文件

  1. spring:
  2. elasticsearch:
  3. uris: http://localhost:9200
  4. username: elastic
  5. password: admin123

对应的配置类:org.springframework.boot.autoconfigure.elasticsearch.ElasticsearchProperties

ps: spring.elasticsearch.rest 的配置方式从 springboot 2.6.0 起已弃用,将在3.0.0中移除,不推荐使用

3、实现简单的增删改查

a、继承 ElasticsearchRepository<T, ID> 接口,使用模版方法或自定义方法
  1. @Repository
  2. public interface SystemConfigRepository extends ElasticsearchRepository<SystemConfig, String> {
  3. SystemConfig findByBizAndCodeAndKey(String biz, String appCode, String ruleKey);
  4. @Query("{\"bool\": {\"must\": [{\"match\": {\"appCode\": \"?0\"}}," +
  5. "{\"match\": {\"ruleKey\": \"?1\"}}]}}")
  6. SystemConfig findByCondition(String appCode, String ruleKey);
  7. }
基于命名约定

查询方法根据方法的命名自动生成,方法名中的关键字和字段名称将被解析为查询条件。 常用的命名约定如下:

  • findBygetByqueryBy:表明查询方法的开始。
  • 属性名称:指定要匹配的字段名。
  • AndOr:用于连接多个条件。
  • InNotIn:用于查询字段值在给定集合中或不在给定集合中的记录。
  • IsEquals:用于查询字段是否等于给定值的记录。
  • Like:用于查询字段模糊匹配的记录。
  • GreaterThanLessThan:用于查询字段大于或小于给定值的记录。
  • OrderBy:用于指定排序字段
基于 @Query 注解

        在查询方法上直接指定 Elasticsearch 查询语句,可以使用 Elasticsearch 查询 DSL 编写复杂的查询逻辑,并使用 SpEL 表达式引用方法参数或其他变量。

  • 字符串查询
  1. @Query("{\"match\": {\"field\": \"value\"}}")
  2. List<YourEntity> findByCustomQuery();
  • 参数绑定
  1. @Query("{\"match\": {\"field\": \"?0\"}}")
  2. List<YourEntity> findByValue(String value);
  • 布尔查询
  1. // 使用布尔查询可以组合多个查询条件,例如 must、should、must_not 等
  2. @Query("{\"bool\": {\"must\": [{\"match\": {\"field1\": \"value1\"}}," +
  3. "{\"match\": {\"field2\": \"value2\"}}]}}")
  4. List<YourEntity> findByCustomQuery();
  • 范围查询
  1. @Query("{\"range\": {\"age\": {\"gte\": 18, \"lte\": 30}}}")
  2. List<YourEntity> findByAgeRange();
  •  排序查询
  1. @Query("{\"match_all\": {}}")
  2. List<YourEntity> findAllByOrderByFieldAsc();
b、注入 ElasticsearchOperations 操作类
  1. @Resource
  2. private ElasticsearchOperations esOperations;
  3. public List<AppInfoBO> getMonitorAppList() {
  4. SystemConfig systemConfig = getAppInfo();
  5. Criteria criteria = new Criteria(SystemConfig.BIZ).is(systemConfig.getBiz())
  6. .and(SystemConfig.CODE).is(systemConfig.getCode())
  7. .and(SystemConfig.STATUS).is(systemConfig.getStatus());
  8. // 时间倒序
  9. CriteriaQuery criteriaQuery = new CriteriaQuery(criteria);
  10. criteriaQuery.addSort(Sort.by(Sort.Direction.DESC,SystemConfig.CREATED_TIME));
  11. SearchHits<SystemConfig> searchHits = esOperations.search(criteriaQuery, SystemConfig.class);
  12. // 转换成 map
  13. return searchHits.stream().map(searchHit -> {
  14. SystemConfig systemConfigES = searchHit.getContent();
  15. return new AppInfoBO(systemConfigES.getKey(), (String) systemConfigES.getValue());
  16. }).collect(Collectors.toList());
  17. }

至此执行单元测试即可完成 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/神奇cpp/article/detail/785785
推荐阅读
相关标签
  

闽ICP备14008679号