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 

相關文章
相關標籤/搜索