最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot整合Spring Data Elasticsearch的過程詳解

 更新時(shí)間:2019年09月20日 09:06:02   作者:steakliu  
這篇文章主要介紹了SpringBoot整合Spring Data Elasticsearch的過程詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

Spring Data Elasticsearch提供了ElasticsearchTemplate工具類,實(shí)現(xiàn)了POJO與elasticsearch文檔之間的映射

elasticsearch本質(zhì)也是存儲(chǔ)數(shù)據(jù),它不支持事物,但是它的速度遠(yuǎn)比數(shù)據(jù)庫快得多,

可以這樣來對(duì)比elasticsearch和數(shù)據(jù)庫

  • 索引(indices)--------數(shù)據(jù)庫(databases)
  • 類型(type)------------數(shù)據(jù)表(table)
  • 文檔(Document)---------------- 行(row)
  • 字段(Field)-------------------列(Columns )

整合:

1,在SprinBoot工程中引入jar包

<dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>

2,配置文件

spring.data.elasticsearch.cluster-name=elasticsearch //名字必須和elasticsearch.yml里面的cluster.name相同
spring.data.elasticsearch.cluster-nodes=127.0.0.1:9300 
spring.data.elasticsearch.repositories.enabled=true

3,創(chuàng)建實(shí)體,并對(duì)類和屬性進(jìn)行標(biāo)注

@Document(indexName = "item",type = "docs", shards = 1, replicas = 0)//標(biāo)記為文檔類型,ndexName:對(duì)應(yīng)索引庫名稱type:對(duì)應(yīng)在索引庫中的類型,shards:分片數(shù)量,默認(rèn)5,replicas:副本數(shù)量,默認(rèn)1
public class Item {
  @Id //主鍵
  private Long id;
  @Field(type = FieldType.Text, analyzer = "ik_max_word") //標(biāo)記為成員變量  FieldType,可以是text、long、short、date、integer等  text:存儲(chǔ)數(shù)據(jù)時(shí)候,會(huì)自動(dòng)分詞,并生成索引  keyword:存儲(chǔ)數(shù)據(jù)時(shí)候,不會(huì)分詞建立索引  analyzer:分詞器名稱
  private String title; //標(biāo)題
  @Field(type = FieldType.Keyword)
  private String category;// 分類
  @Field(type = FieldType.Keyword)
  private String brand; // 品牌
  @Field(type = FieldType.Double)
  private Double price; // 價(jià)格
  @Field(index = false, type = FieldType.Keyword)//index:是否索引
  private String images; // 圖片地址

4.引入模板ElasticsearchTemplate

   @Autowired
  private ElasticsearchTemplate elasticsearchTemplate;

5.創(chuàng)建一個(gè)索引

   //添加索引
  @Test
  public void addIndex() {
    elasticsearchTemplate.createIndex(Item.class);
  }

6.刪除索引

  //刪除索引
  @Test
  public void delete(){
    elasticsearchTemplate.deleteIndex("item");
  }

7.新增對(duì)象

繼承Repository提供的一些子接口,就能具備各種基本的CRUD功能,這里繼承ElasticsearchCrudRepository

首先定義一個(gè)對(duì)象的接口

public interface ItemRepository extends ElasticsearchCrudRepository<Item,Long> {
}

然后注入ItemRepository

  @Autowired
  private ItemRepository itemRepository;

新增對(duì)象

//新增一個(gè)對(duì)象
  @Test
  public void insert(){
    Item item = new Item(2L,"堅(jiān)果R1","手機(jī)","錘子",2500.00,"http://image.baidu.com/13123.jpg");
    //Order order = new Order(20180020,"菜單");
    itemRepository.save(item);
  }

批量新增

//批量新增
  @Test
  public void insertList(){
    List<Item> list = new LinkedList<>();
    list.add(new Item(9L,"華為p20","手機(jī)","華為",3500.00,"http://image.baidu.com/13123.jpg"));
    list.add(new Item(10L,"華為p30","手機(jī)","華為",5450.00,"http://image.baidu.com/13123.jpg"));
    list.add(new Item(11L,"華為p30 pro","手機(jī)","華為",6980.00,"http://image.baidu.com/13123.jpg"));
    itemRepository.saveAll(list);
  }

8.查詢

//根據(jù)字段查詢所有
  @Test
  public void queryAll(){
    //升序,相應(yīng)降序?yàn)閐scending
    Iterable<Item> items = this.itemRepository.findAll(Sort.by("price").ascending());
    for (Item item : items){
      System.out.println(item);
    }
  }

9.自定義查詢方法

Spring Data 的另一個(gè)強(qiáng)大功能,是根據(jù)方法名稱自動(dòng)實(shí)現(xiàn)功能,你的方法名叫做:findByTitle,那么它就知道你是根據(jù)title查詢,然后自動(dòng)幫你完成,無需寫實(shí)現(xiàn)類。當(dāng)然,方法名稱要符合一定的約定:

上圖是截取csdn上博主我要取一個(gè)響亮的昵稱的圖

根據(jù)手機(jī)名查找手機(jī)

//自定義方法,根據(jù)Title查詢
  @Test
  public void findByTitle(){
    Item item = this.itemRepository.findByTitle("堅(jiān)果pro");
    System.out.println(item);
  }

區(qū)間查詢

//根據(jù)區(qū)間查詢
  @Test
  public void queryByPriceBetween(){
    List<Item> list = this.itemRepository.findByPriceBetween(2000.00, 3500.00);
    for (Item item : list) {
      System.out.println("item = " + item);
    }
  }

模糊查詢

//模糊查詢
  @Test
  public void queryLikeTitle(){
    List<Item> list = this.itemRepository.findByTitleLike("R2");
    for (Item item : list){
      System.out.println(item);
    }
  }

使用自定義方法需要在接口里面申明方法

public interface ItemRepository extends ElasticsearchCrudRepository<Item,Long> {
  Item findByTitle(String title);
  List<Item> findByPriceBetween(double price1, double price2);
  List<Item> findByTitleLike(String title);
}

10.自定義查詢

//自定義查詢,查詢數(shù)目等
  @Test
  public void matchQuery(){
    // 構(gòu)建查詢條件
    NativeSearchQueryBuilder queryBuilder = new NativeSearchQueryBuilder();
    // 添加基本分詞查詢
    queryBuilder.withQuery(QueryBuilders.matchQuery("title","堅(jiān)果"));
    //獲取結(jié)果
    Page<Item> items = (Page<Item>) this.itemRepository.findAll();
    //條數(shù)
    long total = items.getTotalElements();
    System.out.println("total = "+total);
    for (Item item : items){
      System.out.println(item);
    }
  }關(guān)鍵的是NativeSearchQueryBuilder這個(gè)類

分頁查詢

//分頁查詢
  @Test
  public void queryByPage(){
    NativeSearchQueryBuilder nativeSearchQueryBuilder = new NativeSearchQueryBuilder();
    nativeSearchQueryBuilder.withQuery(QueryBuilders.termQuery("category","手機(jī)"));
    int page = 0;
    int size = 2;
    nativeSearchQueryBuilder.withPageable(PageRequest.of(page,size));
    Page<Item> items = (Page<Item>) this.itemRepository.findAll();
    long total = items.getTotalElements();
    int totalPage = items.getTotalPages();
    int nowPage = items.getNumber();
    int pageSize = items.getSize();
    System.out.println("總條數(shù) = "+total);
    System.out.println("總頁數(shù) = "+totalPage);
    System.out.println("當(dāng)前頁 = "+nowPage);
    System.out.println("每頁大小 = "+pageSize);
    for (Item item : items){
      System.out.println(item);
    }
  }

還有很多,就不意義列舉

在elasticsearch-head上查看數(shù)據(jù)

關(guān)于安裝elasticsearch-head,參考地址

Spring Data Elasticsearch文檔:https://docs.spring.io/spring-data/elasticsearch/docs/3.1.10.RELEASE/reference/html/

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 詳解java Collections.sort的兩種用法

    詳解java Collections.sort的兩種用法

    這篇文章主要介紹了詳解java Collections.sort的兩種用法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • Java語言的安裝、配置、編譯與運(yùn)行過程

    Java語言的安裝、配置、編譯與運(yùn)行過程

    本文詳細(xì)介紹了如何在Windows、macOS和Linux操作系統(tǒng)上安裝、配置Java開發(fā)環(huán)境(JDK),并展示了如何編寫、編譯和運(yùn)行Java程序,同時(shí),還提供了常見問題的解決方案,正確配置Java環(huán)境對(duì)Java開發(fā)至關(guān)重要,是進(jìn)行Java編程的基礎(chǔ)
    2025-02-02
  • Mybatis?如何開啟控制臺(tái)打印sql語句

    Mybatis?如何開啟控制臺(tái)打印sql語句

    這篇文章主要介紹了Mybatis?如何開啟控制臺(tái)打印sql語句問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • java實(shí)現(xiàn)航空用戶管理系統(tǒng)

    java實(shí)現(xiàn)航空用戶管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)航空用戶管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • Java中的UrlDecoder 和 UrlEncoder_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    Java中的UrlDecoder 和 UrlEncoder_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    HTML 格式編碼的實(shí)用工具類。該類包含了將 String 轉(zhuǎn)換為 application/x-www-form-urlencoded MIME 格式的靜態(tài)方法。下文通過實(shí)例代碼給大家介紹Java中的UrlDecoder 和 UrlEncoder知識(shí),感興趣的的朋友一起看看吧
    2017-07-07
  • JAVA中的final關(guān)鍵字用法實(shí)例詳解

    JAVA中的final關(guān)鍵字用法實(shí)例詳解

    這篇文章主要介紹了JAVA中的final關(guān)鍵字用法,結(jié)合實(shí)例形式較為詳細(xì)的分析了Java中的final關(guān)鍵字用于修飾數(shù)據(jù),方法及類的具體使用技巧,需要的朋友可以參考下
    2015-12-12
  • 一文帶你搞懂Java中的遞歸

    一文帶你搞懂Java中的遞歸

    這篇文章主要為大家詳細(xì)介紹了Java中的遞歸的實(shí)現(xiàn)以及應(yīng)用,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Java有一定幫助,需要的可以參考一下
    2022-10-10
  • 一篇文章帶你了解JVM內(nèi)存模型

    一篇文章帶你了解JVM內(nèi)存模型

    本文講解了Java 內(nèi)存模型來看看解決可見性、有序性問題的 Java 內(nèi)存模型(JMM),今天通過本文給大家介紹Java 內(nèi)存模型(JVM)的相關(guān)知識(shí),感興趣的朋友一起看看吧
    2021-09-09
  • JAVA和JAVAC 命令詳細(xì)介紹

    JAVA和JAVAC 命令詳細(xì)介紹

    這篇文章主要介紹了JAVA和JAVAC 命令詳細(xì)介紹的相關(guān)資料,本文對(duì)java 和javac 命令進(jìn)行了詳解,并在Windows和Linux 平臺(tái)分別說明,需要的朋友可以參考下
    2016-11-11
  • java可變參數(shù)使用示例

    java可變參數(shù)使用示例

    這篇文章主要介紹了java可變參數(shù)使用示例,需要的朋友可以參考下
    2014-04-04

最新評(píng)論

永仁县| 江源县| 弥勒县| 梅河口市| 东乡| 秭归县| 荃湾区| 凤阳县| 柘城县| 乐东| 阿勒泰市| 平江县| 济宁市| 鄄城县| 仙居县| 来安县| 锦州市| 客服| 丰宁| 若羌县| 宾川县| 大悟县| 天台县| 连南| 安福县| 法库县| 富平县| 定边县| 巴楚县| 莱阳市| 思南县| 神木县| 遂川县| 新竹市| 福清市| 化德县| 年辖:市辖区| 监利县| 陇西县| 栾川县| 朝阳市|