当前位置:   article > 正文

spring boot整合elasticsearch实现查询功能_springboot整合es查询数据

springboot整合es查询数据

第一步、添加依赖(注意版本对应关系)根据spring boot版本选择合适的版本

  1. <dependency>
  2. <groupId>org.elasticsearch</groupId>
  3. <artifactId>elasticsearch</artifactId>
  4. <version>7.6.2</version>
  5. </dependency>
  6. <dependency>
  7. <groupId>org.springframework.boot</groupId>
  8. <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
  9. <version>2.3.12.RELEASE</version>
  10. </dependency>

第二步、添加配置

spring:
  elasticsearch:
    rest:
      uris: localhost:9200
      connection-timeout: 1000
      request-timeout: 1000
      read-timeout: 1000
      username: elastic
      password: elastic

 第三步、编码

  1. /**
  2. * 商城商品
  3. * @Author: 陈礼林
  4. * @CreateTime: 2023-04-20 09:28
  5. */
  6. @Document(indexName = "mall_commodity")
  7. @Data
  8. public class MallCommodityDtoRsp {
  9. /**
  10. * 主键
  11. */
  12. @Id
  13. @Field(store = true, index = false, type = org.springframework.data.elasticsearch.annotations.FieldType.Text)
  14. private String id;
  15. /**
  16. * 商品名称
  17. */
  18. private String name;
  19. /**
  20. * 分类名称
  21. */
  22. private String classifyName;
  23. /**
  24. * 分类名称
  25. */
  26. private String attributeName;
  27. /**
  28. * 商品缩略图
  29. */
  30. private String picture;
  31. /**
  32. * 商品规格类型 1单规格 2多规格 3套餐
  33. */
  34. private Integer specType;
  35. /**
  36. * 商品编号
  37. */
  38. private String commodityNo;
  39. /**
  40. * 生产批号
  41. */
  42. private String batchNo;
  43. /**
  44. * 商品类型(1普通,2赠送)
  45. */
  46. private Integer commodityType;
  47. /**
  48. * 销售价格(单位分)
  49. */
  50. private Integer minPrice;
  51. /**
  52. * 销售价格(单位分)
  53. */
  54. private Integer maxPrice;
  55. /**
  56. * 单位
  57. */
  58. private String unit;
  59. /**
  60. * 排序
  61. */
  62. private Integer sort;
  63. /**
  64. * 商品数量
  65. */
  66. private Integer commodityCount;
  67. /**
  68. * 商品状态 1上架 2下架
  69. */
  70. private Integer status;
  71. @Field(store = true, index = false, type = FieldType.Object)
  72. private List<MallCommodityDetailed> detailedList;
  73. }

 同步mysql数据到elasticsearch服务器

  1. /**
  2. * @Description: 同步mysql数据到es定时任务
  3. * @Author: 陈礼林
  4. * @CreateTime: 2024-03-16 10:56
  5. */
  6. @Slf4j
  7. @Component
  8. public class CommoditySyncEsTask {
  9. @Resource
  10. private MallCommodityService service;
  11. @Resource
  12. private ElasticsearchRestTemplate elasticsearchRestTemplate;
  13. @XxlJob("commoditySyncEsHandler")
  14. public void commoditySyncEs(){
  15. log.info("开始执行:商品同步定时任务");
  16. MallCommodityDtoPageReq req = new MallCommodityDtoPageReq();
  17. List<MallCommodityDtoRsp> records = service.page(req).getRecords();
  18. if (ListUtil.isNotNull(records)) {
  19. elasticsearchRestTemplate.save(records);
  20. }
  21. log.info("执行结束:商品同步定时任务");
  22. }
  23. }
  1. /**
  2. * 商城-商品表控制器
  3. *
  4. * @author 陈礼林
  5. * @date 2022-04-12 14:39:41
  6. */
  7. @RestController
  8. @RequestMapping("/mmServer/mall/commodity")
  9. public class MallCommodityController {
  10. @Resource
  11. private ElasticsearchRestTemplate elasticsearchRestTemplate;
  12. /**
  13. * 分页
  14. *
  15. * @param req 分页参数
  16. * @return 查询结果
  17. */
  18. @PostMapping("/page")
  19. public R page(@RequestBody MallCommodityDtoPageReq req){
  20. //查询条件
  21. // 查询全部数据
  22. // QueryBuilder queryBuilder = QueryBuilders.matchAllQuery();
  23. // 精确查询 =
  24. // QueryBuilder queryBuilder = QueryBuilders.termQuery("name", "lisi");
  25. // 精确查询 多个 in
  26. // QueryBuilder queryBuilder = QueryBuilders.termsQuery("name", "张三", "lisi");
  27. // match匹配,会把查询条件进行分词,然后进行查询,多个词条之间是 or 的关系,可以指定分词
  28. // QueryBuilder queryBuilder = QueryBuilders.matchQuery("name", "张三");
  29. // QueryBuilder queryBuilder = QueryBuilders.matchQuery("name", "张三").analyzer("ik_max_word");
  30. // match匹配 查询多个字段
  31. // QueryBuilder queryBuilder = QueryBuilders.multiMatchQuery("男", "name", "sex");
  32. // fuzzy 模糊查询,返回包含与搜索字词相似的字词的文档。
  33. // QueryBuilder queryBuilder = QueryBuilders.fuzzyQuery("name","lisx");
  34. // prefix 前缀检索
  35. // QueryBuilder queryBuilder = QueryBuilders.prefixQuery("name","张");
  36. // wildcard 通配符检索
  37. // QueryBuilder queryBuilder = QueryBuilders.wildcardQuery("name","张*");
  38. // regexp 正则查询
  39. // QueryBuilder queryBuilder = QueryBuilders.regexpQuery("name", "(张三)|(lisi)");
  40. // boost 评分权重,令满足某个条件的文档的得分更高,从而使得其排名更靠前。
  41. // queryBuilder.boost(2);
  42. // 多条件构建
  43. BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery();
  44. // 并且 and
  45. // queryBuilder.must(QueryBuilders.termQuery("name", "张三"));
  46. if (req.getSpecType() != null) {queryBuilder.must(QueryBuilders.termQuery("specType", req.getSpecType()));}
  47. if (req.getName() != null) {queryBuilder.should(QueryBuilders.fuzzyQuery("name", req.getName()));}
  48. // 或者 or
  49. // queryBuilder.should(QueryBuilders.fuzzyQuery("name", "测试"));
  50. // queryBuilder.should(QueryBuilders.termQuery("name", "lisi"));
  51. // 不等于,去除
  52. // queryBuilder.mustNot(QueryBuilders.termQuery("name", "lisi"));
  53. // 过滤数据
  54. // queryBuilder.filter(QueryBuilders.matchQuery("name", "张三"));
  55. // 范围查询
  56. /*
  57. gt 大于 >
  58. gte 大于等于 >=
  59. lt 小于 <
  60. lte 小于等于 <=
  61. */
  62. // queryBuilder.filter(new RangeQueryBuilder("age").gt(10).lte(50));
  63. // 构建分页,page 从0开始
  64. Pageable pageable = PageRequest.of(req.getPageNumber(), req.getPageSize());
  65. Query query = new NativeSearchQueryBuilder()
  66. .withQuery(queryBuilder)
  67. .withPageable(pageable)
  68. //排序
  69. // .withSort(SortBuilders.fieldSort("_score").order(SortOrder.DESC))
  70. //投影
  71. // .withFields("name")
  72. .build();
  73. SearchHits<MallCommodityDtoRsp> search = elasticsearchRestTemplate.search(query, MallCommodityDtoRsp.class);
  74. return R.ok(search.getSearchHits());
  75. // return R.ok(service.page(req));
  76. }
  77. /**
  78. * 通过id集合查询列表
  79. *
  80. * @param id id
  81. * @return 查询结果
  82. */
  83. @PostMapping("/get")
  84. public R<MallCommodityDtoRsp> get(@Param("id") Long id){
  85. MallCommodityDtoRsp search = elasticsearchRestTemplate.get(id.toString(),MallCommodityDtoRsp.class);
  86. return R.ok(search);
  87. }
  88. }

 

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

闽ICP备14008679号