Elasticsearch集成

news/2024/11/17 16:02:45/

1、Spring Data框架集成

1.1、Spring Data 框架介绍

Spring Data 是一个用于简化数据库、非关系型数据库、索引库访问,并支持云服务的开源框架。其主要目标是使得对数据的访问变得方便快捷,并支持 map-reduce 框架和云计算数据服务。 Spring Data 可以极大的简化 JPA(Elasticsearch„)的写法,可以在几乎不用写实现的情况下,实现对数据的访问和操作。除了 CRUD 外,还包括如分页、排序等一些常用的功能。
Spring Data 的官网:https://spring.io/projects/spring-data
image.png
Spring Data 常用的功能模块如下:

  • Spring Data JDBC
  • Spring Data Redis
  • Spring Data Elasticsearch
  • Spring Data Apache Hadoop

1.2、Spring Data Elasticsearch介绍

Spring Data Elasticsearch 基于 spring data API 简化 Elasticsearch 操作,将原始操作Elasticsearch 的客户端 API 进行封装 。Spring Data 为 Elasticsearch 项目提供集成搜索引擎。Spring Data Elasticsearch POJO 的关键功能区域为中心的模型与 Elastichsearch 交互文档和轻松地编写一个存储索引库数据访问层。
官方网站:https://spring.io/projects/spring-data-elasticsearch
image.png

1.3、Spring Data Elasticsearch版本对比

image.png

1.4、框架集成

1.4.1、创建springboot项目

image.png

1.4.2、修改pom.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.3.6.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.deepsea</groupId><artifactId>spring-es</artifactId><version>0.0.1-SNAPSHOT</version><name>SpringEsDemo</name><description>SpringEsDemo</description><properties><java.version>1.8</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-elasticsearch</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><excludes><exclude><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></exclude></excludes></configuration></plugin></plugins></build></project>

1.4.3、修改配置文件application.yml

logging:level:com.deepsea.es.spring: debug
#es服务连接
elasticsearch:host: localhostport: 9200

1.4.4、数据实体类

package com.deepsea.es.spring.model;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;@Data
@NoArgsConstructor
@AllArgsConstructor
@Document(indexName = "shopping", shards = 3, replicas = 1)
public class Product {// 必须有ID,这里的id是全局唯一的标识,等同于es中的“_id"@Idprivate Long id;//商品唯一标识/*** type : 字段数据类型* analyzer : 分词器类型* index : 是否索引(默认:true)* Keyword : 短语,不进行分词*/@Field(type = FieldType.Text, analyzer = "ik_max_word")private String title;//商品名称@Field(type = FieldType.Keyword)private String category;//分类名称@Field(type = FieldType.Double)private Double price;//商品价格@Field(type = FieldType.Keyword, index = false)private String images;//图片地址
}

1.4.5、配置类

  • ElasticsearchRestTemplate 是 spring-data-elasticsearch 项目中的一个类,和其他 spring 项目中的 template类似。
  • 在新版的 spring-data-elasticsearch 中,ElasticsearchRestTemplate 代替了原来的ElasticsearchTemplate。
  • 原因是 ElasticsearchTemplate 基于 TransportClient,TransportClient 即将在 8.x 以后的版本中移除。所 以,我们推荐使用 ElasticsearchRestTemplate。
  • ElasticsearchRestTemplate 基 于 RestHighLevelClient 客户端的。需要自定义配置类,继承AbstractElasticsearchConfiguration,并实现 elasticsearchClient()抽象方法,创建 RestHighLevelClient 对象。
package com.deepsea.es.spring.config;import lombok.Data;
import lombok.Getter;
import lombok.Setter;
import org.apache.http.HttpHost;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestClientBuilder;
import org.elasticsearch.client.RestHighLevelClient;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.elasticsearch.config.AbstractElasticsearchConfiguration;@Configuration
public class ElasticsearchConfig extends AbstractElasticsearchConfiguration {@Value("${elasticsearch.host}")private String host;@Value("${elasticsearch.port}")private Integer port;@Overridepublic RestHighLevelClient elasticsearchClient() {RestClientBuilder builder = RestClient.builder(new HttpHost(host, port));return new RestHighLevelClient(builder);}
}

1.4.6、DAO数据访问对象

package com.deepsea.es.spring.dao;import com.deepsea.es.spring.model.Product;
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
import org.springframework.stereotype.Repository;@Repository
public interface ProductDao extends ElasticsearchRepository<Product, Long> {}

1.4.7、索引操作

package com.deepsea.es.spring;import com.deepsea.es.spring.model.Product;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate;@SpringBootTest
class IndexTests {//注入 ElasticsearchRestTemplate@Autowiredprivate ElasticsearchRestTemplate elasticsearchRestTemplate;//创建索引并增加映射配置@Testpublic void createIndex() {//创建索引,系统初始化会根据实体类自动创建索引System.out.println("创建索引");}@Testpublic void deleteIndex(){boolean flg = elasticsearchRestTemplate.deleteIndex(Product.class);System.out.println("删除索引 = " + flg);}}

1.4.8、文档操作

package com.deepsea.es.spring;import com.deepsea.es.spring.dao.ProductDao;
import com.deepsea.es.spring.model.Product;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.index.query.TermQueryBuilder;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort;import java.util.ArrayList;
import java.util.List;@SpringBootTest
public class DocTests {@Autowiredprivate ProductDao productDao;/*** 新增*/@Testpublic void save() {Product product = new Product();product.setId(2L);product.setTitle("华为手机");product.setCategory("手机");product.setPrice(2999.0);product.setImages("http://www.atguigu/hw.jpg");productDao.save(product);}//修改@Testpublic void update() {Product product = new Product();product.setId(1L);product.setTitle("小米 2 手机");product.setCategory("手机");product.setPrice(9999.0);product.setImages("http://www.atguigu/xm.jpg");productDao.save(product);}//根据 id 查询@Testpublic void findById() {Product product = productDao.findById(1L).get();System.out.println(product);}//查询所有@Testpublic void findAll() {Iterable<Product> products = productDao.findAll();for (Product product : products) {System.out.println(product);}}//删除@Testpublic void delete() {Product product = new Product();product.setId(1L);productDao.delete(product);}//批量新增@Testpublic void saveAll() {List<Product> productList = new ArrayList<>();for (int i = 0; i < 10; i++) {Product product = new Product();product.setId(Long.valueOf(i));product.setTitle("[" + i + "]小米手机");product.setCategory("手机");product.setPrice(1999.0 + i);product.setImages("http://www.atguigu/xm.jpg");productList.add(product);}productDao.saveAll(productList);}//分页查询@Testpublic void findByPageable() {//设置排序(排序方式,正序还是倒序,排序的 id)Sort sort = Sort.by(Sort.Direction.DESC, "id");int currentPage = 0;//当前页,第一页从 0 开始,1 表示第二页int pageSize = 5;//每页显示多少条//设置查询分页PageRequest pageRequest = PageRequest.of(currentPage, pageSize, sort);//分页查询Page<Product> productPage = productDao.findAll(pageRequest);for (Product Product : productPage.getContent()) {System.out.println(Product);}}/*** term 查询* search(termQueryBuilder) 调用搜索方法,参数查询构建器对象*/@Testpublic void termQuery() {TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("title", "小米");Iterable<Product> products = productDao.search(termQueryBuilder);for (Product product : products) {System.out.println(product);}}/*** term 查询加分页*/@Testpublic void termQueryByPage() {int currentPage = 0;int pageSize = 5;//设置查询分页PageRequest pageRequest = PageRequest.of(currentPage, pageSize);TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("title", "小米");Iterable<Product> products = productDao.search(termQueryBuilder, pageRequest);for (Product product : products) {System.out.println(product);}}}

http://www.ppmy.cn/news/244078.html

相关文章

ElasticSearch--1

第一章 ElasticSearch 概念 1-1 ElasticSearch 概念 The Elastic Stack, 包括 Elasticsearch、 Kibana、 Beats 和 Logstash&#xff08;也称为 ELK Stack&#xff09;。能够安全可靠地获取任何来源、任何格式的数据&#xff0c;然后实时地对数据进行搜索、分析和可视化。 Elat…

ElasticSearch介绍

Elastic Stack 介绍 if you没有听说过ElasticSearch&#xff0c;那你一定听说过ELK&#xff08;Elastic Stack&#xff09;&#xff0c;实际上ELK是三款软件的简称&#xff0c;分别是Elasticsearch、Logstash、Kibana组成&#xff0c;在发展的过程中&#xff0c;又有新成员Bea…

Elasticsearch:ES的操作语法

目录 1. Elasticsearch的环境准备2. 基本概念3. 基本操作命令3.1创建索引语法测试使用kibana创建 3.2查看索引设置3.2删除索引3.3创建映射字段3.3查看映射关系3.4字段属性详解3.4.1type3.4.2 index影响字段的索引情况。3.4.3 store 3.5 新增数据3.5.1.随机生成id3.5.2.自定义id…

ElasticSearch分布式搜索框架

目录 一. ElasticSearch背景 1.1 Elasticsearch介绍 1.2 Elasticsearch现状 1.3 Es最佳实践 二. 环境配置安装 2.1 Elasticsearch安装 2.2 配置ElasticSearch-head 2.3 配置Kibana 2.4 IK分词器依赖支持 三. ES功能使用 3.1 索引库操作 3.2 类型(type)及映射(mappi…

Elasticsearch相关 ES

Elastic 详尽文档&#xff1a;https://elasticstack.blog.csdn.net/article/details/102728604 文章目录 倒排索引分词内置的分词器IK分词器ik分词器下载地址&#xff1a;Ik有两种颗粒度的拆分IK 扩展和停用词典远程扩展IK字典1. 在Nginx中配置2.连接mysql3. 接口扩展 拼音分词…

【ElasticSearch01】ElasticSearch入门

目录 1.数据类型2.Elasticsearch是什么3.全文搜索引擎4.Elasticsearch安装5.Restful和JSON6.Postman客户端工具7.倒排索引8.Elasticsearch基本操作8.1 索引操作8.1.1 创建索引8.1.2查询索引1.查询指定索引2.查询所有索引 8.1.3删除索引 8.2 文档操作8.2.1 创建文档8.2.2 创建文…

小米9se开发版系统回刷MIUI稳定版系统

小米9se开发版系统回刷MIUI稳定版系统 第一次写博客&#xff0c;如有错误不详敬请谅解。 之前也是想要抢鲜体验MIUI11&#xff0c;毕竟是从MIUI7用到MIUI11的忠实米粉。然后就去申请了MIUI11内测版&#xff0c;结果很给力&#xff0c;直接就给通过了。然后就在众室友还在看着…

Elasticsearch ES使用总结

Elasticsearch ES 安装入门数据格式索引操作文档操作 映射操作高级查询 官方视频介绍 CSDN官网 个人博客 Elasticsearch 是一个开源的搜索引擎&#xff0c;建立在一个全文搜索引擎库 Apache Lucene™ 基础之上。 一个分布式的实时文档存储&#xff0c;每个字段可以被索引与搜…