日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Elasticsearch学习(3) spring boot整合Elasticsearch的原生方式

發布時間:2024/10/12 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Elasticsearch学习(3) spring boot整合Elasticsearch的原生方式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前面我們已經介紹了spring boot整合Elasticsearch的jpa方式,這種方式雖然簡便,但是依舊無法解決我們較為復雜的業務,所以原生的實現方式學習能夠解決這些問題,而原生的學習方式也是Elasticsearch聚合操作的一個基礎。

一、修改spring boot 的application.properties配置文件

?

##端口號 server.port=8880 ##es地址 spring.data.elasticsearch.cluster-nodes =127.0.0.1:9300

?

? ? ? 需要注意的是:如果你的項目中只配置了Elasticsearch的依賴或者是其他nosql的依賴,那么就要在spring boot啟動類中添加@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})注解,這個操作是關閉自動配置數據源文件信息。

?

二、創建一個Bean層

  和spring boot的jpa方式一樣,我們需要創建一個bean來作為我們的索引,注意indexName和type的值是你需要查找的索引內容。 

import org.springframework.data.elasticsearch.annotations.Document;@Document(indexName = "article",type = "center") public class Zoo {private int id;private String animal;private Integer num;private String breeder;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getAnimal() {return animal;}public void setAnimal(String animal) {this.animal = animal;}public Integer getNum() {return num;}public void setNum(Integer num) {this.num = num;}public String getBreeder() {return breeder;}public void setBreeder(String breeder) {this.breeder = breeder;}public Zoo(int id, String animal, Integer num, String breeder) {super();this.id = id;this.animal = animal;this.num = num;this.breeder = breeder;}public Zoo() {super();}} bean層代碼

三、創建一個dao層

 ??創建的dao層中不需要我們寫實現的方法,只需要繼承ElasticsearchRepository接口。

import org.springframework.context.annotation.Configuration; import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;@Configuration public interface ZooMapper extends ElasticsearchRepository<Zoo,Integer>{} dao層代碼

四、創建一個Controller層,編寫原生代碼

 ?一般來說這個操作規范下應該寫到service層,由于是測試項目,我就直接寫在了controller中,我們直接看一個例子

import java.util.List;import org.elasticsearch.index.query.BoolQueryBuilder; import org.elasticsearch.index.query.QueryBuilder; import org.elasticsearch.index.query.QueryBuilders; import org.elasticsearch.search.sort.FieldSortBuilder; import org.elasticsearch.search.sort.SortBuilders; import org.elasticsearch.search.sort.SortOrder; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder; import org.springframework.data.elasticsearch.core.query.SearchQuery; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController;@RestController public class UserController {@AutowiredZooMapper zooMapper;// 訪問接口地址:localhost:8880/find //存儲數據@GetMapping("find")public Object save(){//1.創建QueryBuilder 可以理解為裝查詢條件的容器BoolQueryBuilder builder = QueryBuilders.boolQuery();//2.設置查詢條件,參數1: 字段名 參數2:字段值(為什么中文是一個字而不是詞,這個后面在說)QueryBuilder queryBuilder1=QueryBuilders.termQuery("breeder", "飼");//設置查詢條件多個匹配,參數1: 字段名 參數2:字段值 參數3:字段值QueryBuilder queryBuilder2=QueryBuilders.termsQuery("animal", "rabbit","lion");//3.將查詢的條件放入容器中//其中 must相當于SQL中的and should相當于SQL中的or mustNot相當于SQL中的not builder.must(queryBuilder1);builder.should(queryBuilder2);//4.設置排序 參數:需要排序字段 DESC表示降序FieldSortBuilder sort = SortBuilders.fieldSort("id").order(SortOrder.DESC);//5.設置分頁,參數1:第幾頁開始(第一頁是0),參數2:顯示的條數 //在spring 2.0開始后,使用PageRequest.of創建分頁參數PageRequest page =PageRequest.of(0, 2);//6.在設置好查詢條件、排序設置、分頁設置后需要將他們放入NativeSearchQueryBuilder 容器中NativeSearchQueryBuilder nativeSearchQueryBuilder =new NativeSearchQueryBuilder();//將查詢條件放入容器中 nativeSearchQueryBuilder.withQuery(builder);//將分頁放入容器中 nativeSearchQueryBuilder.withPageable(page);//將排序放入容器中 nativeSearchQueryBuilder.withSort(sort);//最后將容器組裝后,生產NativeSearchQuery//此時 SearchQuery中的sql為//select * from zoo where breeder="飼養員1號" or animal in("rabbit","lion") ORDER BY id DESC LIMIT 0,2SearchQuery query = nativeSearchQueryBuilder.build();System.out.println("查詢的語句:" + query.getQuery().toString());//7.開始查詢Page<Zoo> listPage = zooMapper.search(query); //獲取總條數int total = (int) listPage.getTotalElements();//獲取查詢的內容List<Zoo> relist = listPage.getContent();System.out.println("relist----------------"+relist.toString());return relist;}} controller層代碼

 在測試之前,我們需要在Elasticsearch中添加一個索引,這個索引和我們剛才創建的bean中配置的indexName和type的值一致。

 打開 http://localhost:8888/find,測試我們的代碼:

  

? 這樣做原生的實現方式就已經成功了,接下來就將具體介紹代碼中的具體步驟

六、查詢條件的具體步驟 

  這一節主要講解查詢條件的具體功能,在controller中,有這樣一段代碼: 

//2.設置查詢條件,參數1: 字段名 參數2:字段值(為什么中文是一個字而不是詞,這個后面在說)QueryBuilder queryBuilder1=QueryBuilders.termQuery("breeder", "飼");//設置查詢條件多個匹配,參數1: 字段名 參數2:字段值 參數3:字段值QueryBuilder queryBuilder2=QueryBuilders.termsQuery("animal", "rabbit","lion");

  在這個步驟我們可以看到breeder的值是中文且中文是一個字而不是詞,這是因為沒有使用分詞器的原因,Elasticsearch默認的分片是將中文分解成一個字,英文是單個單詞:

?? 1 設置查詢條件

//不分詞查詢 參數1: 字段名,參數2:字段查詢值,因為不分詞,所以漢字只能查詢一個字,英語是一個單詞.QueryBuilder queryBuilder=QueryBuilders.termQuery("breeder", "飼"); //分詞查詢,采用默認的分詞器QueryBuilder queryBuilder2 = QueryBuilders.matchQuery("breeder", "飼養"); //多個匹配的不分詞查詢QueryBuilder queryBuilder=QueryBuilders.termsQuery("animal", "rabbit","lion"); //多個匹配的分詞查詢QueryBuilder queryBuilder= QueryBuilders.multiMatchQuery("animal", "r", "l"); //匹配所有文件,相當于就沒有設置查詢條件QueryBuilder queryBuilder=QueryBuilders.matchAllQuery();

 2模糊查詢

? ? 除了設置普通的查詢,elasticsearch還為我們封裝了模糊查詢

//1.常用的字符串查詢//相當于sql中的 breeder like "飼"QueryBuilders.queryStringQuery("飼").field("breeder");//2.推薦與該文檔相識的文檔//參數1:字段名 參數2:文檔內容//如果不指定第一個參數,則默認全部,這個是主要用來推薦偏好內容QueryBuilders.moreLikeThisQuery(new String[] {"animal"}).addLikeText("rabbit");//3.分詞的字段片查詢,比如飼養員1號能夠被中文分詞器分為:飼養員 1 號//使用下面的方法就能查詢‘飼養員’這個片段,如果沒有配置分詞器,就查詢全部QueryBuilders.prefixQuery("breeder","飼養員 ");//4.通配符查詢,支持* 任意字符串;?任意一個字符與sql中的? *類似//參數1:字段名 參數2字段值QueryBuilders.wildcardQuery("animal","r??b*");

  在第二條偏好文檔設置中有一個偏好的權重問題,如果感興趣可以參考這個博客:https://blog.csdn.net/laigood/article/details/7831713

 3 邏輯查詢 

//閉區間 相當于id>=2 and id<=5QueryBuilder queryBuilder0 = QueryBuilders.rangeQuery("id").from("2").to("5");//開區間 相當于id>2 and id<5//至于后面兩個參數的值默認為true也就是閉區間//如果想半開半閉只需要調整后面兩個參數的值即可QueryBuilder queryBuilder1 = QueryBuilders.rangeQuery("id").from("2").to("5").includeUpper(false).includeLower(false);//大于 id>2QueryBuilder queryBuilder2 = QueryBuilders.rangeQuery("id").gt("2");//大于等于 id>=2QueryBuilder queryBuilder3 = QueryBuilders.rangeQuery("id").gte("2");//小于 id <5QueryBuilder queryBuilder4 = QueryBuilders.rangeQuery("id").lt("5");//小于等于 id <=5QueryBuilder queryBuilder5 = QueryBuilders.rangeQuery("id").lte("5");

以上就是spring boot整合Elasticsearch的原生方式所有實現方式,這個方式主要是后面的聚合查詢的基礎。

?

轉載于:https://www.cnblogs.com/daijiting/p/10209746.html

總結

以上是生活随笔為你收集整理的Elasticsearch学习(3) spring boot整合Elasticsearch的原生方式的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 精品国产乱码久久久久久鸭王1 | 欧美精品区 | 丁香婷婷久久久综合精品国产 | 日韩二级| 在线天堂v | 欧美成人福利 | 成人精品一区日本无码网 | 日韩大胆人体 | 久久国产亚洲精品无码 | 久久久亚洲精品视频 | 野花社区视频在线观看 | 4438x全国最大成人 | 国产一区二区精品丝袜 | 三上悠亚在线观看一区二区 | 香蕉视频免费在线看 | 欧美午夜久久久 | 日韩精品免费 | 欧美操穴视频 | 精品亚洲在线 | 五月婷激情 | 亚洲天堂一 | 色a在线 | 91成人一区 | 精品人伦一区二区三区蜜桃免费 | 一本色道久久亚洲综合精品蜜桃 | mm131美女大尺度私密照尤果 | 国产亚洲欧美日韩精品 | 国产乱轮视频 | 欧美日本道 | 九九热这里有精品 | 免费黄色av片 | 男人疯狂高潮呻吟视频 | 亚洲黄色网页 | 日本精品视频一区二区 | 成人亚洲免费 | 国产又大又黑又粗免费视频 | 国产最新视频 | 老司机午夜免费福利 | 欧美国产激情 | 男人的天堂在线视频 | 成人教育av在线 | 欧美在线网站 | 歪歪6080 | 国产一区资源 | 亚洲永久无码7777kkk | 99久久精品久久久久久清纯 | 看特级毛片| 女同av在线播放 | 色久综合 | 国产成人精品在线观看 | 婷婷国产一区二区三区 | 日韩一级生活片 | 欧美高清视频一区 | 波多在线视频 | 成年人午夜影院 | 国产91网址 | 日本一本二本三区免费 | 亚洲成人77777| 超污视频软件 | 自拍视频国产 | 免费在线观看日韩av | 精品视频免费播放 | 无码人妻精品一区二区50 | 午夜小视频网站 | 亚洲欧美综合另类自拍 | 春色网站 | 日日拍拍 | 欧美伦理一区 | 欧美瑟瑟 | 在线看的av | 69色堂 | 女人高潮娇喘1分47秒 | av高清一区 | 久久久久久久久久一区二区 | 国产suv一区二区 | 日韩电影一区二区三区 | 久久天堂视频 | 国产成人精品三级麻豆 | 色婷视频 | 中国黄色一级大片 | 日本午夜精品 | 亚洲痴女| 午夜极品视频 | 亚洲第一色网 | 中文字幕免费视频观看 | 麻豆传媒映画官网 | 捆绑少妇玩各种sm调教 | 伊人伊人伊人伊人 | 天天干天天做天天操 | 丝袜av在线播放 | 亚洲视频黄色 | 免费大黄网站 | 在线视频1卡二卡三卡 | 18深夜在线观看免费视频 | 午夜天堂av| 青娱乐极品在线 | 国产1区2区3区中文字幕 | 夜夜骚视频| 国产自偷 |