Es-SpringData

String-Data

  1. 创建项目,设置包名com.cn.es
  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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.cn.es</groupId>
    <artifactId>es-spring</artifactId>
    <version>1.0</version>

    <parent>
        <artifactId>spring-boot-starter-parent</artifactId>
        <groupId>org.springframework.boot</groupId>
        <version>2.3.6.RELEASE</version>
        <relativePath/>
    </parent>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-test</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot</artifactId>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-autoconfigure</artifactId>
            <version>2.7.13</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
    </dependencies>

</project>

创建application.properties

properties 复制代码
#esIP地址
elasticsearch.host=127.0.0.1
#es端口号码
elasticsearch.port=9200
#设置日志级别为debug
logging.level.com.cn.es=debug

创建启动类

java 复制代码
package com.cn.es;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class SpringDataEsMainApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringDataEsMainApplication.class,args);
    }

}

创建ES的配置类

java 复制代码
package com.cn.es.config;

import lombok.Data;
import org.apache.http.HttpHost;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestClientBuilder;
import org.elasticsearch.client.RestHighLevelClient;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.elasticsearch.config.AbstractElasticsearchConfiguration;

@Data
@ConfigurationProperties(prefix = "elasticsearch")
@Configuration
public class ElasticsearchConfig extends AbstractElasticsearchConfiguration {
    private String host ;
    private Integer port ;

    @Override
    public RestHighLevelClient elasticsearchClient() {
        RestClientBuilder builder = RestClient.builder(new HttpHost(host, port));
        RestHighLevelClient restHighLevelClient = new RestHighLevelClient(builder);
        return restHighLevelClient;
    }
}

创建实体类

java 复制代码
package com.cn.es.domain;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;
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
@AllArgsConstructor
@NoArgsConstructor
@ToString
@Document(indexName = "product",shards = 3,replicas = 1)
public class Product {

    @Id
    private Long id;//商品唯一标识
    @Field(type = FieldType.Text)
    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;//图片地址

}

创建DAO层

java 复制代码
package com.cn.es.dao;

import com.cn.es.domain.Product;
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface ProductDao extends ElasticsearchRepository<Product,Long> {

}

创建test类查询:

java 复制代码
package com.cn.es.test;

import com.cn.es.dao.ProductDao;
import com.cn.es.domain.Product;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

import java.util.ArrayList;
import java.util.List;

@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringDataProductDaoTest {

    @Autowired
    private ProductDao productDao;

    /**
     * 添加任务
     */
    @Test
    public void save () {
        Product product = new Product();
        product.setId(2L);
        product.setTitle("华为手机");
        product.setCategory("手机");
        product.setPrice(2999.0);
        product.setImages("http://hw.jpg");
        productDao.save(product);
    }

    //相同id就是更新
    @Test
    public void update () {
        Product product = new Product();
        product.setId(2L);
        product.setTitle("小米手机");
        product.setCategory("手机");
        product.setPrice(29999.0);
        product.setImages("http://xm.jpg");
        productDao.save(product);
    }


    @Test
    public void findById(){
        Product product = productDao.findById(2L).get();
        System.out.println(product);
    }


    @Test
    public void findAll(){
        Iterable<Product> products = productDao.findAll();
        for (Product product : products)
        {
            System.out.println(product);
        }
    }

    @Test
    public void delete(){
       Product product=new Product();
       product.setId(1L);
       productDao.delete(product);
    }


    //批量新增
    @Test
    public 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.xm.jpg");
            productList.add(product);
        }
    }
    
    
/**
term查询
search(termQueryBuilder)调用搜索方法,参数查询构建器对象
*/

@Test
public void termQuery(){
    
    TermQueryBuilder termQueryBuilder=QueryBuilders.termsQuery("title","小米");
    Iterable<Product> pros = productDao.search(termQueryBuilder);
    for(Product product:pros){
        System.out,printLn(product);
    }
    
}
    
    
    
    
/**
term查询,分页查询
*/
@Test
public void termQueryByPage(){
    int currentPage=0;
    int pageSize=5;
    //设置查询分页
    PageRequest pageRequest = PageRequest.of(currentPage,pageSize);
    TermQueryBuilder termQueryBuilder = QueryBuilders.termsQuery("category","小米");
    Iterable<Product> pros = productDao.search(termQueryBuilder,pageRequest);
    for(Product product:pros){
        System.out,println(product);
    }
    
}


}
相关推荐
诗旸的技术记录与分享7 小时前
Flink-1.19.0源码详解-番外补充3-StreamGraph图
大数据·flink
资讯分享周7 小时前
Alpha系统联结大数据、GPT两大功能,助力律所管理降本增效
大数据·gpt
G皮T9 小时前
【Elasticsearch】深度分页及其替代方案
大数据·elasticsearch·搜索引擎·scroll·检索·深度分页·search_after
TDengine (老段)9 小时前
TDengine STMT2 API 使用指南
java·大数据·物联网·时序数据库·iot·tdengine·涛思数据
用户Taobaoapi201411 小时前
母婴用品社媒种草效果量化:淘宝详情API+私域转化追踪案例
大数据·数据挖掘·数据分析
G皮T11 小时前
【Elasticsearch】检索排序 & 分页
大数据·elasticsearch·搜索引擎·排序·分页·检索·深度分页
飞询14 小时前
Docker 安装 Elasticsearch 9
elasticsearch·docker
小新学习屋15 小时前
Spark从入门到熟悉(篇三)
大数据·分布式·spark
rui锐rui15 小时前
大数据学习2:HIve
大数据·hive·学习
G皮T15 小时前
【Elasticsearch】检索高亮
大数据·elasticsearch·搜索引擎·全文检索·kibana·检索·高亮