国产亚洲精品福利在线无卡一,国产精久久一区二区三区,亚洲精品无码国模,精品久久久久久无码专区不卡

當(dāng)前位置: 首頁 > news >正文

國外獨(dú)立站建站站長工具seo綜合查詢推廣

國外獨(dú)立站建站,站長工具seo綜合查詢推廣,助孕網(wǎng)站優(yōu)化推廣,php網(wǎng)站做代理服務(wù)器文章目錄 初識 elasticsearch了解 ES倒排索引ES 的一些概念安裝es、kibana安裝elasticsearch部署kibana 分詞器安裝IK分詞器ik分詞器-拓展詞庫 索引庫操作mapping 映射屬性索引庫的 CRUD 文檔操作添加文檔查看、刪除文檔修改文檔Dynamic Mapping RestClient 操作索引庫什么是Re…

文章目錄

  • 初識 elasticsearch
    • 了解 ES
    • 倒排索引
    • ES 的一些概念
    • 安裝es、kibana
      • 安裝elasticsearch
      • 部署kibana
    • 分詞器
      • 安裝IK分詞器
      • ik分詞器-拓展詞庫
  • 索引庫操作
    • mapping 映射屬性
    • 索引庫的 CRUD
  • 文檔操作
    • 添加文檔
    • 查看、刪除文檔
    • 修改文檔
    • Dynamic Mapping
  • RestClient 操作索引庫
    • 什么是RestClient
    • 創(chuàng)建索引庫
    • 刪除索引庫
    • 判斷索引庫是否存在
  • RestClient操作文檔
    • 新增文檔
    • 查詢文檔
    • 修改文檔
    • 刪除文檔
    • 批量導(dǎo)入文檔


初識 elasticsearch

了解 ES

Elasticsearch 是一款非常強(qiáng)大的開源搜索引擎,可以幫助我們從海量數(shù)據(jù)中快速找到需要的內(nèi)容。

在這里插入圖片描述

elasticsearch 結(jié)合 kibana、Logstash、Beats,也就是 elastic stack(ELK)。被廣泛應(yīng)用在日志數(shù)據(jù)分析、實(shí)時(shí)監(jiān)控等領(lǐng)域。

在這里插入圖片描述

elasticsearch 是 elastic stack 的核心,負(fù)責(zé)存儲、搜索、分析數(shù)據(jù)

在這里插入圖片描述

Lucene是一個(gè)Java語言的搜索引擎類庫,是Apache公司的頂級項(xiàng)目,由DougCutting于1999年研發(fā)。官網(wǎng)地址:https://lucene.apache.org/ 。

Lucene的優(yōu)勢:

  • 易擴(kuò)展
  • 高性能(基于倒排索引)

Lucene的缺點(diǎn):

  • 只限于Java語言開發(fā)
  • 學(xué)習(xí)曲線陡峭
  • 不支持水平擴(kuò)展

2004年Shay Banon基于Lucene開發(fā)了Compass
2010年Shay Banon 重寫了Compass,取名為Elasticsearch。
官網(wǎng)地址: https://www.elastic.co/cn/

目前最新的版本是:7.12.1
相比與lucene,elasticsearch具備下列優(yōu)勢:

  • 支持分布式,可水平擴(kuò)展
  • 提供Restful接口,可被任何語言調(diào)用

搜索引擎技術(shù)排名:

  1. Elasticsearch:開源的分布式搜索引擎
  2. Splunk:商業(yè)項(xiàng)目
  3. Solr:Apache的開源搜索引擎

什么是 elasticsearch?

  • 一個(gè)開源的分布式搜索引擎,可以用來實(shí)現(xiàn)搜索、日志統(tǒng)計(jì)、分析、系統(tǒng)監(jiān)控等功能

什么是 elastic stack(ELK)?

  • 是以elasticsearch為核心的技術(shù)棧,包括beats、Logstash、kibana、elasticsearch

什么是 Lucene?

  • 是Apache的開源搜索引擎類庫,提供了搜索引擎的核心API

倒排索引

傳統(tǒng)數(shù)據(jù)庫(如MySQL)采用正向索引,例如給下表(tb_goods)中的id創(chuàng)建索引:

在這里插入圖片描述

正向索引和倒排索引

elasticsearch采用倒排索引:

  • 文檔(document):每條數(shù)據(jù)就是一個(gè)文檔
  • 詞條(term):文檔按照語義分成的詞語

在這里插入圖片描述

posting list

倒排索引中包含兩部分內(nèi)容:

  • 詞條詞典(Term Dictionary):記錄所有詞條,以及詞條與倒排列表(Posting List)之間的關(guān)系,會給詞條創(chuàng)建索引,提高查詢和插入效率
  • 倒排列表(Posting List):記錄詞條所在的文檔id、詞條出現(xiàn)頻率 、詞條在文檔中的位置等信息
    • 文檔id:用于快速獲取文檔
    • 詞條頻率(TF):文檔在詞條出現(xiàn)的次數(shù),用于評分

在這里插入圖片描述

什么是文檔和詞條?

  • 每一條數(shù)據(jù)就是一個(gè)文檔
  • 對文檔中的內(nèi)容分詞,得到的詞語就是詞條

什么是正向索引?

  • 基于文檔id創(chuàng)建索引。查詢詞條時(shí)必須先找到文檔,而后判斷是否包含詞條

什么是倒排索引?

  • 對文檔內(nèi)容分詞,對詞條創(chuàng)建索引,并記錄詞條所在文檔的信息。查詢時(shí)先根據(jù)詞條查詢到文檔id,而后獲取到文檔

ES 的一些概念

文檔

elasticsearch是面向文檔存儲的,可以是數(shù)據(jù)庫中的一條商品數(shù)據(jù),一個(gè)訂單信息。
文檔數(shù)據(jù)會被序列化為json格式后存儲在elasticsearch中。

在這里插入圖片描述

索引(index):相同類型的文檔的集合
映射(mapping):索引中文檔的字段約束信息,類似表的結(jié)構(gòu)約束

在這里插入圖片描述

概念對比

在這里插入圖片描述

架構(gòu)

Mysql:擅長事務(wù)類型操作,可以確保數(shù)據(jù)的安全和一致性
Elasticsearch:擅長海量數(shù)據(jù)的搜索、分析、計(jì)算

在這里插入圖片描述

文檔:一條數(shù)據(jù)就是一個(gè)文檔,es中是Json格式
字段:Json文檔中的字段
索引:同類型文檔的集合
映射:索引中文檔的約束,比如字段名稱、類型
elasticsearch與數(shù)據(jù)庫的關(guān)系:

  • 數(shù)據(jù)庫負(fù)責(zé)事務(wù)類型操作
  • elasticsearch 負(fù)責(zé)海量數(shù)據(jù)的搜索、分析、計(jì)算

安裝es、kibana

安裝elasticsearch

部署單點(diǎn)es

因?yàn)槲覀冞€需要部署kibana容器,因此需要讓es和kibana容器互聯(lián)。這里先創(chuàng)建一個(gè)網(wǎng)絡(luò):

docker network create es-net

加載鏡像

通過 docker pull 命令拉取

elasticsearch

docker pull elasticsearch:7.16.2

arm linux

docker pull arm64v8/elasticsearch:7.16.2

kibana

docker pull kibana:7.16.2

運(yùn)行

運(yùn)行docker命令,部署單點(diǎn)es:

docker run -d \--name es \-e "ES_JAVA_OPTS=-Xms512m -Xmx512m" \-e "discovery.type=single-node" \-v es-data:/usr/share/elasticsearch/data \-v es-plugins:/usr/share/elasticsearch/plugins \--privileged \--network es-net \-p 9200:9200 \-p 9300:9300 \
elasticsearch:7.16.2

命令解釋:

  • -e "cluster.name=es-docker-cluster":設(shè)置集群名稱
  • -e "http.host=0.0.0.0":監(jiān)聽的地址,可以外網(wǎng)訪問
  • -e "ES_JAVA_OPTS=-Xms512m -Xmx512m":內(nèi)存大小
  • -e "discovery.type=single-node":非集群模式
  • -v es-data:/usr/share/elasticsearch/data:掛載邏輯卷,綁定es的數(shù)據(jù)目錄
  • -v es-logs:/usr/share/elasticsearch/logs:掛載邏輯卷,綁定es的日志目錄
  • -v es-plugins:/usr/share/elasticsearch/plugins:掛載邏輯卷,綁定es的插件目錄
  • --privileged:授予邏輯卷訪問權(quán)
  • --network es-net :加入一個(gè)名為es-net的網(wǎng)絡(luò)中
  • -p 9200:9200:端口映射配置

在瀏覽器中輸入:http://10.211.55.6:9200 即可看到elasticsearch的響應(yīng)結(jié)果:

在這里插入圖片描述

部署kibana

kibana可以給我們提供一個(gè)elasticsearch的可視化界面,便于我們學(xué)習(xí)。

  1. 部署

運(yùn)行docker命令,部署kibana

docker run -d \
--name kibana \
-e ELASTICSEARCH_HOSTS=http://es:9200 \
--network=es-net \
-p 5601:5601  \
kibana:7.16.2
  • --network es-net :加入一個(gè)名為es-net的網(wǎng)絡(luò)中,與elasticsearch在同一個(gè)網(wǎng)絡(luò)中
  • -e ELASTICSEARCH_HOSTS=http://es:9200":設(shè)置elasticsearch的地址,因?yàn)閗ibana已經(jīng)與elasticsearch在一個(gè)網(wǎng)絡(luò),因此可以用容器名直接訪問elasticsearch
  • -p 5601:5601:端口映射配置

kibana啟動一般比較慢,需要多等待一會,可以通過命令:

docker logs -f kibana

查看運(yùn)行日志,當(dāng)查看到下面的日志,說明成功:

在這里插入圖片描述

此時(shí),在瀏覽器輸入地址訪問:http://10.211.55.6:5601,即可看到結(jié)果

在這里插入圖片描述

  1. DevTools

kibana 中提供了一個(gè)DevTools界面:

在這里插入圖片描述

這個(gè)界面中可以編寫DSL來操作elasticsearch。并且對DSL語句有自動補(bǔ)全功能。

分詞器

es在創(chuàng)建倒排索引時(shí)需要對文檔分詞;在搜索時(shí),需要對用戶輸入內(nèi)容分詞。但默認(rèn)的分詞規(guī)則對中文處理并不友好。
我們在kibana的DevTools中測試:

POST /_analyze
{"text": "java學(xué)習(xí)中,勿擾?程序員", "analyzer": "standard"
}

語法說明:

  • POST:請求方式
  • /_analyze:請求路徑,這里省略了http://10.211.55.6/:9200,有kibana幫我們補(bǔ)充
  • 請求參數(shù),json風(fēng)格:
    • analyzer:分詞器類型,這里是默認(rèn)的standard分詞器
    • text:要分詞的內(nèi)容

安裝IK分詞器

處理中文分詞,一般會使用IK分詞器。https://github.com/medcl/elasticsearch-analysis-ik

在線安裝ik插件

# 進(jìn)入容器內(nèi)部
docker exec -it elasticsearch /bin/bash# 在線下載并安裝
./bin/elasticsearch-plugin  install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.12.1/elasticsearch-analysis-ik-7.12.1.zip#退出
exit
#重啟容器
docker restart elasticsearch

離線安裝ik插件

1)查看數(shù)據(jù)卷目錄

安裝插件需要知道 elasticsearch 的 plugins 目錄位置,而我們用了數(shù)據(jù)卷掛載,因此需要查看 elasticsearch 的數(shù)據(jù)卷目錄,通過下面命令查看:

docker volume inspect es-plugins

顯示結(jié)果:

[{"CreatedAt": "2023-11-17T15:52:19+08:00","Driver": "local","Labels": null,"Mountpoint": "/var/lib/docker/volumes/es-plugins/_data","Name": "es-plugins","Options": null,"Scope": "local"}
]

說明plugins目錄被掛載到了:/var/lib/docker/volumes/es-plugins/_data 這個(gè)目錄中。

2)解壓縮分詞器安裝包

把ik分詞器解壓縮,重命名為ik

3)上傳到es容器的插件數(shù)據(jù)卷中

也就是/var/lib/docker/volumes/es-plugins/_data

4)重啟容器

# 4、重啟容器
docker restart es
# 查看es日志
docker logs -f es

5)測試

IK分詞器包含兩種模式:

  • ik_smart:最少切分

  • ik_max_word:最細(xì)切分

POST /_analyze
{"text": "java學(xué)習(xí)中,勿擾?程序員", "analyzer": "ik_max_word"
}

結(jié)果

{"tokens" : [{"token" : "java","start_offset" : 0,"end_offset" : 4,"type" : "ENGLISH","position" : 0},{"token" : "學(xué)習(xí)","start_offset" : 4,"end_offset" : 6,"type" : "CN_WORD","position" : 1},{"token" : "中","start_offset" : 6,"end_offset" : 7,"type" : "CN_CHAR","position" : 2},{"token" : "勿擾","start_offset" : 8,"end_offset" : 10,"type" : "CN_WORD","position" : 3},{"token" : "程序員","start_offset" : 11,"end_offset" : 14,"type" : "CN_WORD","position" : 4},{"token" : "程序","start_offset" : 11,"end_offset" : 13,"type" : "CN_WORD","position" : 5},{"token" : "員","start_offset" : 13,"end_offset" : 14,"type" : "CN_CHAR","position" : 6}]
}

ik分詞器-拓展詞庫

要拓展ik分詞器的詞庫,只需要修改一個(gè)ik分詞器目錄中的 config 目錄中的IkAnalyzer.cfg.xml 文件:

在這里插入圖片描述

然后在名為 ext.dic 的文件中,添加想要拓展的詞語即可:

在這里插入圖片描述

要禁用某些敏感詞條,只需要修改一個(gè)ik分詞器 目錄中的 config 目錄中的IkAnalyzer.cfg.xml 文件:

在這里插入圖片描述

然后在名為 stopword.dic 的文件中,添加想要拓展的詞語即可:

在這里插入圖片描述

分詞器的作用是什么?

  • 創(chuàng)建倒排索引時(shí)對文檔分詞
  • 用戶搜索時(shí),對輸入的內(nèi)容分詞

IK分詞器有幾種模式?

  • ik_smart:智能切分,粗粒度
  • ik_max_word:最細(xì)切分,細(xì)粒度

IK分詞器如何拓展詞條?如何停用詞條?

  • 利用config目錄的IkAnalyzer.cfg.xml文件添加拓展詞典和停用詞典
  • 在詞典中添加拓展詞條或者停用詞條

索引庫操作

mapping 映射屬性

mapping是對索引庫中文檔的約束,常見的mapping屬性包括:

  • type:字段數(shù)據(jù)類型,常見的簡單類型有:
    • 字符串:text(可分詞的文本)、keyword(精確值,例如:品牌、國家、ip地址)
    • 數(shù)值:long、integer、short、byte、double、float、
    • 布爾:boolean
    • 日期:date
    • 對象:object
  • index:是否創(chuàng)建索引,默認(rèn)為true
  • analyzer:使用哪種分詞器
  • properties:該字段的子字段

在這里插入圖片描述

mapping常見屬性有哪些?

  • type:數(shù)據(jù)類型
  • index:是否索引
  • analyzer:分詞器
  • properties:子字段

type常見的有哪些?

  • 字符串:text、keyword
  • 數(shù)字:long、integer、short、byte、double、float
  • 布爾:boolean
  • 日期:date
  • 對象:object

索引庫的 CRUD

ES中通過Restful請求操作索引庫、文檔。請求內(nèi)容用DSL語句來表示。創(chuàng)建索引庫和mapping的DSL語法如下:

在這里插入圖片描述

# 創(chuàng)建索引庫
PUT /wxx
{"mappings": {"properties": {"info": {"type": "text","analyzer": "ik_smart"},"email": {"type": "keyword","index": false},"name": {"type": "object","properties": {"firstName": {"type": "keyword"},"lastName": {"type": "keyword"}}}}}
}

在這里插入圖片描述

查看索引庫語法:

GET /索引庫名 

示例:

GET /wxx

刪除索引庫的語法:

DELETE /索引庫名 

示例:

DELETE /wxx

修改索引庫

索引庫和mapping一旦創(chuàng)建無法修改,但是可以添加新的字段,語法如下:

PUT /索引庫名/_mapping
{"properties": {"新字段名":{"type": "integer"}}
}

示例:

PUT /wxx/_mapping
{"properties": {"age":{"type": "integer"}}
}

索引庫操作有哪些?

  • 創(chuàng)建索引庫:PUT /索引庫名
  • 查詢索引庫:GET /索引庫名
  • 刪除索引庫:DELETE /索引庫名
  • 添加字段:PUT /索引庫名/_mapping

文檔操作

添加文檔

新增文檔的 DSL 語法如下:

在這里插入圖片描述

查看、刪除文檔

查看文檔語法:

GET /索引庫名/_doc/文檔id 

示例:

GET /wxx/_doc/文檔id 

刪除索引庫的語法:

DELETE /索引庫名/_doc/文檔id 

示例:

DELETE /wxx/_doc/文檔id 

修改文檔

方式一:全量修改,會刪除舊文檔,添加新文檔

在這里插入圖片描述

方式二:增量修改,修改指定字段值

在這里插入圖片描述

文檔操作有哪些?

  • 創(chuàng)建文檔:POST /索引庫名/_doc/文檔id { json文檔 }
  • 查詢文檔:GET /索引庫名/_doc/文檔id
  • 刪除文檔:DELETE /索引庫名/_doc/文檔id
  • 修改文檔:
    • 全量修改:PUT /索引庫名/_doc/文檔id { json文檔 }
    • 增量修改:POST /索引庫名/_update/文檔id { “doc”: {字段}}

Dynamic Mapping

當(dāng)我們向ES中插入文檔時(shí),如果文檔中字段沒有對應(yīng)的mapping,ES會幫助我們字段設(shè)置mapping,規(guī)則如下:
在這里插入圖片描述

我們插入一條新的數(shù)據(jù),其中包含4個(gè)沒有mapping的字段:

在這里插入圖片描述

  • 插入文檔時(shí),es會檢查文檔中的字段是否有mapping,如果沒有則按照默認(rèn)mapping規(guī)則來創(chuàng)建索引。
  • 如果默認(rèn)mapping規(guī)則不符合你的需求,一定要自己設(shè)置字段mapping

RestClient 操作索引庫

什么是RestClient

ES官方提供了各種不同語言的客戶端,用來操作ES。這些客戶端的本質(zhì)就是組裝DSL語句,通過http請求發(fā)送給ES。官方文檔地址:https://www.elastic.co/guide/en/elasticsearch/client/index.html

在這里插入圖片描述

利用JavaRestClient實(shí)現(xiàn)創(chuàng)建、刪除索引庫,判斷索引庫是否存在

根據(jù)課前資料提供的酒店數(shù)據(jù)創(chuàng)建索引庫,索引庫名為hotel,mapping屬性根據(jù)數(shù)據(jù)庫結(jié)構(gòu)定義。
基本步驟如下:

  1. 導(dǎo)入課前資料Demo
  2. 分析數(shù)據(jù)結(jié)構(gòu),定義mapping屬性
  3. 初始化JavaRestClient
  4. 利用JavaRestClient創(chuàng)建索引庫
  5. 利用JavaRestClient刪除索引庫
  6. 利用JavaRestClient判斷索引庫是否存在
DROP TABLE IF EXISTS `tb_hotel`;
CREATE TABLE `tb_hotel`  (`id` bigint(20) NOT NULL COMMENT '酒店id',`name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '酒店名稱',`address` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '酒店地址',`price` int(10) NOT NULL COMMENT '酒店價(jià)格',`score` int(2) NOT NULL COMMENT '酒店評分',`brand` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '酒店品牌',`city` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '所在城市',`star_name` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '酒店星級,1星到5星,1鉆到5鉆',`business` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '商圈',`latitude` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '緯度',`longitude` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '經(jīng)度',`pic` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '酒店圖片',PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Compact;

步驟1:導(dǎo)入課前資料Demo

首先導(dǎo)入課前資料提供的數(shù)據(jù)庫數(shù)據(jù):

在這里插入圖片描述

然后導(dǎo)入課前資料提供的項(xiàng)目:

在這里插入圖片描述

步驟2:分析數(shù)據(jù)結(jié)構(gòu)

mapping要考慮的問題:
字段名、數(shù)據(jù)類型、是否參與搜索、是否分詞、如果分詞,分詞器是什么?

ES中支持兩種地理坐標(biāo)數(shù)據(jù)類型:

  • geo_point:由緯度(latitude)和經(jīng)度(longitude)確定的一個(gè)點(diǎn)。例如:“32.8752345, 120.2981576”
  • geo_shape:有多個(gè)geo_point組成的復(fù)雜幾何圖形。例如一條直線,“LINESTRING (-77.03653 38.897676, -77.009051 38.889939)”

字段拷貝可以使用copy_to屬性將當(dāng)前字段拷貝到指定字段。示例:

在這里插入圖片描述

步驟3:初始化JavaRestClient

  1. 引入es的RestHighLevelClient依賴:
<dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-high-level-client</artifactId>
</dependency>
  1. 因?yàn)镾pringBoot默認(rèn)的ES版本是7.6.2,所以我們需要覆蓋默認(rèn)的ES版本:
<properties><java.version>1.8</java.version><elasticsearch.version>7.16.2</elasticsearch.version>
</properties>
  1. 初始化RestHighLevelClient:
this.client = new RestHighLevelClient(RestClient.builder(HttpHost.create("http://10.211.55.6:9200")
));

創(chuàng)建索引庫

步驟4:創(chuàng)建索引庫

在這里插入圖片描述

@Test
void testCreateHotelIndex() throws IOException {// 1. 創(chuàng)建Request對象CreateIndexRequest request = new CreateIndexRequest("hotel");// 2. 準(zhǔn)備請求參數(shù):DSL語句request.source(HotelConstants.MAPPING_TEMPLATE, XContentType.JSON);// 3. 發(fā)送請求client.indices().create(request, RequestOptions.DEFAULT);
}
# 酒店的mapping
PUT /hotel
{"mappings": {"properties": {"all": {"type": "text","analyzer": "ik_max_word"},"id": {"type": "keyword"},"name": {"type": "text","analyzer": "ik_max_word","copy_to": "all"},"address": {"type": "keyword","index": false},"price": {"type": "integer"},"score": {"type": "integer"},"brand": {"type": "keyword","copy_to": "all"},"city": {"type": "keyword"},"starName": {"type": "keyword"},"business": {"type": "keyword","copy_to": "all"},"location": {"type": "geo_point"},"pic": {"type": "keyword","index": false}}}
}

刪除索引庫

步驟5:刪除索引庫、判斷索引庫是否存在

刪除索引庫代碼如下:

在這里插入圖片描述

判斷索引庫是否存在

判斷索引庫是否存在

在這里插入圖片描述

索引庫操作的基本步驟:

  • 初始化RestHighLevelClient
  • 創(chuàng)建XxxIndexRequest。XXX是Create、Get、Delete
  • 準(zhǔn)備DSL( Create時(shí)需要)
  • 發(fā)送請求。調(diào)用RestHighLevelClient#indices().xxx()方法,xxx是create、exists、delete

RestClient操作文檔

利用JavaRestClient實(shí)現(xiàn)文檔的CRUD

去數(shù)據(jù)庫查詢酒店數(shù)據(jù),導(dǎo)入到hotel索引庫,實(shí)現(xiàn)酒店數(shù)據(jù)的CRUD。
基本步驟如下:

  1. 初始化JavaRestClient
  2. 利用JavaRestClient新增酒店數(shù)據(jù)
  3. 利用JavaRestClient根據(jù)id查詢酒店數(shù)據(jù)
  4. 利用JavaRestClient刪除酒店數(shù)據(jù)
  5. 利用JavaRestClient修改酒店數(shù)據(jù)

新增文檔

步驟1:初始化JavaRestClient

新建一個(gè)測試類,實(shí)現(xiàn)文檔相關(guān)操作,并且完成JavaRestClient的初始化

在這里插入圖片描述

步驟2:添加酒店數(shù)據(jù)到索引庫

先查詢酒店數(shù)據(jù),然后給這條數(shù)據(jù)創(chuàng)建倒排索引,即可完成添加:

在這里插入圖片描述

@SpringBootTest
public class HotelDocumentTest {@Autowiredprivate IHotelService hotelService;private RestHighLevelClient client;@Testvoid testInit(){System.out.println(client);}@Testvoid testAddDocument() throws IOException {// 根據(jù) id 查詢酒店數(shù)據(jù)Hotel hotel = hotelService.getById(38665L);// 轉(zhuǎn)換為文檔類型HotelDoc hotelDoc = new HotelDoc(hotel);// 1. 準(zhǔn)備Request對象IndexRequest request = new IndexRequest("hotel").id(hotel.getId().toString());// 2. 準(zhǔn)備Json文檔request.source(JSON.toJSONString(hotelDoc), XContentType.JSON);// 3. 發(fā)送請求client.index(request, RequestOptions.DEFAULT);}@BeforeEachvoid setUp(){this.client = new RestHighLevelClient(RestClient.builder(HttpHost.create("http://10.211.55.6:9200")));}@AfterEachvoid tearDown() throws IOException {this.client.close();}
}

在這里插入圖片描述

運(yùn)行后查看是否添加成功

在這里插入圖片描述

查詢文檔

步驟3:根據(jù)id查詢酒店數(shù)據(jù)

根據(jù)id查詢到的文檔數(shù)據(jù)是json,需要反序列化為java對象:

在這里插入圖片描述

修改文檔

步驟4:根據(jù)id修改酒店數(shù)據(jù)

修改文檔數(shù)據(jù)有兩種方式:
方式一:全量更新。再次寫入id一樣的文檔,就會刪除舊文檔,添加新文檔
方式二:局部更新。只更新部分字段,我們演示方式二

在這里插入圖片描述

刪除文檔

步驟5:根據(jù)id刪除文檔數(shù)據(jù)

刪除文檔代碼如下:

在這里插入圖片描述

文檔操作的基本步驟:

  • 初始化RestHighLevelClient
  • 創(chuàng)建XxxRequest。XXX是Index、Get、Update、Delete
  • 準(zhǔn)備參數(shù)(Index和Update時(shí)需要)
  • 發(fā)送請求。調(diào)用RestHighLevelClient#.xxx()方法,xxx是index、get、update、delete
  • 解析結(jié)果(Get時(shí)需要)

批量導(dǎo)入文檔

利用JavaRestClient批量導(dǎo)入酒店數(shù)據(jù)到ES

需求:批量查詢酒店數(shù)據(jù),然后批量導(dǎo)入索引庫中
思路:

  1. 利用mybatis-plus查詢酒店數(shù)據(jù)
  2. 將查詢到的酒店數(shù)據(jù)(Hotel)轉(zhuǎn)換為文檔類型數(shù)據(jù)(HotelDoc)
  3. 利用JavaRestClient中的Bulk批處理,實(shí)現(xiàn)批量新增文檔,示例代碼如下

在這里插入圖片描述

@Testvoid testBulkRequest() throws IOException {// 批量查詢酒店數(shù)據(jù)List<Hotel> hotels = hotelService.list();// 1. 創(chuàng)建 RequestBulkRequest request = new BulkRequest();// 2. 準(zhǔn)備參數(shù),添加多個(gè)新增的Requestfor (Hotel hotel : hotels) {// 轉(zhuǎn)換為文檔類型 HotelDocHotelDoc hotelDoc = new HotelDoc(hotel);// 創(chuàng)建新增文檔的Request對象request.add(new IndexRequest("hotel").id(hotelDoc.getId().toString()).source(JSON.toJSONString(hotelDoc), XContentType.JSON));}// 3. 發(fā)送請求client.bulk(request, RequestOptions.DEFAULT);}

在這里插入圖片描述

http://aloenet.com.cn/news/45496.html

相關(guān)文章:

  • 廣州網(wǎng)匠營銷型網(wǎng)站建設(shè)公司濟(jì)南網(wǎng)站seo
  • Wordpress網(wǎng)站調(diào)用代碼2024年新冠疫情最新消息今天
  • 陽江市企業(yè)網(wǎng)站優(yōu)化企業(yè)如何進(jìn)行宣傳和推廣
  • 網(wǎng)站建設(shè)優(yōu)化服務(wù)特色高端網(wǎng)站設(shè)計(jì)
  • 重慶唐卡裝飾公司深圳市企業(yè)網(wǎng)站seo
  • 建網(wǎng)站開源代碼全國新冠疫情最新消息
  • wordpress用戶名忘記密碼廣州seo站內(nèi)優(yōu)化
  • 網(wǎng)站內(nèi)容建設(shè)的原則是什么意思整合營銷策略有哪些
  • 用老域名做網(wǎng)站還是新域名武漢seo首頁優(yōu)化技巧
  • ??谧鼍W(wǎng)站公司哪家好網(wǎng)頁快照
  • 網(wǎng)站工程師的職責(zé)網(wǎng)站推廣的6個(gè)方法是什么
  • url怎么做網(wǎng)站百度上海分公司
  • 網(wǎng)絡(luò)營銷推廣方案pdf站長工具seo綜合查詢
  • soho外貿(mào)建站拼多多seo 優(yōu)化軟件
  • 網(wǎng)站登錄不上怎么回事站長是什么職位
  • 電子工程網(wǎng)官方網(wǎng)站網(wǎng)址怎么注冊
  • 做搜狗網(wǎng)站優(yōu)化搜索數(shù)據(jù)
  • 網(wǎng)站域名設(shè)計(jì)推薦百度推廣培訓(xùn)班
  • 網(wǎng)站建設(shè)遠(yuǎn)程工作搜索引擎優(yōu)化方案
  • 網(wǎng)站建設(shè)前期預(yù)算端點(diǎn)seo博客
  • 物流企業(yè)網(wǎng)站有哪些百度網(wǎng)站優(yōu)化排名
  • 做公司網(wǎng)站 找誰做網(wǎng)絡(luò)營銷主要學(xué)什么
  • 做網(wǎng)站 信息集成過程的順序品牌營銷策略案例
  • UE做的比較好的網(wǎng)站軟文的概念是什么
  • 開獎網(wǎng)站怎么做營銷推廣網(wǎng)
  • 長春老火車站圖片如何宣傳推廣自己的產(chǎn)品
  • 用網(wǎng)站做淘客怎么做株洲seo優(yōu)化推薦
  • 房地產(chǎn)銷售自我介紹大兵seo博客
  • 淘寶網(wǎng)站是什么語言做的qq群推廣
  • 政府大型門戶網(wǎng)站建設(shè)方案seo專業(yè)培訓(xùn)班