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

SpringBoot集成ElasticSearch的示例代碼

 更新時(shí)間:2022年02月16日 16:52:15   作者:小小張自由—>張有博  
Elasticsearch是用Java語言開發(fā)的,并作為Apache許可條款下的開放源碼發(fā)布,是一種流行的企業(yè)級(jí)搜索引擎,本文給大家介紹SpringBoot集成ElasticSearch的示例代碼,感興趣的朋友一起看看吧

 

一、Elasticseach介紹

1.簡單介紹

官網(wǎng):開源搜索:Elasticsearch、ELK Stack 和 Kibana 的開發(fā)者 | Elastic

https://www.elastic.co/cn/

ElasticSeach詳細(xì)安裝教程--圖文介紹超詳細(xì)

令人記憶深刻的口號(hào):能夠發(fā)現(xiàn)意料之中以及意料之外的情況

Elasticsearch也是基于Lucene的全文檢索庫,本質(zhì)也是存儲(chǔ)數(shù)據(jù),很多概念與MySQL類似的。是一種全文檢索技術(shù)。

Elasticsearch 是位于 Elastic Stack 核心的分布式搜索和分析引擎。Logstash 和 Beats 有助于收集、聚合和豐富您的數(shù)據(jù)并將其存儲(chǔ)在 Elasticsearch 中。Kibana 使您能夠以交互方式探索、可視化和分享對(duì)數(shù)據(jù)的見解,并管理和監(jiān)控堆棧。Elasticsearch 是索引、搜索和分析魔法發(fā)生的地方。

Elasticsearch 是一個(gè)基于JSON的分布式搜索和分析引擎。

Elasticsearch是用Java語言開發(fā)的,并作為Apache許可條款下的開放源碼發(fā)布,是一種流行的企業(yè)級(jí)搜索引擎。Elasticsearch用于云計(jì)算中,能夠達(dá)到實(shí)時(shí)搜索,穩(wěn)定,可靠,快速,安裝使用方便。

2.對(duì)比關(guān)系:

索引(indices)--------------------------------Databases 數(shù)據(jù)庫
 
  類型(type)-----------------------------Table 數(shù)據(jù)表
     文檔(Document)----------------Row 行
       字段(Field)-------------------Columns 列

3.詳細(xì)說明:

概念

說明

索引庫(indices)

indices是index的復(fù)數(shù),代表許多的索引,

類型(type)

類型是模擬mysql中的table概念,一個(gè)索引庫下可以有不同類型的索引,比如商品索引,訂單索引,其數(shù)據(jù)格式不同。不過這會(huì)導(dǎo)致索引庫混亂,因此未來版本中會(huì)移除這個(gè)概念

文檔(document)

存入索引庫原始的數(shù)據(jù)。比如每一條商品信息,就是一個(gè)文檔

字段(field)

文檔中的屬性

映射配置(mappings)

字段的數(shù)據(jù)類型、屬性、是否索引、是否存儲(chǔ)等特性

4.查出數(shù)據(jù)的解釋

 took:查詢花費(fèi)時(shí)間,單位是毫秒
 time_out:是否超時(shí)
 _shards:分片信息
 hits:搜索結(jié)果總覽對(duì)象 
   total:搜索到的總條數(shù)
   max_score:所有結(jié)果中文檔得分的最高分
   hits:搜索結(jié)果的文檔對(duì)象數(shù)組,每個(gè)元素是一條搜索到的文檔信息 
     _index:索引庫
     _type:文檔類型
     _id:文檔id
     _score:文檔得分
     _source:文檔的源數(shù)據(jù)

 二、SpringBoot集成Elasticseach

1.引入依賴

<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-test</artifactId>
          <scope>test</scope>
      </dependency>
 </dependencies>

2.添加配置

spring:
  data:
    elasticsearch:
      cluster-name: elasticsearch
      cluster-nodes: 192.168.7.132:9300

3.創(chuàng)建pojo類與索引對(duì)應(yīng)

package com.leyou.elasticsearch.pojo;
 
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;
import org.springframework.data.elasticsearch.annotations.Field;
import org.springframework.data.elasticsearch.annotations.FieldType;
/**
 * 創(chuàng)建pojo類與索引對(duì)應(yīng)
 *
 * @author Promsing(張有博)
 * @version 1.0.0
 * @since 2022/1/26 - 20:35
 */
@Document(indexName = "item", type = "docs", shards = 1, replicas = 0)
public class Item {
    @Id
    private  Long id;
    /**
     * 標(biāo)題
     */
    @Field(type = FieldType.Text,analyzer = "ik_max_word")
    private String title;
     * 分類
    @Field(type = FieldType.Keyword)
    private  String category;
     * 品牌
    private  String brand;
     * 價(jià)格
    @Field(type = FieldType.Double)
    private  Double price;
     * 圖片地址
    private  String images;
    public Long getId() {
        return id;
    }
    public void setId(Long id) {
        this.id = id;
    public String getTitle() {
        return title;
    public void setTitle(String title) {
        this.title = title;
    public String getCategory() {
        return category;
    public void setCategory(String category) {
        this.category = category;
    public String getBrand() {
        return brand;
    public void setBrand(String brand) {
        this.brand = brand;
    public Double getPrice() {
        return price;
    public void setPrice(Double price) {
        this.price = price;
    public String getImages() {
        return images;
    public void setImages(String images) {
        this.images = images;
    public Item() {
    public Item(Long id, String title, String category, String brand, Double price, String images) {
    @Override
    public String toString() {
        return "Item{" +
                "id=" + id +
                ", title='" + title + '\'' +
                ", category='" + category + '\'' +
                ", brand='" + brand + '\'' +
                ", price=" + price +
                ", images='" + images + '\'' +
                '}';
}

4.SpringData封裝了基礎(chǔ)的增刪改查,自定義增刪改查

這里需要繼承接口-ItemRepository 

/**
 * 自定義的增刪改查接口
 *
 * @author Promsing(張有博)
 * @version 1.0.0
 * @since 2022/1/27 - 15:10
 */
public interface ItemRepository extends ElasticsearchRepository<Item,Long> {
 
    List<Item> findByTitle(String title);
    List<Item> findByPriceBetween(Double d1,Double d2);
}

5.測(cè)試方法--增刪改查

package com.leyou.elasticsearch;
 
import com.leyou.elasticsearch.dao.ItemRepository;
import com.leyou.elasticsearch.pojo.Item;
import org.elasticsearch.index.query.MatchQueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.sort.SortBuilders;
import org.elasticsearch.search.sort.SortOrder;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort;
import org.springframework.data.elasticsearch.core.ElasticsearchTemplate;
import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder;
import org.springframework.test.context.junit4.SpringRunner;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
/**
 * 測(cè)試ES的增刪改查
 *
 * @author Promsing(張有博)
 * @version 1.0.0
 * @since 2022/1/26 - 20:57
 */
@SpringBootTest(classes = ElasticsearchApplication.class)
@RunWith(SpringRunner.class)
public class ElasticsearchTest {
    @Autowired
    private ElasticsearchTemplate elasticsearchTemplate;//ES的模板類
    private ItemRepository itemRepository;//Item的增刪改查
    /**
     * 創(chuàng)建索引庫
     */
    @Test
    public void testIndex(){
        this.elasticsearchTemplate.createIndex(Item.class);
        this.elasticsearchTemplate.putMapping(Item.class);
        //this.elasticsearchTemplate.deleteIndex();
    }
     * 插入與更新
    public void testCreate(){
        Item item = new Item(1L,"小米手機(jī)9","手機(jī)","小米",3999.00,"https:www.baidu.com");
        Object save = this.itemRepository.save(item);
        List<Item> list = new ArrayList<>();
        list.add(new Item(2L, "堅(jiān)果手機(jī)R1", " 手機(jī)", "錘子", 3699.00, "http://image.leyou.com/123.jpg"));
        list.add(new Item(3L, "華為META10", " 手機(jī)", "華為", 4499.00, "http://image.leyou.com/3.jpg"));
        // 接收對(duì)象集合,實(shí)現(xiàn)批量新增
        Iterable<Item> items = itemRepository.saveAll(list);
        System.out.println(items);
     * 刪除
    public void testDelete(){
        Item item=new Item(1L,"小米手機(jī)9","手機(jī)","小米",3999.00,"https:www.baidu.com");
        this.itemRepository.delete(item);
     * 查詢
    public void testFind(){
        System.out.println("-----主鍵查詢------");
        Optional<Item> byId = this.itemRepository.findById(1L);
        System.out.println(byId.get());
        System.out.println("-----查詢?nèi)?-----");
        Iterable<Item> all = this.itemRepository.findAll();
        all.forEach(i-> System.out.println(i));
        System.out.println("-----排序查詢(升序降序)------");
        Iterable<Item> price = this.itemRepository.findAll(Sort.by("price").descending());
        price.forEach(System.out::println);
     * 調(diào)用自定義方法
    public void testFindByU(){
        List<Item> phone = this.itemRepository.findByTitle("手機(jī)");
//        phone.forEach(i->{
//            System.out.println(i);
//        });
        List<Item> byPriceBetween = this.itemRepository.findByPriceBetween(4000.0, 5000.0);
        byPriceBetween.forEach(i-> System.out.println(i));
     * 批量插入
    public void indexList() {
        list.add(new Item(1L, "小米手機(jī)7", "手機(jī)", "小米", 3299.00, "http://image.leyou.com/13123.jpg"));
        list.add(new Item(2L, "堅(jiān)果手機(jī)R1", "手機(jī)", "錘子", 3699.00, "http://image.leyou.com/13123.jpg"));
        list.add(new Item(3L, "華為META10", "手機(jī)", "華為", 4499.00, "http://image.leyou.com/13123.jpg"));
        list.add(new Item(4L, "小米Mix2S", "手機(jī)", "小米", 4299.00, "http://image.leyou.com/13123.jpg"));
        list.add(new Item(5L, "榮耀V10", "手機(jī)", "華為", 2799.00, "http://image.leyou.com/13123.jpg"));
        itemRepository.saveAll(list);
     * 高級(jí)查詢
    public void testSearch(){
        //通過查詢構(gòu)建器工具構(gòu)建--重點(diǎn):QueryBuilders:詞條、模糊、范圍
        MatchQueryBuilder queryBuilder= QueryBuilders.matchQuery("title","手機(jī)");
        //獲取結(jié)果集
        Iterable<Item> items = this.itemRepository.search(queryBuilder);
        items.forEach(System.out::println);
     * 重點(diǎn)--自定義查詢
    public void testNative(){
        // 構(gòu)建自定義查詢構(gòu)建器
        NativeSearchQueryBuilder queryBuilder = new NativeSearchQueryBuilder();
        // 添加基本查詢條件
        queryBuilder.withQuery(QueryBuilders.matchQuery("title","手機(jī)"));
        // 查詢分頁結(jié)果集
        Page<Item> itemPage = this.itemRepository.search(queryBuilder.build());
        System.out.println(itemPage.getTotalPages());
        System.out.println(itemPage.getTotalElements());
        itemPage.forEach(i-> System.out.println(i));
     * 重點(diǎn)--分頁查詢
    public void testPage(){
        queryBuilder.withQuery(QueryBuilders.matchQuery("category","手機(jī)"));
        queryBuilder.withPageable(PageRequest.of(1,2));
     * 重點(diǎn)--排序
    public void testSort(){
        queryBuilder.withSort(SortBuilders.fieldSort("price").order(SortOrder.DESC));
}

到此這篇關(guān)于SpringBoot集成Elasticseach的文章就介紹到這了,更多相關(guān)SpringBoot集成Elasticseach內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • oracle數(shù)據(jù)庫導(dǎo)入TXT文件方法介紹

    oracle數(shù)據(jù)庫導(dǎo)入TXT文件方法介紹

    這篇文章主要介紹了oracle數(shù)據(jù)庫導(dǎo)入TXT文件方法介紹,文中向大家展示了具體代碼示例,需要的朋友可以參考下。
    2017-09-09
  • java發(fā)送http請(qǐng)求并獲取狀態(tài)碼的簡單實(shí)例

    java發(fā)送http請(qǐng)求并獲取狀態(tài)碼的簡單實(shí)例

    下面小編就為大家?guī)硪黄猨ava發(fā)送http請(qǐng)求并獲取狀態(tài)碼的簡單實(shí)例。小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-05-05
  • Java容器ArrayList原理解析

    Java容器ArrayList原理解析

    這篇文章主要介紹了Java容器ArrayList原理解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-02-02
  • 一段眼睛跟著鼠標(biāo)轉(zhuǎn)動(dòng)的跟蹤眼代碼

    一段眼睛跟著鼠標(biāo)轉(zhuǎn)動(dòng)的跟蹤眼代碼

    java實(shí)現(xiàn)的眼睛跟著鼠標(biāo)轉(zhuǎn)動(dòng)的跟蹤眼代碼
    2008-10-10
  • 帶你了解Java中的Mono接口

    帶你了解Java中的Mono接口

    Mono是ProjectReactor庫的核心類型之一,用于處理0或1個(gè)元素的異步數(shù)據(jù)流,本文主要介紹了帶你了解Java中的Mono接口,具有一定的參考價(jià)值,感興趣的可以了解一下
    2026-04-04
  • IDEA中使用Typora編輯md文件的方法

    IDEA中使用Typora編輯md文件的方法

    這篇文章主要介紹了IDEA中使用Typora編輯md文件的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-09-09
  • SpringBoot集成SAP的過程及本地IDEA啟動(dòng)和Windows服務(wù)器部署

    SpringBoot集成SAP的過程及本地IDEA啟動(dòng)和Windows服務(wù)器部署

    本文給大家介紹SpringBoot集成SAP的過程及本地IDEA啟動(dòng)和Windows服務(wù)器部署的相關(guān)知識(shí),本文給大家介紹的詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2025-07-07
  • Java基于正則表達(dá)式實(shí)現(xiàn)查找匹配的文本功能【經(jīng)典實(shí)例】

    Java基于正則表達(dá)式實(shí)現(xiàn)查找匹配的文本功能【經(jīng)典實(shí)例】

    這篇文章主要介紹了Java基于正則表達(dá)式實(shí)現(xiàn)查找匹配的文本功能,結(jié)合具體實(shí)例形式分析了java正則查找、字符串遍歷、group分組相關(guān)操作技巧,需要的朋友可以參考下
    2017-04-04
  • Java變量與運(yùn)算符用法詳解

    Java變量與運(yùn)算符用法詳解

    這篇文章介紹了Java中的關(guān)鍵字、標(biāo)識(shí)符、變量、基本數(shù)據(jù)類型、變量作用域、基本數(shù)據(jù)類型間的運(yùn)算、字符串、基本數(shù)據(jù)類型與字符串的運(yùn)算、計(jì)算機(jī)底層數(shù)據(jù)存儲(chǔ)、運(yùn)算符的使用、賦值運(yùn)算符、比較運(yùn)算符、邏輯運(yùn)算符、位運(yùn)算符和條件運(yùn)算符用法,感興趣的朋友跟隨小編看看吧
    2026-01-01
  • java自定義注解接口實(shí)現(xiàn)方案

    java自定義注解接口實(shí)現(xiàn)方案

    java注解是附加在代碼中的一些元信息,用于一些工具在編譯、運(yùn)行時(shí)進(jìn)行解析和使用,起到說明、配置的功能,本文將詳細(xì)介紹,此功能的實(shí)現(xiàn)方法
    2012-11-11

最新評(píng)論

宁化县| 澎湖县| 茌平县| 和龙市| 临洮县| 贺兰县| 息烽县| 浮梁县| 诸暨市| 江城| 噶尔县| 江城| 南宁市| 双城市| 犍为县| 泊头市| 章丘市| 循化| 保德县| 巩义市| 五家渠市| 龙州县| 石泉县| 安远县| 县级市| 文安县| 绩溪县| 南安市| 嵊泗县| 新民市| 大洼县| 出国| 洱源县| 永善县| 江达县| 安阳市| 三台县| 乾安县| 琼结县| 梁山县| 堆龙德庆县|