14. es 整合springboot

参考node

http://www.javashuo.com/article/p-hbqxmonq-eu.htmlspring

1.目的 

经过程序对es 进行增删改查数据库

 

2. 实现过程

2.1 搭建springboot项目

 

 

 

手动加入lombok 的jarjson

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.8</version>
    <scope>provided</scope>
</dependency>

 

2.2 增长

配置数据源springboot

##本项目端口号
server.port=8888

##es所在服务器地址  端口9300
spring.data.elasticsearch.cluster-nodes = localhost:9300

 

2.2.1 实体类 (很重要)

2.2.2 controller层

2.2.3 业务层

 

 

2.2.4 持久层

2.2.5 测试

 

 

es库中效果服务器

2.3 删除

2.3.1 controller

2.3.2 业务层

 

 

2.3.3 测试

 

结果:数据结构

 

2.4 更新

这个操做与保存操做能够公用一个方法  ,当id相同的时候进行修改,不一样的时候进行新增elasticsearch

2.5 查询

2.5.1 基本查询

2.5.1.1 查询全部 不用任何条件

效果:ide

(1)controller层测试

(2) 业务层

这里用到了jackson

 

实现类

 

在处理数据的时候看一下返回的数据结构:

 

2.5.1.2 根据某个字段进行排序

效果

(1) controller层

(2) 业务层

接口:

实现类:

 

2.5.1.3 根据id查询数据

 

(1)controller层

(2) 业务层

接口

实现类:

 

2.5.2  自定义方法查询

2.5.2.1 查询name相等的用户

效果:

代码:

(1)controller层

(2)业务层

接口:

实现类:

(3) 持久层

2.5.2.2 查询年龄相同 工做地点相同的人

效果:

(1)controller

(2) 业务层

接口

实现类:

持久层:

2.5.2.3  自定义方法Or查询 查询年龄=30 或  家住 深圳市的人

效果:

数据库中的数据

 

(1)controller

(2) 业务层

接口:

 

 

实现类:

(3) 持久层

2.5.2.4 自定义方法Between查询  查询年龄<=29 age >=30的人

效果

(1)controller层

(2) 业务层

接口

实现类:

(3)持久层

2.5.2.5  自定义方法like查询  查询名字含有 小的查询

效果:

(1) controller层

(2) 业务层

接口:

实现类:

(3)持久层

 

 

2.5.3 自定义查询

2.5.3.1  matchQuery(会分词  表中字段类型须要keyword) 

注意

 

(1) controller层

(2) 业务层

接口

实现类:

(3) 持久层

不须要写了

2.5.3.2 termQuery(不分词 表中字段类型是text类型)

效果:

状况1:type="text"   "analyzer": "ik_max_word"

状况2:type="text"    只能查询一个字

(1)controller层

(2) 业务层

接口

实现类:

2.5.3.3 fuzzyQuery 模糊查询   @Field(type = FieldType.Text)  类型必须是这个类型

效果:

(1) controller层

(2) 业务层

接口:

实现类:

 

2.5.4 分页查询

效果:

(1)controller层

(2)业务层

接口:

实现类:

 

 

2.5.5 排序

 

 

2.5.6 聚合

 

项目中:

2.5.6.1 按某个字段分组

需求:分组查询每一个班级 学生数量

设计表:对于的统计的字段不能进行分组(type=“keyword”)

(1) controller层

(2) 业务层

接口:

    

 实现类:

//4.6.1 根据某个字段进行分组查询
@Override
public String polymerizationByColumn(String column) throws JsonProcessingException {
    //造一个list用于存放数据
    ArrayList<Map<String, Object>> list = new ArrayList<>();
    NativeSearchQueryBuilder queryBuilder = new NativeSearchQueryBuilder();
    // 不查询任何结果
    queryBuilder.withSourceFilter(new FetchSourceFilter(new String[]{""}, null));
    // 一、添加一个新的聚合,聚合类型为terms,聚合名称为brands,聚合字段为column
    queryBuilder.addAggregation(
            AggregationBuilders.terms(column).field(column));
    // 二、查询,须要把结果强转为AggregatedPage类型
    AggregatedPage<Student> aggPage = (AggregatedPage<Student>) this.esRepository.search(queryBuilder.build());
    // 三、解析
    // 3.一、从结果中取出名为brands的那个聚合,
    // 由于是利用String类型字段来进行的term聚合,因此结果要强转为StringTerm类型
    StringTerms agg = (StringTerms) aggPage.getAggregation(column);
    // 3.二、获取桶
    List<StringTerms.Bucket> buckets = agg.getBuckets();
    // 3.三、遍历
    for (StringTerms.Bucket bucket : buckets) {
        HashMap<String, Object> map = new HashMap<>();
        // 3.四、获取桶中的key,即班级名称
        map.put("class", bucket.getKeyAsString());
        // 3.五、获取桶中的文档数量  既各个班级下学生数量
        map.put("num", bucket.getDocCount());
        //将数据放入list
        list.add(map);
    }
    //数据处理为json
    String jsonData = JacksonUtils.obejectToJson(list);
    return jsonData;
}

 

3.附(源码及参考博客)

连接:https://pan.baidu.com/s/1hgXLhHs75CF35EI3cwnvfw  提取码:eg03 

相关文章
相关标签/搜索