時(shí)間:2023-05-30 12:12:01 | 來源:網(wǎng)站運(yùn)營
時(shí)間:2023-05-30 12:12:01 來源:網(wǎng)站運(yùn)營
ES從入門到實(shí)戰(zhàn):分詞
:將整句分拆為單詞保存的記錄
檢索
: 1)、紅海特工行動(dòng)? 2)、紅海行動(dòng)?docker pull elasticsearch:7.4.2 # 存儲(chǔ)和檢索數(shù)據(jù)
docker pull kibana:7.4.2 # 可視化檢索數(shù)據(jù)
注意:elasticsearch 要和 kibana 的版本保持一致!
mkdir -p /mydata/elasticsearch/config # 在mydata文件夾下創(chuàng)建es的config文件夾,將docker中es的配置掛載在外部,當(dāng)我們在linux虛擬機(jī)中修改es的配置文件時(shí),就會(huì)同時(shí)修改docker中的es的配置mkdir -p /mydata/elasticsearch/data #在mydata文件夾下創(chuàng)建es的data文件夾echo "http.host:0.0.0.0" >> /mydata/elasticsearch/config/elasticsearch.yml # [http.host:0.0.0.0]允許任何遠(yuǎn)程機(jī)器訪問es,并將其寫入es的配置文件中chmod -R 777 /mydata/elasticsearch/ # 保證權(quán)限問題
docker run --name elasticsearch -p 9200:9200 -p 9300:9300 /-e "discovery.type=single-node" /-e ES_JAVA_OPTS="-Xms64m -Xmx128m" /-v /mydata/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml /-v /mydata/elasticsearch/data:/usr/share/elasticsearch/data /-v /mydata/elasticsearch/plugins:/usr/share/elasticsearch/plugins /-d elasticsearch:7.4.2# docker run --name elasticsearch 創(chuàng)建一個(gè)es容器并起一個(gè)名字;# -p 9200:9200 將linux的9200端口映射到docker容器的9200端口,用來給es發(fā)送http請求# -p 9300:9300 9300是es在分布式集群狀態(tài)下節(jié)點(diǎn)之間的通信端口 / 換行符# -e 指定一個(gè)參數(shù),當(dāng)前es以單節(jié)點(diǎn)模式運(yùn)行# *注意,ES_JAVA_OPTS非常重要,指定開發(fā)時(shí)es運(yùn)行時(shí)的最小和最大內(nèi)存占用為64M和128M,否則就會(huì)占用全部可用內(nèi)存# -v 掛載命令,將虛擬機(jī)中的路徑和docker中的路徑進(jìn)行關(guān)聯(lián)# -d 后臺(tái)啟動(dòng)服務(wù)
安裝完 elasticsearch 后我們來啟動(dòng)一下,會(huì)發(fā)現(xiàn)使用docker ps
命令查看啟動(dòng)的容器時(shí)沒有找到我們的 es,這是因?yàn)槟壳?es 的配置文件的權(quán)限導(dǎo)致的,因此我們還需要修改一下 es 的配置文件的權(quán)限:docker start elasticsearch
再次啟動(dòng) es,使用docker ps
命令查看后發(fā)現(xiàn)容器還是沒有啟動(dòng),這是問什么呢? 我們使用docker logs elasticsearch
看一下 es 的啟動(dòng)日志:elasticsearch.yml
文件的時(shí)候k-v鍵值對配置錯(cuò)誤導(dǎo)致的,查看 yml 文件會(huì)發(fā)現(xiàn)我配置的內(nèi)容是這樣的:http.host:0.0.0.0
而實(shí)際上k-v鍵值對之間應(yīng)該有空格,注意 yml 配置文件中key: value格式冒號
后面要跟一個(gè)空格
。否則就會(huì)導(dǎo)致上面的錯(cuò)誤。 因此需要修改一下elasticsearch.yml
文件,修改為:http.host: 0.0.0.0
修改并保存之后再次使用docker start elasticsearch
啟動(dòng) es,使用docker ps
命令產(chǎn)看后可以看到我的 es 容器已經(jīng)啟動(dòng)起來了:http://124.220.176.158:9200/
,可以看到 es 啟動(dòng)成功后返回類似下面的數(shù)據(jù):注意124.220.176.158 是我的linux虛擬機(jī)的地址,讀者需要根據(jù)自己的虛擬機(jī)地址來進(jìn)行訪問
docker run --name kibana -e ELASTICSEARCH_HOSTS=http://124.220.176.158:9200 -p 5601:5601 /-d kibana:7.4.2
安裝完成后在瀏覽器地址欄訪問http://
124.220.176.158:5601/
,可以看到 kibana 已經(jīng)啟動(dòng)成功:使用 postman 或者在瀏覽器地址欄輸入請求路徑http://
124.220.176.158:9200/_cat/xxx
show databases
;索引
的哪個(gè)類型
下,指定用哪個(gè)唯一標(biāo)識(shí)PUT customer/external/1
; 在 customer 索引下的 external 類型下保存 1 號數(shù)據(jù)為PUT customer/external/1 |
---|
PUT
和POST
都可以;POST
新增。如果不指定id,會(huì)自動(dòng)生成 id。指定 id 就會(huì)修改這個(gè)數(shù)據(jù),并新增版本號;PUT
可以新增也可以修改。PUT 必須指定 id;由于 PUT 需要指定 id,我們一般都用來做修改http://192.168.56.10:9200/customer/external/
請求,注意沒有帶 id,使用的還是上面 put 方法中的參數(shù), 可以看到創(chuàng)建記錄成功,es 幫我們生成了一個(gè)id:GET customer/external/1
?if_seq_no=0&if_primary_term=1
字段; 我們在 postman 中使用 put 方法發(fā)送 http://192.168.56.10:9200/customer/external/1?if_seq_no=0&if_primary_term=1
請求,參數(shù)傳_update
的 post 請求更新數(shù)據(jù),在 postman 中使用 post 方法發(fā)送http://192.168.56.10:9200/customer/external/1/_update
請求,參數(shù)傳:_version
、_seq_no
也不會(huì)變:http://192.168.56.10:9200/customer/external/1
請求,可以看到以下結(jié)果,可以看到刪除文檔成功:not_found
結(jié)果:http://192.168.56.10:9200/customer
請求,可以看到以下結(jié)果,可以看到刪除索引成功:no such index [customer]
的 404 狀態(tài)的結(jié)果:POST /_bulk{"delete":{"_index":"website","_type":"blog","_id":"123"}}{"create":{"_index":"website","_type":"blog","_id":"123"}}{"title":"My first blog post"}{"index":{"_index":"website","_type":"blog"}}{"title":"My second blog post"}{"update":{"_index":"website","_type":"blog","_id":"123"}}{"doc":{"title":"My updated blog post"}}
上面直接使用了/_bulk
,沒有指定具體的索引,表示在 ES 全局執(zhí)行。執(zhí)行結(jié)果如下:action
(動(dòng)作) 。 如果一個(gè)單個(gè)的動(dòng)作因任何原因而失敗,它將繼續(xù)處理它后面剩余的動(dòng)作。 當(dāng) bulk API 返回時(shí),它將提供每個(gè)動(dòng)作的狀態(tài)(與發(fā)送的順序相同) ,所以你可以檢查是否一個(gè)指定的動(dòng)作是不是失敗了。POST bank/account/_bulk
:REST request URI
發(fā)送搜索參數(shù)(uri+檢索參數(shù)
)REST requestbody
來發(fā)送它們(uri+請求體
)uri+檢索參數(shù)
:uri+請求體 進(jìn)行檢索
:GET /example/_search{ "query": { "match_all": {} }, "sort": [ { "id": "asc" } ]}
1)、基本語法格式{ QUERY_NAME:{ ARGUMENT: VALUE, ARGUMENT: VALUE, ... }}
例如:{ QUERY_NAME:{ FIELD_NAME:{ ARGUMENT: VALUE, ARGUMENT: VALUE, ... } }}
例如:GET /bank/_search{ "query": { "match_all": {} }, "sort": [ { "balance": { "order": "desc" } } ], "from": 0, "size": 5}
- query 定義如何查詢;GET /example/_search{ "query": { "match_all": {} }, "sort": [ { "id": "asc" } ], "from": 0, "size": 5,"_source": ["name","counter"] }
只返回_source
中指定的字段,類似于 MySQL 中的select field_1,field_2,... from table
GET /example/_search{ "query": { "match": { "id": 1 } }}
GET /example/_search{ "query": { "match": { "name": "張" } }}
三
的所有記錄,并給出相關(guān)性得分GET /example/_search{ "query": { "match_phrase": { "name": "張 三" } }}
GET /example/_search{ "query": { "multi_match": { "query": "1", "fields": ["id","counter"] } }}
GET /example/_search{ "query": { "bool": { "must": [ { "match": { "id": 2 } }, { "match": { "name": "張三" } } ] } }}
must_not:子句(查詢)不得出現(xiàn)在匹配的文檔中BooleanQuery
。它是使用一個(gè)或多個(gè)布爾子句構(gòu)建的,每個(gè)子句都具有類型的出現(xiàn)。發(fā)生類型為:must
查詢?yōu)槔?br>filter
來替代must
查詢,需要注意的是,使用filter
查詢出的結(jié)果和must
查詢出的結(jié)果是一致的,差異僅是沒有相關(guān)性得分:should
之后還可以加上filter
條件進(jìn)行過濾:全文檢索字段用 match,其他非 text 字段匹配用 term
。GET /example/_search{ "query": { "term": { "id":1 } }}
注意
:如果對于文本值使用 term 檢索時(shí),并不會(huì)進(jìn)行分詞,而是精確檢索,所以可能會(huì)匹配不到數(shù)據(jù):分組和提取數(shù)據(jù)
的能力。 最簡單的聚合方法大致等于 SQL GROUP BY
和 SQL 聚合函數(shù)
。 在 Elasticsearch 中,您有執(zhí)行搜索返回 hits (命中結(jié)果),并且同時(shí)返回聚合結(jié)果, 把一個(gè)響應(yīng)中的所有hits(命中結(jié)果)分隔開的能力。這是非常強(qiáng)大且有效的,您可以執(zhí)行查詢和多個(gè)聚合, 并且在一次使用中得到各自的(任何一個(gè)的)返回結(jié)果,使用一次簡潔和簡化的 API 來避免網(wǎng)絡(luò)往返。"aggregations" : { "<aggregation_name>" : { "<aggregation_type>" : { <aggregation_body> } [,"meta" : { [<meta_data_body>] } ]? [,"aggregations" : { [<sub_aggregation>]+ } ]? } [,"<aggregation_name_2>" : { ... } ]*}
text
,keyword
long
, integer
, short
, byte
, double
, float
, half_float
, scaled_float
date
boolean
binary
geo_point
緯度/經(jīng)度坐標(biāo)geo_shape
用于多邊形等復(fù)雜形狀ip
用于描述 IPv4 和 IPv6 地址completion
提供自動(dòng)完成提示token_count
用來統(tǒng)計(jì)字符串中詞條的數(shù)量attachment
數(shù)據(jù)類型。query-dsl
)的查詢Mapping 是用來定義一個(gè)文檔(document),以及它所包含的屬性(field)是如何存儲(chǔ)和索引的
。比如,使用mapping來定義:GET bank/_mapping
PUT /my-index{ "mappings": {//映射規(guī)則 "properties": { "age": { "type": "integer" }, "email": { "type": "keyword" },//keyword不會(huì)進(jìn)行全文檢索 "name": { "type": "text" }//text保存的時(shí)候進(jìn)行分詞,搜索的時(shí)候進(jìn)行全文檢索 } }}
3)、新版本改變解決
: 1)、將索引從多類型遷移到單類型,每種類型文檔一個(gè)獨(dú)立索引 2)、將已存在的索引下的類型數(shù)據(jù),全部遷移到指定位置即可。詳見數(shù)據(jù)遷移關(guān)鍵詞:實(shí)戰(zhàn),入門
客戶&案例
營銷資訊
關(guān)于我們
微信公眾號
版權(quán)所有? 億企邦 1997-2025 保留一切法律許可權(quán)利。