黑袜帅主玩奴Gay.2022_波多野结衣av一台道_观看出轨少妇视频在线观看_无码视频网站亚洲精华液国产_精品自在拍精选

焦點(diǎn)快播:[ES三周年]如何使用SpringBoot 整合ES
來源:騰訊云     時(shí)間:2023-03-16 12:11:07

引言

平時(shí)我們存儲數(shù)據(jù)用的最多的就是mysql,在前面的文章里我也分享過很多關(guān)于mysql的知識,今天我們來集成另外一種數(shù)據(jù)存儲系統(tǒng)ES,它是一款NoSql型數(shù)據(jù)庫,主要使用場景有商品搜索,文章搜索等,關(guān)鍵詞就是搜索。 我們先簡單介紹下ES。 ?

Elasticsearch是一個基于Lucene的搜索服務(wù)器。它提供了一個分布式多用戶能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java語言開發(fā)的,并作為Apache許可條款下的開放源碼發(fā)布,是一種流行的企業(yè)級搜索引擎。Elasticsearch用于云計(jì)算中,能夠達(dá)到實(shí)時(shí)搜索,穩(wěn)定,可靠,快速,安裝使用方便 ?


(資料圖片)

這是來自于百度百科的解釋,其實(shí)我們就直接把它理解成搜索引擎就行了,接下來,我們就開始快速集成,然后上手使用吧! ?

安裝ES

本篇介紹的是如何通過docker安裝es,提前你得有docker環(huán)境 ?

拉取ES鏡像

docker pull elasticsearch:7.6.2復(fù)制代碼

創(chuàng)建掛載目錄

mkdir -p /Users/lezai/docker/volumes/data/elasticsearch/config/mkdir -p /Users/lezai/docker/volumes/data/elasticsearch/datamkdir -p /Users/lezai/docker/volumes/data/elasticsearch/plugins復(fù)制代碼

編輯配置文件

vim /Users/lezai/docker/volumes/data/elasticsearch/config/elasticsearch.yml復(fù)制代碼

elasticsearch.yml

http.host: 0.0.0.0復(fù)制代碼

運(yùn)行執(zhí)行腳本

docker run --name elasticsearch -p 9200:9200  -p 9300:9300 \ -e "discovery.type=single-node" \ -e ES_JAVA_OPTS="-Xms256m -Xmx256m" \ -v /Users/lezai/docker/volumes/data/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \ -v /Users/lezai/docker/volumes/data/elasticsearch/data:/usr/share/elasticsearch/data \ -v /Users/lezai/docker/volumes/data/elasticsearch/plugins:/usr/share/elasticsearch/plugins \ -d elasticsearch:7.6.2復(fù)制代碼

安裝成功后

在瀏覽器輸入 http://localhost:9200,如果出現(xiàn)以下內(nèi)容,則代表安裝成功

{  "name" : "43e2638f84ac",  "cluster_name" : "elasticsearch",  "cluster_uuid" : "hZKT7NQNRl-Dg2Xrb3isGg",  "version" : {    "number" : "7.6.2",    "build_flavor" : "default",    "build_type" : "docker",    "build_hash" : "ef48eb35cf30adf4db14086e8aabd07ef6fb113f",    "build_date" : "2020-03-26T06:34:37.794943Z",    "build_snapshot" : false,    "lucene_version" : "8.4.0",    "minimum_wire_compatibility_version" : "6.8.0",    "minimum_index_compatibility_version" : "6.0.0-beta1"  },  "tagline" : "You Know, for Search"}復(fù)制代碼

配置項(xiàng)目

添加必要依賴

                    org.springframework.boot            spring-boot-starter-data-elasticsearch                            org.springframework.boot            spring-boot-starter-test            test                                    org.projectlombok            lombok            1.18.18            復(fù)制代碼

添加實(shí)體

其實(shí)這里的實(shí)體對應(yīng)的就是ES索引 @Document(indexName = "sys_user") 代表映射的是sys_user 索引 @Field(type = FieldType.Keyword) 代表字段應(yīng)設(shè)在es中是keyword類型 ?

這里就不介紹過多的ES用法 ?

package com.aims.springbootes.entity;import lombok.Builder;import lombok.Data;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;import java.io.Serializable;import java.util.List;@Document(indexName = "sys_user")   //文檔@Data@Builderpublic class SysUser implements Serializable {    @Id //主鍵    private String id;  //ES中id不能定義為Long    private String username;    private String password;    private int level;    @Field(type = FieldType.Keyword)    private List roles;}復(fù)制代碼

添加操作es的dao

ElasticsearchRepository 遵循Spring-data的規(guī)范,所以操作es,就相當(dāng)于我們使用jpa去操作數(shù)據(jù)庫一樣

package com.aims.springbootes.dao;import com.aims.springbootes.entity.SysUser;import org.springframework.data.domain.Page;import org.springframework.data.domain.Pageable;import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;import org.springframework.stereotype.Repository;import java.util.List;/** * 第一種方式,類似于JPA,編寫一個ElasticsearchRepository *  第一個泛型為Bean的類型 *  第二個泛型為Bean的主鍵類型 */@Repositorypublic interface SysUserDao extends ElasticsearchRepository {}復(fù)制代碼

添加配置信息

spring:    elasticsearch:      rest:        uris: http://localhost:9200復(fù)制代碼

編寫test,測試添加數(shù)據(jù)到ES中

這里通過往ES中塞入1000條數(shù)據(jù),我們運(yùn)行下,但是我們現(xiàn)在不知道有沒有插入進(jìn)去。

@Test    public void testInsert() {        List list = new ArrayList<>();        list.add("teacher");        list.add("student");        list.add("admin");        list.add("leader");        for (int i = 0; i < 1000; i++) {            int toIndex = new Random(1).nextInt(4);            SysUser build = SysUser.builder()                    .password("123456")                    .username("AI碼師")                    .level(i)                    .roles(list.subList(0, toIndex))                    .build();            sysUserDao.save(build);        }        System.out.printf("結(jié)束");    }復(fù)制代碼

在編寫一個查詢的,來驗(yàn)證是否插入成功

@Test    public void testFindAll(){        Iterable all = sysUserDao.findAll();        all.forEach((sysUser)->{            System.out.printf(sysUser.getId());        });    }復(fù)制代碼

到這已經(jīng)集成了ES,更多Spring-Data語法可以參考JPA的寫法,在IDEA中會有很多智能提示,幫助你寫的。 ?

集成Spring-data-es后的思考

使用spring-data-es 提供的ElasticsearchRepository 只能進(jìn)行簡單的增刪改查操作,如果碰到一些稍微復(fù)雜的聚合操作,他就很難應(yīng)付了,所以這里有幾個建議: ?

如果只需要做簡單增刪改查操作,直接繼承ElasticsearchRepository即可如果項(xiàng)目中有非常復(fù)雜的查詢或聚合操縱,可以使用結(jié)合ElasticsearchRestTemplate做一些復(fù)雜的操作,這個包不需要再引用其他依賴,已經(jīng)集成在spring-data-es里面了。

?如何利用客戶端快速編寫ES 語句

這里我要介紹一款軟件 kibana,它和es是老組合了,通過它能夠直接連接es,直接在頁面編寫ES語句,值得一提的是它的語法智能提示簡直不要太棒了

Docker安裝kibana

拉取鏡像

這個一定要和es的版本保持一致,防止api不兼容

docker pull kibana:7.6.2復(fù)制代碼

創(chuàng)建掛載目錄

mkdir -p /Users/lezai/docker/volumes/data/kibana/config/復(fù)制代碼

編輯配置文件

`vim /Users/lezai/docker/volumes/data/kibana/config/kibana.yml

## ** THIS IS AN AUTO-GENERATED FILE **## Default Kibana configuration for docker targetserver.name: kibanaserver.host: "0"elasticsearch.hosts: [ "http://elasticsearch:9200" ]xpack.monitoring.ui.container.elasticsearch.enabled: true

標(biāo)簽:

廣告

X 關(guān)閉

廣告

X 關(guān)閉