在公共服务集成ElasticSearch进行简单的crud和高级查询

在公共服务集成ElasticSearch进行简单的crud和高级查询

  1. 导入elasticsearch依赖包
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
  1. 配置文件yml,配置ElasticSearch的集群名字 集群节点ES地址,(如果使用了config记住传到云端)
eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:1010/eureka/
  instance:
    prefer-ip-address: true
    instance-id: common-server:1060
spring:
  application:
    name: common-server
  data: #配置ES 集群名字 集群节点ES地址
    elasticsearch:
      cluster-name: elasticsearch
      cluster-nodes: 127.0.0.1:9300 #9200是图形界面端,9300代码端
server:
  port: 1060
  • 3 创建文档对象
package cn.itsource.wyj.doc;

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;

@Document(indexName = "hrm-es",type = "course")//创建文档  索引库 类型
public class Coursedoc {
    @Id
    private Long id;
    //指定字段类型 为text  分词器  搜索器
    @Field(type = FieldType.Text,analyzer = "ik_max_word",searchAnalyzer = "ik_max_word")
    private String name;
    @Field(type = FieldType.Float)
    private float price;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public float getPrice() {
        return price;
    }

    public void setPrice(float price) {
        this.price = price;
    }

    @Override
    public String toString() {
        return "doc{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", price=" + price +
                '}';
    }
}

  • 定义Repository,自定义查询
  • 创建一个类继承ElasticsearchRepository<Coursedoc,Long> 泛型为文档对象,和文档对象id的类型
package cn.itsource.wyj.repository;

import cn.itsource.wyj.doc.Coursedoc;
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
import org.springframework.stereotype.Repository;

@Repository//交给spring管理
public interface CourseElasticsearchRepository extends ElasticsearchRepository<Coursedoc,Long> {

}

进行简单的crud和高级查询

package cn.itsource.wyj;


import cn.itsource.wyj.repository.CourseElasticsearchRepository;
import cn.itsource.wyj.doc.Coursedoc;
import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.sort.FieldSortBuilder;
import org.elasticsearch.search.sort.SortOrder;
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.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.elasticsearch.core.ElasticsearchTemplate;
import org.springframework.data.elasticsearch.core.query.NativeSearchQuery;
import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder;
import org.springframework.test.context.junit4.SpringRunner;

import java.util.List;
import java.util.Optional;

@RunWith(SpringRunner.class)
@SpringBootTest(classes = CommonApplication.class)
public class EsTest {
    @Autowired
    private ElasticsearchTemplate elasticsearchTemplate;

    @Autowired
    private CourseElasticsearchRepository courseElasticsearchRepository;

    @Test
    public void createIndex(){
        //创建索引库
        elasticsearchTemplate.createIndex(Coursedoc.class);
        //文档映射
        elasticsearchTemplate.putMapping(Coursedoc.class);
    }
    //文档添加
    @Test
    public void testDocumentAdd(){
        Coursedoc coursedoc=new Coursedoc();
        for(int i=0; i<20;i++){
            coursedoc.setId((1l+i));
            coursedoc.setName("王大哥");
            coursedoc.setPrice(16+i);
            courseElasticsearchRepository.save(coursedoc);
        }
    }
    //文档获取
    @Test
    public void testFind(){
        Optional<Coursedoc> byId = courseElasticsearchRepository.findById(1l);
        System.out.println(byId.get());

    }
    //文档删除
    @Test
    public void testDelete(){
        courseElasticsearchRepository.deleteById(1l);
        testFind();
    }
    //高级查询
    //需求:查询课程名 name 中包含 java : DSL查询 - must - match
    // 价格 price 在 1000 - 3000 : DSL过滤 - filter - range
    // 每页 10 条,取第一页 ,按照价格倒排
    @Test
    public void test(){
        //构建本地查询bulider
        NativeSearchQueryBuilder nativeSearchQueryBuilder=new NativeSearchQueryBuilder();
        //组合查询
        BoolQueryBuilder boolQueryBuilder=QueryBuilders.boolQuery();
        //添加查询条件  名字带王的
        boolQueryBuilder.must(QueryBuilders.matchQuery("name","王"));
        //价格在20-40间的
        boolQueryBuilder.filter(QueryBuilders.rangeQuery("price").gte(20).lte(30));
        nativeSearchQueryBuilder.withQuery(boolQueryBuilder);
        //按照价格倒叙排列
        nativeSearchQueryBuilder.withSort(new FieldSortBuilder("price").order(SortOrder.DESC));
        //每页 10 条,取第一页
        nativeSearchQueryBuilder.withPageable(PageRequest.of(0,10));
        //创建查询对象 执行查询
        NativeSearchQuery searchQuery=nativeSearchQueryBuilder.build();
        //得到查询结果
        Page<Coursedoc> res = courseElasticsearchRepository.search(searchQuery);
        System.out.println("总条数"+res.getTotalElements());
        System.out.println("总页数"+res.getTotalPages());
        List<Coursedoc> content = res.getContent();//结果
        content.forEach(coursedoc -> {
            System.out.println(coursedoc);
        });

    }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

甜甜掉在星星上

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值