ELK 設置定時清理腳本清理索引
904
2025-03-31
elasticsearch-Java Client類型
Node Client
1) 客戶端節點本身也是elasticsearch節點
2)也進入集群,和其他ElasticSearch節點一樣
3)升級維護麻煩(詞庫、配置等等)
https://www.elastic.co/guide/en/elasticsearch/client/java-api/2.2/index.html
TransportClient
1)更加輕量級
2)客戶端socket連接到es集群
3)早期版本需要完全一致
ElasticSearch-TransportClient環境準備
Eclipse 開發工具
添加Maven 依賴
ElasticSearch-TransportClient連接
TransportClient 測試連接ES集群
client.transport.sniff嗅探功能
TransportClient 生成環境連接ES集群
ElasticSearch-Document APIs
Index API
Get API
Delete API
Delete By Query API
Update API
Multi Get API
Bulk API
Using Bulk Processor
ElasticSearch-搜索-原理
ElasticSearch-搜索-問題
返回數據數量問題
如果數據分散在默認的5個分片上,ES會向5個分片同時發出請求,每個分片都返回10條數據,最終會返回總數據為:5*10=50條數據,遠遠大于用戶請求
返回數據排名問題
每個分片計算符合條件的前10條數據都是基于自己分片的數據進行打分計算的。計算分值(score)使用的詞頻和文檔頻率等信息都是基于自己分片的數據進行的,而ES進行整體排名是基于每個分片計算后的分值進行排序的(打分依據就不一致,最終對這些數據統一排名的時候就不準確了)
ElasticSearch-搜索-問題解決思路
返回數據數量問題:
第一步:先從每個分片匯總查詢的數據id,進行排名,取前10條數據
第二步:根據這10條數據id,到不同分片獲取數據
返回數據排名問題:
將各個分片打分標準統一;
ElasticSearch-搜索-SearchType-類型一
query and fetch
向索引的所有分片(shard)都發出查詢請求,各分片返回的時候把元素文檔(document)和計算后的排名信息一起返回。
優點:
這種搜索方式是最快的。因為相比后面的幾種搜索方式,這種查詢方法只需要去shard查詢一次。
缺點:
各個shard返回的結果的數量之和可能是用戶要求的size的n倍。
https://www.elastic.co/guide/en/elasticsearch/reference/2.4/search-request-search-type.html
ElasticSearch-搜索-SearchType-類型二
query then fetch(es默認的搜索方式)
實現原理:
第一步,先向所有的shard發出請求,各分片只返回文檔id(注意,不包括文檔document)和排名相關的信息(也就是文檔對應的分值),然后按照各分片返回的文檔的分數進行重新排序和排名,取前size個文檔。
第二步,根據文檔id去相關的shard取document。這種方式返回的document數量與用戶要求的大小是相等的。
優點:
返回的數據量是準確的。
缺點:
數據排名不準確且性能一般。
ElasticSearch-搜索-SearchType-類型三
DFS query and fetch
這種方式比第一種類型多了一個DFS步驟,它可以更精確控制搜索打分和排名。
實現原理:
第一步:先對所有分片發送請求,把所有分片中的詞頻和文檔頻率等打分依據全部匯總到一塊。
第二步:然后再執行后面的操作后續操作
優點:
數據排名準確。
缺點:
搜索性能一般,且返回的數據量不準確,可能返回(N*分片數量)的數據。
ElasticSearch-搜索-SearchType-類型四
DFS query then fetch
比第2種方式多了一個DFS步驟。
實現原理:
第一步:先對所有分片發送請求,把所有分片中的詞頻和文檔頻率等打分依據全部匯總到一塊。
第二步:然后再執行后面的操作后續操作
優點:
返回的數據量是準確的,數據排名也是準確的。
缺點:
性能最差【這個最差只是表示在這四種查詢方式中性能最慢,也不至于不能忍受,如果對查詢性能要求不是非常高,而對查詢準確度要求比較高的時候可以考慮這個】
ElasticSearch-搜索-SearchType-總結
從性能考慮來說,QUERY_AND_FETCH是最快的,DFS_QUERY_THEN_FETCH是最慢的。
從搜索的準確度來說,DFS要比非DFS的準確度更高。
ElasticSearch-搜索-SearchType-示例操作:
ElasticSearch-查詢-query
查詢:query
分頁:from/size
排序:sort
過濾:filter
按查詢匹配度排序
高亮顯示:highlight(后面結合實例講解)
ElasticSearch-aggregations
統計:aggregations
根據字段進行分組統計
根據字段分組,統計其他字段的值
size設置為0,會獲取所有數據,否則,默認只會返回前10個分組的數據
ElasticSearch-aggregations-實例一:
統計相同年齡學員個數
ElasticSearch-aggregations-實例二:
ElasticSearch-分頁
SQL 語句分頁:limit m,n:
m:從哪條結果開始
n:size:每次返回多少個結果
Elasticsearch使用的是from以及size兩個參數:
from:從哪條結果開始,默認值為0
size:每次返回多少個結果,默認值為10
假設每頁顯示5條結果,那么1至3頁的請求就是:
GET /_search?size=5
GET /_search?size=5&from=5
GET /_search?size=5&from=10
注意
不要一次請求過多或者頁碼過大的結果,這么會對服務器造成很大的壓力。因為它們會在返回前排序。一個請求會經過多個分片。每個分片都會生成自己的排序結果。然后再進行集中整理,以確保最終結果的正確性。
ElasticSearch-分頁-實例
ElasticSearch-支持多索引和多類型查詢
ElasticSearch-分片查詢方式
randomizeacross shards:隨機選擇分片查詢數據,es的默認方式
_local:優先在本地節點有的分片中查詢,沒有的話再在其它節點查詢。
_only_local:只在本地節點有的分片中查詢。
_primary:只在主分片中查詢。
_replica:只在副本中查詢。
_primary_first:優先在主分片中查詢,然后在副本中查詢。
_replica_first:優先在副本中查詢,然后在主分片中查詢。
_only_node:只在指定id的節點里面進行查詢。
_prefer_node:優先在指定的節點上執行查詢。
_shards:查詢指定分片的數據
ElasticSearch-極速查詢
Es將數據存儲在不同的分片中,根據文檔id通過內部算法得出要將文檔存儲在哪個分片上,所以在查詢時只要指定在對應的分片上進行查詢就可以實現基于es的極速查詢。
知道數據在那個分片上,是解決問題的關鍵。
實現方式:我們可以通過路由參數來設置數據存儲在同一個分片中,setRouting("") org.elasticsearch.cluster.routing
Java API Elasticsearch
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。