Elasticsearch 學習筆記

  • 基於Apache Lucene 被認爲是迄今爲止最好的,最先進的,性能最好的,功能最全的搜索引擎庫
  • Elasticsearch :
    • 分佈式的實時的文件存儲,每個字段都被索引並可以被搜索。
    • 分佈式的實時分析搜索引擎
    • 可動態擴展,處理PB級別的數據
  • Java API 提供兩種內置的客戶端
    • node client :節點客戶端
      • 以無數據的節點的身份加入到集羣中,知道集羣的位置,能夠將請求直接發送到對應的節點上。
    • Transport client :傳輸客戶端
      • 更輕量的客戶端能夠發送請求到遠程集羣,不加入集羣,只是簡單的轉發請求到集羣中的節點。
    • 9300端口鏈接,使用es的傳輸協議
  • 基本命令:
    • _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
    • 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,就是全部查詢完成了
發佈了12 篇原創文章 · 獲贊 0 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章