今天就跟大家聊聊有關ElasticSearch的解析及原理是什么,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。
10年積累的成都網站設計、成都網站制作經驗,可以快速應對客戶對網站的新想法和需求。提供各種問題對應的解決方案。讓選擇我們的客戶得到更好、更有力的網絡服務。我雖然不認識你,你也不認識我。但先網站設計后付款的網站建設流程,更有阿拉善盟免費網站建設讓你可以放心的選擇與我們合作。
一、ElasticSearch集群入門
A.什么是ElasticSearch
1.概念:
索引(index):是ElasticSearch存放數據的地方
文檔(document):是ElasticSearch中存儲的主要實體
文檔類型:文檔類型可以區(qū)分不同的對象
節(jié)點和集群:ElasticSearch支持在多臺協(xié)同工作的服務器上運行
分片:節(jié)點的計算能力或硬件限制不夠時,可以將數據切分,每部分是一個單獨的Apache Lucene索引,稱為分片(shard)
副本:為了提高查詢的吞吐量或實現(xiàn)高可用性,可以啟用分片副本,是對原始分片的一個精確拷貝
2.狀態(tài)查看:
http://localhost:9200/
http://localhost:9200/_cluster/health?pretty
3.操作:通過REST操作數據,GET、POST、PUT、DELETE
二、搜索數據
A.查詢和索引的過程
1.索引過程:準備發(fā)磅到ES的文檔并在索引中存儲文檔的過程
2.搜索過程:匹配滿足查詢條件的文檔的過程
3.分析過程:預備字段內容,并將其轉換為可以寫放Lucene索引的詞項(term)的過程
詞條化:輸入文本被分詞器轉換為一個詞條流
過濾:若干個過濾器處理詞條流中的詞條
4.分析器:是帶有零個或多個過濾器的分詞器
B.查詢ElasticSearch
1.將多個簡單查詢封閉為一個JSON格式對象發(fā)送給ElasticSearch,稱為:查詢DSL
2.語法:
curl -XGET 'localhost:9200/library/book/_search?q=title:crime&pretty=true'
curl -XGET 'localhost:9200/library/book/_search?pretty=true' -d '{"query":{"term":{"title":"crime"}}}'
curl -XGET 'localhost:9200/library/book/_search?pretty=true' -d @query.json
C.基本查詢
1.term:匹配給定字段有某個詞項的文檔
2.terms:匹配包含某些詞項的文檔
3.match:提取參數中難寫的取值,分析這些值 ,基于它們構建適當的查詢
4.multi_match:與match類似,不同在于通過fields配置可作用于多個字段上
5.query_string:支持Apache Lucene所有的查詢語法
6.field:query_string查詢的簡化版本
7.ids:過濾返回的文檔,只得到其中包含指定標識符的文檔,作用在_uid字段
8.prefix:找到某個字段以給定前綴開始的文檔
9.fuzzy_like_this:查詢得到與給定內容相似的所有文檔,基于模糊串,并選擇其產生的最好的區(qū)分詞項
10.fuzzy_like_this_field:與fuzzy_like_this類似,區(qū)別在于只作用在單個字段,不支持fields屬性
11.fuzzy:第三類模糊查詢通過計算給定詞項與文檔的編輯距離來得到結果,消耗CPU資源,對需要模糊匹配的場景比較有用
12.match_all:匹配索引中所有文檔的查詢
13.wildcard:允許我們在要查詢的內容中使用符*和?,在查詢體部分與term非常相似,性能差
14.more_like_this:等到與所提供文本相似的文檔
15.more_like_this_field:與more_like_this相似,不同在于只作用在半單個字段,不支持fields屬性
16.range:可以在某個范圍內在數值型字段和字符串型字段上查找文檔,只作用在單個字段上,查詢的參數封裝在字段的名稱中
D.過濾查詢結果
1.在query屬性下添加filter字段就可以在任何搜索中使用過濾器
2.range:將搜索范圍限制在字段取值在給定界限內的文檔
3.exists:只選擇有指定字段的文檔
4.missing:與exists相反,還可以指定將哪些值作為空值處理
5.script:使用一個計算得到的值過過濾文檔
6.type:返回符合指定類型的所有文檔
7.limit:限制對給定查詢的每個分片返回的文檔數目
8.ids:適合需要過濾某些具體文檔的場景
9.bool、and、or和not可以組合過濾器
10.使用"_name"可以命名過濾器
E.復合查詢
1.bool:should可以匹配也可以不匹配、must必須匹配、must_no必須不匹配
2.boosting:將兩個查詢封裝在一起,并降低其中一個查詢所返回文檔的分值
3.constant_score:用于封裝另一個查詢(過濾器),被封閉查詢(過濾器)返回的每個文檔都得到一個恒定分值,允許我們嚴格控制賦予被查詢或過濾器匹配的每個文檔的分值
4.indices:需要在多個索引上執(zhí)行一個查詢時非常有用
5.custom_filters_score:允許我們封裝一個查詢和若干個過濾器
6.custom_boost_factor:允許我們封裝另外一個查詢,并將該查詢返回的文檔的分值乘以一個指定的因子
7.custom_score:通過script為另一個查詢定制分值
F.數據排序
1."sort":[{"_score":"desc"}],默認按得分最高的
G.使用腳本
1.script:包含腳本代碼;lang:指示腳本使用的語言,默認mvel;params:包含參數的對象
2.可用的對象:doc,訪問基于計算分值或者字段取值找到的當前文檔;_source,可以訪問當前文檔的源,以及在其中定義的取值 ;_fields,用于訪問文檔中的字段取值
三、擴展結構與搜索
1.關閉動態(tài)映射:dynamic:false
2.空間索引:geo_point
四、搜索優(yōu)化
1.boost權值影響排序結果
2.同義詞過濾器synonym
3.跨度查詢:span_term、span_first、span_near、span_or、span_not,指一個字段中開始和結束的詞條位置
五、組合索引、分析和搜索
1.父子映射:_parent
2.從其他系統(tǒng)獲取數據:river
六、搜索之外
1.統(tǒng)計:query統(tǒng)計、filter統(tǒng)計、terms統(tǒng)計、range統(tǒng)計、histogram統(tǒng)計、statistical統(tǒng)計、terms_stats統(tǒng)計、geo_distance統(tǒng)計
2.相似
3.反查
七、管理集群
A.監(jiān)控集群狀態(tài)與健康狀況
1.健康狀態(tài):curl http://localhost:9200/_cluster/health?pretty
2.索引統(tǒng)計:curl http://localhost:9200/library/_stats?pretty
B.實例和集群狀態(tài)診斷工具
1.Bigdesk插件
2.elasticsearch-head插件
3.elasticsearch-paramedic插件
4.SPM工具
C.網關
1.可以使用本地、hadoop、Amazon s3
D.節(jié)點探索
1.默認允許使用zen探索(zen discovery),并提供了多播(multicast)和單播(unicast)兩種探索方法
八、問題處理
1.再平衡(rebalancing)是在集群中的各個不同的節(jié)點之間移動分片的過程
2.預熱:_warmer
看完上述內容,你們對ElasticSearch的解析及原理是什么有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝大家的支持。