一:前语

1、项目文档 CSDN 专栏:《Elasticsearch 入门和项目实战》

博客路径: https://blog.csdn.net/a767815662/category_9190277.html

2、项目GitHub 地址:

https://github.com/17666555910/SpringBoot-Elasticsearch-Demo

3、项目结构介绍​

--- com.xinghua.elasticsearchservice| --- common       基础依赖| --- dto       展示层| --- model     基础实体类| --- utils     基础工具包| --- service   基础业务包(通用CRUD,批量操作接口)| --- impl   基础业务实现层(通用CRUD,批量操作实现)| --- constans     常量包| --- controller   视图层| --- model        实体| --- service      业务层| --- impl      业务实现层  | --- utils        工具包

4、已实现的ES功能

--- IBaseService| --- getIndexName():               获取ES索引名称| --- getIndexType():               获取ES索引类型| --- getEntityClass():             返回泛型上的Class对象| --- init(List<T> entityList):     初始化数据| --- createEntityEsIndex():        创建索引和映射| --- saveOrUpdate(T entityModel):  新增或修改| --- delete(String id):            删除entity| --- deleteIndex():                删除索引| --- batchInsertOrUpdate(List<T> entityModelList):批量新增/更新以下是高级查询相关的接口| --- getPageRequest(int pageNumber, int pageSize):获取PageRequest对象| --- searchPage(NativeSearchQueryBuilder nativeSearchQueryBuilder, int pageNumber, int pageSize):分页查询| --- searchPageBySort(List<SortDTO> sortDTOList, NativeSearchQueryBuilder nativeSearchQueryBuilder, int pageNumber, int pageSize):分页查询 按照指定字段排序,多个字段按照先后顺序排序| --- searchList(NativeSearchQueryBuilder nativeSearchQueryBuilder):查询操作| --- searchListBySort(List<SortDTO> sortDTOList, NativeSearchQueryBuilder nativeSearchQueryBuilder):查询操作-按照指定字段排序,多个字段按照先后顺序排序| --- query(NativeSearchQueryBuilder nativeSearchQueryBuilder):用于分组查询

5、实例测试类

--- BaseProductEsTest:基础功能测试类
--- ProductEsTest:各种高级查询功能测试类

二:项目部署

1、Spring Data Elasticsearch 简介

Spring Data Elasticsearch是Spring Data项目下的一个子模块。
查看 Spring Data的官网:http://projects.spring.io/spring-data/
Spring Data 的使命是给各种数据访问提供统一的编程接口,不管是关系型数据库(如MySQL),还是非关系数据库(如Redis),或者类似Elasticsearch这样的索引数据库。从而简化开发人员的代码,提高开发效率。

本文主要参考官方文档
https://docs.spring.io/spring-data/elasticsearch/docs/current/reference/html/
https://spring.io/projects/spring-data-elasticsearch

2、导入依赖

<dependency><groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>

3、 配置连接信息

#application.properties
# 配置集群名称,名称写错会连不上服务器,默认elasticsearch
spring.data.elasticsearch.cluster-name=elasticsearch
# 配置集群节点
spring.data.elasticsearch.cluster-nodes=localhost:9300

4、组件介绍

1)ElasticsearchTemplate:框架封装的用于便捷操作Elasticsearch的模板类
2)ElasticsearchRepository:框架封装的用于便捷完成常用操作的工具接口
3)NativeSearchQueryBuilder:用于生成查询条件的构建器,需要去封装各种查询条件
4)QueryBuilder:该接口表示一个查询条件,其对象可以通过QueryBuilders工具类中的方法快速生成各种条件
    4.1)boolQuery():生成bool条件,相当于 “bool”: { }
    4.2)matchQuery():生成match条件,相当于 “match”: { }
    4.3)rangeQuery():生成range条件,相当于 “range”: { }
5)AbstractAggregationBuilder:用于生成分组查询的构建器,其对象通过AggregationBuilders工具类生成
6)Pageable:表示分页参数,对象通过PageRequest.of(页数, 容量)获取
7)SortBuilder:排序构建器,对象通过SortBuilders.fieldSort(字段).order(规则)获取

5、ElasticsearchTemplate 类

该模板类,封装了便捷操作Elasticsearch的模板方法,包括 索引 / 映射 / CRUD 等底层操作和高级操作,该对象用起来会略微复杂些,尤其是对于查询,还需要把查询到的结果自己封装对象。

//该对象已经由SpringBoot完成自动配置,直接注入即可
@Autowired private ElasticsearchTemplate template;

6、ElasticsearchRepository 类

该接口是框架封装的用于操作Elastsearch的高级接口,只要我们自己的写个接口去继承该接口就能直接对Elasticsearch进行CRUD操作。

/***  泛型1:domain的类型 *  泛型2:文档主键类型 该接口直接该给Spring,底层会使用JDK代理的方式创建对象,交给容器管理*/
@Repository
public interface ProductESRepository extends ElasticsearchRepository<User, Long> { // 符合Spring Data规范的高级查询方法
}

一般情况下,ElasticsearchTemplate和ElasticsearchRepository是分工合作的,ElasticsearchRepository已经能完成绝大部分的功能,如果遇到复杂的查询则要使用ElasticsearchTemplate,如多字段分组、高亮显示等。

7、编写domain(实体类)

基类:

package com.xinghua.elasticsearchservice.common.model;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.data.annotation.Id;/*** @Description 基础实体类* @Author 姚广星* @Date 2020/2/28 21:18**/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class EntityEsModel {@Idprivate String id;
}

业务类:

package com.xinghua.elasticsearchservice.model;import com.xinghua.elasticsearchservice.common.model.EntityEsModel;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;
import org.springframework.data.elasticsearch.annotations.Field;
import org.springframework.data.elasticsearch.annotations.FieldType;/*** @Description ES 实体类* Document:配置操作哪个索引下的哪个类型* Id:标记文档ID字段* Field:配置映射信息,如:分词器* @Author 姚广星* @Date 2020/2/24 16:13**/@Data
@NoArgsConstructor
@AllArgsConstructor
@ApiModel(value = "商品ES对象")
@Document(indexName = "product", type = "product")
public class ProductEsModel extends EntityEsModel {/*** 名称*/@ApiModelProperty(value = "名称")@Field(analyzer = "ik_max_word", searchAnalyzer = "ik_max_word", type = FieldType.Text)private String title;/*** 价格*/@ApiModelProperty(value = "价格")private Double price;/*** 产地*/@ApiModelProperty(value = "产地")@Field(analyzer = "ik_max_word", searchAnalyzer = "ik_max_word", type = FieldType.Text)private String origin;/*** 品牌ID*/@ApiModelProperty(value = "品牌ID")@Field(type = FieldType.Keyword)private String brandId;/*** 品牌名称*/@ApiModelProperty(value = "品牌名称")@Field(type = FieldType.Keyword)private String brandName;/*** 关键字*/@ApiModelProperty(value = "关键字")@Field(analyzer = "ik_max_word", searchAnalyzer = "ik_max_word", type = FieldType.Text)private String keyword;public ProductEsModel(String id, String title, Double price, String origin, String brandId, String brandName, String keyword) {super(id);this.title = title;this.price = price;this.origin = origin;this.brandId = brandId;this.brandName = brandName;this.keyword = keyword;}@Overridepublic String toString() {return "ProductEsModel{" +"title='" + title + '\'' +", id=" + super.getId() +", price=" + price +", origin='" + origin + '\'' +", brandId='" + brandId + '\'' +", brandName='" + brandName + '\'' +", keyword='" + keyword + '\'' +'}';}
}

原文链接:https://blog.csdn.net/a767815662/article/details/104662905

Elasticsearch 实战1:ES 项目实战(一)Java 集成 Spring Data Elasticsearch(一):简介及环境搭建相关推荐

  1. Java网络商城项目 SpringBoot+SpringCloud+Vue 网络商城(SSM前后端分离项目)十四(Spring Data Elasticsearch,将数据添加到索引库)

    Java网络商城项目 SpringBoot+SpringCloud+Vue 网络商城(SSM前后端分离项目)十四(Spring Data Elasticsearch,将数据添加到索引库) 一.创建El ...

  2. SpringBoot207 - 集成 spring data elasticsearch

    扯淡: Spring Data Elasticsearch 是spring data对elasticsearch进行的封装.所以在springboot项目中使用es非常方便,直接在 dao 接口继承 ...

  3. Elasticsearch 实战2:ES 项目实战(二):基本操作、批处理、高级查询

    导读:上篇博客讲到了Java 集成 Spring Data Elasticsearch 的简介.环境搭建和domain 实体类的编写,本篇博客将接着讲解 如何用 Java 实现 es 基本操作.批处理 ...

  4. Spring Data Elasticsearch 和 x-pack 用户名/密码验证连接

    为什么80%的码农都做不了架构师?>>>    使用Spring Data Elasticsearch连接elasticsearch时,正常情况下只需要在application.pr ...

  5. linux运维脚本编写,最强Linux自动化运维 Shell高级脚本编程实战 带习题+项目实战案例+全套配置脚本...

    最强Linux自动化运维 Shell高级脚本编程实战 带习题+项目实战案例+全套配置脚本 大家可以通过参考下面的课程学习目录,就会发现单单只从目录上来分析就知道这是一部非常系统的Shell自动化脚本运 ...

  6. Spring Data Elasticsearch聚合搜索实战

    准备环境 1 安装Elasticsearch 5.5.2 (略) 2 使用爬虫爬取厦门人才网相关招聘信息(略) 通过elasticsearch-head插件可以看到我们已经爬取很多数据了 3 在项目中 ...

  7. 视频教程-Python框架Djanggo从入门到实战教程(企业级项目实战)-Python

    Python框架Djanggo从入门到实战教程(企业级项目实战) 多年web开发经验,精通HTML.CSS.JavaScript.HTML5.CSS3等Web前端开发技术,技术纯熟,项目经验丰富.授课 ...

  8. 【javaWeb微服务架构项目——乐优商城day07】——Elasticsearch介绍和安装及使用(安装kibana,安装ik分词器,Spring Data Elasticsearch,高级查询)

    文章目录 0.学习目标 1.Elasticsearch介绍和安装 1.1.简介 1.1.1.Elastic 1.1.2.Elasticsearch 1.1.3.版本 1.2.安装和配置 1.2.1.新 ...

  9. 通过Spring Data Elasticsearch操作ES

    Elasticsearch Elasticsearch (ES)是一个基于Lucene构建的开源.分布式.RESTful 接口全文搜索引擎.Elasticsearch 还是一个分布式文档数据库,其中每 ...

最新文章

  1. python爬虫接单经历_一个Python小白5个小时爬虫经历
  2. CloudStack的部署架构概览
  3. mysql分表方法-----MRG_MyISAM引擎分表法
  4. php中border属性,css中display属性和border属性常遇问题讲解
  5. 自定义的调试函数clr/c++
  6. 游戏使用html签名,关于玩游戏的个性签名
  7. 文献学习(part25)--Regularization Paths for Generalized Linear Models via Coordinate Descent
  8. 为什么说下一个十年的主战场在Serverless?
  9. 神州数码携手IBM与红帽共商“新基建”机遇与挑战
  10. 小博老师精选Java十大CMS ——建站神器
  11. linux aix 环境,Aix5.3安装Bash环境
  12. 大数据Hadoop生态圈-组件介绍
  13. 【web素材】01-10款大气的购物商城网站模板
  14. 【PS】制作透明质感按钮
  15. “智慧城市”建设为何需要“顶层设计”
  16. Kali学习 | 无线渗透:7.5 Gerix 破解 WEP
  17. WIN7+LR11+IE8无法打开的问题解决方法
  18. 输入一个数,判断它是否是素数,如果是素数输出yes,否则输出no
  19. ubuntu 下解压带密码的rar压缩包
  20. matlab三维画图总结

热门文章

  1. oracle11g 未,Oracle11g链接提示未“在本地计算机注册“OraOLEDB.Oracle”解决方法
  2. idea json格式化插件_IDEA常用插件
  3. mysql hash切分_轻松优化MySQL-之数据库切分1
  4. python telnetlib怎么下_Python telnetlib模块使用
  5. SQL注入分类,一看你就明白了。SQL注入点/SQL注入类型/SQL注入有几种/SQL注入点分类
  6. 分治法与递归求科赫曲线
  7. Codeforces Round #158 (Div. 2) A - Adding Digits
  8. 为什么会有这么多种程序设计语言?
  9. 使用Scala的强大api快速加工数据
  10. 【大话设计模式】——简单工厂模式