- 基於Apache Lucene 被認爲是迄今爲止最好的,最先進的,性能最好的,功能最全的搜索引擎庫
- Elasticsearch :
- 分佈式的實時的文件存儲,每個字段都被索引並可以被搜索。
- 分佈式的實時分析搜索引擎
- 可動態擴展,處理PB級別的數據
- Java API 提供兩種內置的客戶端
- node client :節點客戶端
- 以無數據的節點的身份加入到集羣中,知道集羣的位置,能夠將請求直接發送到對應的節點上。
- Transport client :傳輸客戶端
- 更輕量的客戶端能夠發送請求到遠程集羣,不加入集羣,只是簡單的轉發請求到集羣中的節點。
- 9300端口鏈接,使用es的傳輸協議
- node client :節點客戶端
- 基本命令:
- _search:搜索命令
- query:filtered
- about :全文搜索 match about
- match_phrase:短語搜索
- hightlight:高亮
- aggs all_interests:可以分級彙總
- 倒排索引
- 使用倒排索引,所以es很快
- 採用樂觀併發控制,用version版本號來進行確保修改和刪除的
- 深分頁問題
- 最多1000-5000也就是一次查詢10000條
- es的分頁原理是:size 一頁的條數,from跳過開始的結果
- 在集羣中分頁,需要把所有分片產生的結果彙總然後排序。
- 例子:假設一個集羣中有5個主分片,請求第一頁時,每個分片都要查詢頂端的10個結果,然後返回請求節點,請求節點排序後在選出TOP10結果。假如請求第1000頁,需要查詢每個分片數據頂端的10001-10010,然後請求節點對所有的結果也就 [分片數*(分頁數+size)]進行排序找出頂端的,在拋棄total -10個記錄。排序的結果隨着分頁的深度成倍的增長
- 可以動態的水平擴展
- 確切值查詢和全文文本查詢
- 確切值查詢:就是存在不存在
- 全文本:文章,話語,片段
- 分析和分析器
- 分析器:當存儲的時候會進行分析,進行索引
- 自定義字段的映射
- String
- index:三個屬性 analyed 需要分析這個字段,然後索引,not_analyzed 索引這個字段,但是不分析此字段,no 不索引這個字段 默認是 analyed
- String
- es默認的分析器:standard。可以用analyzer 來設置分析器: whitespace,simple english
- 結構化查詢
- query bool可以合併多個字句
- 過濾要比查詢快,因爲過濾有緩存
- term 過濾 terms 過濾 range 範圍過濾 gt 大於 gte 大於等於 lt 小於 lte 小於等於
- _validate/query 可以用來檢驗一天查詢語句是不是正確的 _validate/query?explain 可以返回更多的信息
- 相關性排序:默認排序 scor
- sort 排序 一般是日期來排序:“sort”:{“date”:{“order”:“desc”}} 會將日期轉換成毫秒進行排序,可以進行多級排序。多值排序可以選擇mode 包含 min max avg 或者sum模式
- 查詢的步驟:假設有note1 note2 note3,當note3得到一個查詢請求時,首先在本地建立一個隊列from+size,然後對其他note進行廣播,其他節點也取from+size的數據,返回給note3,note3 整理排序。取size個返回,其他的結果捨棄
- 掃描和滾屏:scan 和scroll 可以取會大量數據而不需要進行深分頁。scroll 每一次請求都會返回一個_scroll_id,如果返回null,就是全部查詢完成了
Elasticsearch 學習筆記
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.