中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

SpringBoot整合Spring Data Elasticsearch的過程詳解

發布時間:2020-09-27 13:38:56 來源:腳本之家 閱讀:357 作者:steakliu 欄目:編程語言

Spring Data Elasticsearch提供了ElasticsearchTemplate工具類,實現了POJO與elasticsearch文檔之間的映射

elasticsearch本質也是存儲數據,它不支持事物,但是它的速度遠比數據庫快得多,

可以這樣來對比elasticsearch和數據庫

  • 索引(indices)--------數據庫(databases)
  • 類型(type)------------數據表(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,創建實體,并對類和屬性進行標注

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

4.引入模板ElasticsearchTemplate

   @Autowired
  private ElasticsearchTemplate elasticsearchTemplate;

5.創建一個索引

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

6.刪除索引

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

7.新增對象

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

首先定義一個對象的接口

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

然后注入ItemRepository

  @Autowired
  private ItemRepository itemRepository;

新增對象

//新增一個對象
  @Test
  public void insert(){
    Item item = new Item(2L,"堅果R1","手機","錘子",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","手機","華為",3500.00,"http://image.baidu.com/13123.jpg"));
    list.add(new Item(10L,"華為p30","手機","華為",5450.00,"http://image.baidu.com/13123.jpg"));
    list.add(new Item(11L,"華為p30 pro","手機","華為",6980.00,"http://image.baidu.com/13123.jpg"));
    itemRepository.saveAll(list);
  }

8.查詢

//根據字段查詢所有
  @Test
  public void queryAll(){
    //升序,相應降序為dscending
    Iterable<Item> items = this.itemRepository.findAll(Sort.by("price").ascending());
    for (Item item : items){
      System.out.println(item);
    }
  }

9.自定義查詢方法

Spring Data 的另一個強大功能,是根據方法名稱自動實現功能,你的方法名叫做:findByTitle,那么它就知道你是根據title查詢,然后自動幫你完成,無需寫實現類。當然,方法名稱要符合一定的約定:

SpringBoot整合Spring Data Elasticsearch的過程詳解

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

根據手機名查找手機

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

區間查詢

//根據區間查詢
  @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.自定義查詢

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

分頁查詢

//分頁查詢
  @Test
  public void queryByPage(){
    NativeSearchQueryBuilder nativeSearchQueryBuilder = new NativeSearchQueryBuilder();
    nativeSearchQueryBuilder.withQuery(QueryBuilders.termQuery("category","手機"));
    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("總條數 = "+total);
    System.out.println("總頁數 = "+totalPage);
    System.out.println("當前頁 = "+nowPage);
    System.out.println("每頁大小 = "+pageSize);
    for (Item item : items){
      System.out.println(item);
    }
  }

還有很多,就不意義列舉

在elasticsearch-head上查看數據

SpringBoot整合Spring Data Elasticsearch的過程詳解

關于安裝elasticsearch-head,參考地址

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

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

玉门市| 准格尔旗| 万山特区| 江陵县| 商洛市| 凤翔县| 永年县| 双流县| 清丰县| 寿阳县| 贵州省| 神农架林区| 衡阳市| 宁海县| 兰州市| 萝北县| 千阳县| 漠河县| 大宁县| 周至县| 富锦市| 秭归县| 麦盖提县| 公安县| 吉隆县| 虎林市| 金湖县| 商水县| 中江县| 布拖县| 若尔盖县| 儋州市| 平江县| 潜山县| 榆社县| 肃南| 无锡市| 漠河县| 九寨沟县| 象山县| 吴川市|