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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

5.1 入门整合案例(SpringBoot+Spring-data-elasticsearch) ---- good

發布時間:2023/12/9 javascript 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 5.1 入门整合案例(SpringBoot+Spring-data-elasticsearch) ---- good 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本節講解SpringBoot與Spring-data-elasticsearch整合的入門案例。

一、環境搭建

新建maven項目,名字隨意

pom.xml

  • ????????<parent>
  • <groupId>org.springframework.boot</groupId>
  • <artifactId>spring-boot-starter-parent</artifactId>
  • <version>1.3.1.RELEASE</version>
  • </parent>
  • <dependencies>
  • <dependency>
  • <groupId>org.springframework.boot</groupId>
  • <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
  • </dependency>
  • <dependency>
  • <groupId>org.springframework.boot</groupId>
  • <artifactId>spring-boot-starter-web</artifactId>
  • </dependency>
  • <dependency>
  • <groupId>org.springframework.boot</groupId>
  • <artifactId>spring-boot-starter-test</artifactId>
  • </dependency>
  • </dependencies>
  • application.yml

  • spring:?
  • ?????data:
  • ????????elasticsearch:?#ElasticsearchProperties
  • ????????????cluster-name:?elasticsearch?#默認即為elasticsearch
  • ????????????cluster-nodes:?120.25.194.233:9300?#配置es節點信息,逗號分隔,如果沒有指定,則啟動ClientNode
  • 這些配置的屬性,最終會設置到org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchProperties這個實體中。

    二、創建實體

    Spring-data-elasticsearch為我們提供了@Document、@Field等注解,如果某個實體需要建立索引,只需要加上這些注解即可。例如以一個文章實體為例:

    Article.java

  • import?java.io.Serializable;
  • import?java.util.Date;
  • ?
  • import?org.springframework.data.annotation.Id;
  • import?org.springframework.data.elasticsearch.annotations.DateFormat;
  • import?org.springframework.data.elasticsearch.annotations.Document;
  • import?org.springframework.data.elasticsearch.annotations.Field;
  • ?
  • @Document(indexName="article_index",type="article",shards=5,replicas=1,indexStoreType="fs",refreshInterval="-1")
  • public?class?Article?implements?Serializable{
  • /**
  • ?*?
  • ?*/
  • private?static?final?long?serialVersionUID?=?551589397625941750L;
  • @Id
  • private?Long?id;
  • /**標題*/
  • private?String?title;
  • /**摘要*/
  • private?String?abstracts;
  • /**內容*/
  • private?String?content;
  • /**發表時間*/
  • @Field(format=DateFormat.date_time,index=FieldIndex.no,store=true,type=FieldType.Object)
  • private?Date?postTime;
  • /**點擊率*/
  • private?Long?clickCount;
  • //setters?and?getters
  • //toString
  • }
  • 在需要建立索引的類上加上@Document注解,即表明這個實體需要進行索引。其定義如下:

  • @Persistent
  • @Inherited
  • @Retention(RetentionPolicy.RUNTIME)
  • @Target({ElementType.TYPE})
  • public?@interface?Document?{
  • ?
  • String?indexName();//索引庫的名稱,個人建議以項目的名稱命名
  • ?
  • String?type()?default?"";//類型,個人建議以實體的名稱命名
  • ?
  • short?shards()?default?5;//默認分區數
  • ?
  • short?replicas()?default?1;//每個分區默認的備份數
  • ?
  • String?refreshInterval()?default?"1s";//刷新間隔
  • ?
  • String?indexStoreType()?default?"fs";//索引文件存儲類型
  • }
  • 加上了@Document注解之后,默認情況下這個實體中所有的屬性都會被建立索引、并且分詞。

    我們通過@Field注解來進行詳細的指定,如果沒有特殊需求,那么只需要添加@Document即可。在我們的案例中,使用了@Field針對日期屬性postTime上進行了指定。

    @Field注解的定義如下:

  • @Retention(RetentionPolicy.RUNTIME)
  • @Target(ElementType.FIELD)
  • @Documented
  • @Inherited
  • public?@interface?Field?{
  • ?
  • FieldType?type()?default?FieldType.Auto;#自動檢測屬性的類型
  • ?
  • FieldIndex?index()?default?FieldIndex.analyzed;#默認情況下分詞
  • ?
  • DateFormat?format()?default?DateFormat.none;
  • ?
  • String?pattern()?default?"";
  • ?
  • boolean?store()?default?false;#默認情況下不存儲原文
  • ?
  • String?searchAnalyzer()?default?"";#指定字段搜索時使用的分詞器
  • ?
  • String?indexAnalyzer()?default?"";#指定字段建立索引時指定的分詞器
  • ?
  • String[]?ignoreFields()?default?{};#如果某個字段需要被忽略
  • ?
  • boolean?includeInParent()?default?false;
  • }
  • 需要注意的是,這些默認值指的是我們沒有在我們沒有在屬性上添加@Filed注解的默認處理。一旦添加了@Filed注解,所有的默認值都不再生效。此外,如果添加了@Filed注解,那么type字段必須指定。

    ?

    三 創建Repository

    我們只要編寫一個接口ArticleSearchRepository,來繼承Spring-data-elasticSearch提供的ElasticsearchRepository即可。

  • import?org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
  • ?
  • import?spring.data.elasticsearch.docs.Article;
  • ?
  • //泛型的參數分別是實體類型和主鍵類型
  • public?interface?ArticleSearchRepository?extends?ElasticsearchRepository<Article,?Long>{
  • ?
  • }
  • 四、編寫測試類

    1、測試自動創建mapping

    ArticleSearchRepositoryTest.java

  • @RunWith(SpringJUnit4ClassRunner.class)
  • @SpringApplicationConfiguration(classes=Application.class)
  • public?class?ArticleSearchRepositoryTest?{
  • ?
  • @Autowired
  • private?ArticleSearchRepository?articleSearchRepository;
  • @Test
  • public?void?test(){
  • System.out.println("演示初始化");
  • }
  • ?
  • }
  • 這個測試僅僅是為了演示應用啟動后,Spring-data-elasticSearch會自動幫我們建立索引庫和創建實體的mapping信息。

    當成功啟動之后,通過sense控制臺查看映射信息

    可以右邊的結果中,的確出現了article的,mapping信息。

    默認情況下,在創建mapping信息的時候,只會創建添加了@Field注解的mapping信息。其他沒有添加@Filed注解的字段在保存索引的時候自動確定。

    需要注意的是,mapping信息可以自動創建,但是不能自動更新,也就是說,如果需要重新進行mapping映射的話,需要將原來的刪除,再進行mapping映射。讀者可以嘗試一下將postTime的type改為FieldType.long,這種情況下,會自動將日期轉換成時間戳。但是mapping信息不會自動更新,必須將原有的mapping信息刪除之后,才能重新建立映射。

    2、測試保存

  • @Test
  • public?void?testSave(){
  • Article?article=new?Article();
  • article.setId(1L);
  • article.setTitle("elasticsearch教程");
  • article.setAbstracts("spring-data-elastichSearch");
  • article.setContent("SpringBoot與spring-data-elastichSearch整合");
  • article.setPostTime(new?Date());
  • article.setClickCount(100l);
  • articleSearchRepository.save(article);
  • }
  • 運行程序后,我們首先查看mapping信息有沒有自動創建

    此時查看創建的索引結果

    http://www.tianshouzhi.com/api/tutorials/elasticsearch/159

    限定查詢結果集大小

    Spring Data允許開發者使用first和top關鍵字對返回的查詢結果集大小進行限定。fisrt和top需要跟著一個代表返回的結果集的最大大小的數字。如果沒有跟著一個數字,那么返回的結果集大小默認為1。

    Example 8.Limiting the result size of query with Top and First(利用first和top限制返回的結果集大小)

    User findFirstByOrderByLastnameAsc();User findTopByOrderByAgeDesc(); Page<User> queryFirst10ByLastname(String lastname, Pageable pageable); Slice<User> findTop3ByLastname(String lastname, Pageable pageable); List<User> findFirst10ByLastname(String lastname, Sort sort); List<User> findTop10ByLastname(String lastname, Pageable pageable);

    限制結果集的表達式還支持Distinct關鍵字。并且,當返回的結果集大小限制為1時,Spring Data支持將返回結果包裝到Optional(java 8新增,這是一個可以為null的容器對象。如果值存在則isPresent()方法會返回true,調用get()方法會返回該對象)之中,例子如下:

    Optional<User> findFirstByOrderByLastnameAsc();

    在查詢用page和slice來進行分頁查詢的情況下,同樣可以使用first和top來對結果集大小進行限制。

    +

    ?

    注意,如果在使用Sort參數對查詢結果進行排序的基礎上加上對結果集大小的限制,就可以輕易的獲得最大的K個元素或最小的K個元素。

    ?

    https://es.yemengying.com/4/4.4/4.4.5.html

    ?

    轉載于:https://www.cnblogs.com/softidea/p/6102796.html

    總結

    以上是生活随笔為你收集整理的5.1 入门整合案例(SpringBoot+Spring-data-elasticsearch) ---- good的全部內容,希望文章能夠幫你解決所遇到的問題。

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

    主站蜘蛛池模板: 国产又色又爽无遮挡免费动态图 | 免费网站在线观看视频 | 高清av网站| 欧美性免费 | 日本r级电影在线观看 | 久久这里有精品 | 老熟女毛茸茸浓毛 | 日韩欧美成人一区二区三区 | 蜜桃视频欧美 | 露脸啪啪清纯大学生美女 | 亚洲免费成人网 | 91在线看| 伊人日日夜夜 | 精品乱码久久久久久中文字幕 | 木木影院| 久久国产精品波多野结衣av | 在线观看日韩一区 | 精品人妻午夜一区二区三区四区 | 九九九九精品九九九九 | 91日批 | 亚洲国产成人一区二区 | 小泽玛利亚一区二区三区视频 | 久久综合福利 | 91不卡视频| 蜜桃av噜噜一区二区三区网址 | 国产精品成人久久久久 | 日韩三级在线 | 精品电影一区二区 | 男人的天堂aa | 日韩欧美色图 | 国产综合在线播放 | 日日噜噜噜噜人人爽亚洲精品 | 丝袜诱惑一区 | 男女操网站 | 97在线影院| 精品国产乱码久久久久久免费 | 国产这里只有精品 | 学生孕妇videosex性欧美 | 91福利网站 | 亚洲一区二区小说 | 国产人妻777人伦精品hd | 麻豆网站免费看 | 亚洲国产精品18久久久久久 | 91亚洲视频在线 | 免费av网址大全 | 97色婷婷 | 国产一区二区免费电影 | 日韩免费视频一区二区 | 超碰公开在线观看 | 黄色免费一级片 | 快播日韩| 香蕉在线播放 | 久久东京 | 午夜小视频在线观看 | 女人脱了内裤趴开腿让男躁 | 国产成人一区二区三区免费看 | 日韩一卡二卡在线 | 久久精品牌麻豆国产大山 | 69av导航| 91极品美女 | 国产精品粉嫩 | 99久久精品国产一区二区三区 | 不卡的av在线播放 | 欧美欧美欧美 | xx99小雪| 成年人视频在线看 | 久久伊人草 | 夜夜狠狠擅视频 | 综合久久亚洲 | 日韩有码视频在线 | 91大片免费看 | 琪琪射 | 丰满岳乱妇在线观看中字无码 | 青青草在线播放 | 国产精品毛片久久久 | 婷婷爱五月天 | 成人快手免费看片 | 综合第一页 | 夜夜操天天 | 日韩一区二区三区四区五区六区 | 最新中文字幕av | 日韩av中文字幕在线 | 澳门久久久 | 裸体的日本在线观看 | 国产精品久久久久一区二区 | 欧美日韩高清不卡 | 秋霞在线观看视频 | av影片在线观看 | 白丝美女喷水 | 日韩在线三级 | 国产亚洲精品久久久久婷婷瑜伽 | 岛国伊人| 91在线观看视频网站 | 国产又爽又黄的视频 | 91精品国自产在线偷拍蜜桃 | 韩国黄色精品 | 欧美顶级毛片在线播放 | 国产精品福利电影 | 精品欧美一区二区三区免费观看 |