在我們的面試過程中,面試官總喜歡問這類問題,雖然有時候我們接觸的比較少,甚至沒有接觸過這個東西,但是如果能掌握一些基礎,還是比較好的,能讓自己加分(雖然有些面試官自己也不知道)。
ES 英文:(elasticsearch)
它是一種分布式全文搜索引擎,基於Lucene(全文搜索框架)開發而來。
優勢:
- 分布式實時文件存儲,每個字段皆能索引
- 集群,可擴展(理論上無上限)
- 高度集成的服務(RESTful風格的API,各語言客戶端)
- 易學易用
舊的數據查詢查詢流程
關系數據庫(比如Mysql) -> 數據庫DB -> 表TABLE -> 行ROW -> 列Column
Elasticsearch -> 索引庫Indices -> 類型Types -> 文檔Documents -> 字段Fields
ES集群可以包含多個索引(數據庫),每個索引庫中可以包含多個類型的表,每個類型包含多個文檔,然后每個文檔包含多個字段
DSL查詢與過濾
由ES提供豐富且靈活的查詢語言叫做DSL查詢(Query DSL)
索引過程分為如下幾個步驟
- 獲取內容
- 建立文檔
- 文檔分析
- 文檔索引
搜索組件主要組成部分
- 用戶搜索界面
- 建立查詢
- 搜索查詢
- 展現結果
ElasticSearch 工作原理
ElasticSearch(簡稱ES)是一個基於Lucene構建的開源、分布式、RESTful的全文本搜索引擎
索引Index - 類似庫
類型Type - 類似表
文檔Document
映射Mapping
集群Cluster
是一個或多個節點的集合
節點Node
分片Share 和 副本Replica
ElasticSearch提供了易用但功能強大的RESTful API以用於與集群進行交互,這些API大體可分為如下四類:
- 檢查集群、節點、索引等健康與否,以及獲取其相關狀態與統計信息
- 管理集群、節點、索引數據及元數據
- 執行CRUD(增刪查改)操作;
- 執行高級搜索操作,例如paging、filtering、scripting、faceting、aggregations及其它操作
執行查詢分為2個階段
分散階段 和 合並階段
分散階段是向所查詢的索引中的所有shard發起執行查詢的過程
合並階段是將各share返回的結果合並、排序並響應給客戶端的過程
向es發起查詢的2個方式:
1、通過RESTful request api 傳遞查詢參數 quert-string
2、通過發送 RESTful request body,也稱作JSON 格式
一個分析器通過需要三個組件構成
字符過濾器,分詞器,分詞過濾器