14. es 整合springboot
2019獨角獸企業重金招聘Python工程師標準>>>
1.目的?
通過程序對es 進行增刪改查
?
2. 實現過程
2.1 搭建springboot項目
?
?
?
手動加入lombok 的jar
<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.8</version><scope>provided</scope> </dependency>?
2.2 增加
配置數據源:
##本項目端口號 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相同的時候進行修改,不同的時候進行新增
2.5 查詢
2.5.1 基本查詢
2.5.1.1 查詢所有 不用任何條件
效果:
(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));// 1、添加一個新的聚合,聚合類型為terms,聚合名稱為brands,聚合字段為columnqueryBuilder.addAggregation(AggregationBuilders.terms(column).field(column));// 2、查詢,需要把結果強轉為AggregatedPage類型AggregatedPage<Student> aggPage = (AggregatedPage<Student>) this.esRepository.search(queryBuilder.build());// 3、解析// 3.1、從結果中取出名為brands的那個聚合,// 因為是利用String類型字段來進行的term聚合,所以結果要強轉為StringTerm類型StringTerms agg = (StringTerms) aggPage.getAggregation(column);// 3.2、獲取桶List<StringTerms.Bucket> buckets = agg.getBuckets();// 3.3、遍歷for (StringTerms.Bucket bucket : buckets) {HashMap<String, Object> map = new HashMap<>();// 3.4、獲取桶中的key,即班級名稱map.put("class", bucket.getKeyAsString());// 3.5、獲取桶中的文檔數量 既各個班級下學生數量map.put("num", bucket.getDocCount());//將數據放入listlist.add(map);}//數據處理為jsonString jsonData = JacksonUtils.obejectToJson(list);return jsonData; }比較復雜? 晚上回來 寫唄
https://blog.csdn.net/zxc123e/article/details/79498113
https://www.cnblogs.com/dalaoyang/p/8990989.html
?
https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&tn=baidu&wd=elasticsearch%E6%95%B4%E5%90%88springboot%20&oq=elasticsearch%25E6%2595%25B4%25E5%2590%2588springboot&rsv_pq=85bde8fb00023d6c&rsv_t=028bjx3W9VYdyYhoRpmL%2B35Z0ARouR0alx1Z3RuRjofd%2BAmE9sUEfdQQA3k&rqlang=cn&rsv_enter=0
轉載于:https://my.oschina.net/u/4132381/blog/3059455
總結
以上是生活随笔為你收集整理的14. es 整合springboot的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vue如何在用户要关闭当前网页时弹出提示
- 下一篇: Qtum量子链受邀出席日本早稻田研究所区