1.1 apache Lucene簡介
1.1.1 熟悉lucene
lucene的特點:成熟,高性能,可擴展,輕量級以及強大的功能
1.1.2 lucene的總體架構
文檔(decument):索引與搜索的主要數據載體,它包含一個或者多個字段,存放將要寫入索引或將從索引搜索出來的數據
字段(field):文檔的一個字段,它包含兩個部分,字段的名稱和內容
詞項(term):搜索時的一個單位,代表文本中的某個詞
詞條(token):詞項在字段中的一次出現,包含詞項的文本,開始,結束的位移以及類型
要傳統的關係型數據庫不一樣,lucene將寫入索引的所有信息組織成一種名爲倒排索引(inverted index)的結構
1.1.3 分析你的數據
文本分析是由分析器來執行的,而分析器是由分詞器(tokenizer),過濾器(filter)和字符映射器(character mapper)組成的
注意:es中有些查詢會被分析,而有些則不會,例如
前綴查詢(prefix query)不會被分析,而匹配查詢(match query)
會被分析
1.1.4 lucene查詢語言
- 在字段中查詢
= in
- 詞項修飾符
通配符: ?:匹配任意一個字符
* :匹配多個字符
注意:處於性能的考慮,通配符不能作爲詞項的第一個字符出現,這個與sql中like是一樣的
模糊查詢(fuzzy and proximity):
~緊隨一個整數值:模糊匹配 意思是~字符後的整數值確定了近似詞項與原始詞項的最大編輯距離
例如:執行查詢 title:mastering elasticsearch 包含 mastering book elasticsearch 的文檔不匹配
執行查詢 title:mastering elasticsearch~2 的話 mastering book elasticsearch 的文檔匹配
- 特殊字符處理
需要對字符進行轉義
1.2 EalsticSearch簡介
1.2.1 ealsticSearch的基本概念
- 索引
索引類似於關係型數據庫中的數據庫,es是通過lucene將數據寫入索引或從索引中檢索數據,es中的索引可能由一個或多個lucene索引構成
- 文檔
可以將es的文檔理解與lucene的文檔是一回事,就是一個json對象
- 映射
存儲所有的元信息
- 類型
可以在一個index中存儲多種文檔類型,併爲不同的文檔提供不同的映射
- 節點
節點:單個的es服務實例
- 集羣
- 分片
es將數據散佈到多個物理lucene索引中,這些lucene索引稱爲分片(shard),而散佈這些分片的過程叫做分片處理(sharding),es會自動完成分片處理,並且讓這些分片呈現出一個大索引的樣子
- 副本
- 網關
1.2.2 es架構背後的關鍵概念
- 合理的默認配置
- 默認的分佈式工作模式
- 對等架構可以避免單點故障
- 易於向集羣擴充新節點
- es沒有對索引中的數據結構強加任何限制
- 準實時
1.2.3 es的工作流程
- 啓動過程
節點啓動,使用廣播(也可以配置爲單播)發現集羣中的其他節點並連接
有一個會被選成爲管理節點(master node),該節點負責集羣的狀態管理以及在集羣拓步變化時做出反應,分發索引分片到集羣的相應節點上
- 故障檢測
- 與es通信
es在內部也使用java api進行節點間的通信
- 索引數據
建索引只發生在主分片上,而不是副本上,當把一個索引請求發送到某個節點時,如果該節點沒有對應的主分片,那麼這個請求會被轉發到擁有主分片的節點上
- 查詢數據
- 使用各種查詢類型 包括 簡單的詞項查詢,短語查詢,範圍查詢 布爾查詢 模糊查詢 區間查詢 通配符查詢 空間查詢
- 組合簡單查詢構建負責查詢
- 文檔過濾 在不影響評分的前提下拋棄那些不滿足特定查詢條件的文檔
- 查找與特定文檔相似的文檔
- 查找特定文檔相似的文檔
- 查找特定短語的查詢建議和拼寫查找
- 使用切面構建動態導航和計算各種統計量
- 使用預搜索(prospective search)並查找與指定文檔匹配的query集合
- 索引配置