elasticsearch寫入資料時涉及到的核心概念講解:
segment file: 存儲反向索引的檔案,每個segment本質上就是一個反向索引,每秒都會生成一個segment檔案,當檔案過多時es會自動進行segment merge(合并檔案),合并時會同時将已經标注删除的文檔實體删除;
commit point(重點了解): 記錄目前所有可用的segment,每個commit point都會維護一個.del檔案(es删除資料本質是不屬于實體删除),當es做删改操作時首先會在.del檔案中聲明某個document已經被删除,檔案内記錄了在某個segment内某個文檔已經被删除,當查詢請求過來時在segment中被删除的檔案是能夠查出來的,但是當傳回結果時會根據commit point維護的那個.del檔案把已經删除的文檔過濾掉;
translog日志檔案: 為了防止elasticsearch當機造成資料丢失保證可靠存儲,es會将每次寫入資料同時寫到translog日志中(圖中會有詳解)。
refresh
es接收資料請求時先存入記憶體中,預設每隔一秒會從記憶體buffer中将資料寫入filesystem cache,這個過程叫做refresh;
fsync
translog會每隔5秒或者在一個變更請求完成之後執行一次fsync操作,将translog從緩存刷入磁盤,這個操作比較耗時,如果對資料一緻性要求不是跟高時建議将索引改為異步,如果節點當機時會有5秒資料丢失;flush
es預設每隔30分鐘會将filesystem cache中的資料刷入磁盤同時清空translog日志檔案,這個過程叫做flush。
https://blog.csdn.net/zsd_31/article/details/79979818
反向索引
正向索引
分詞提取關鍵字
如:
“文檔1”經過分詞,提取了20個關鍵字,每個關鍵詞都會記錄在它的文檔中的出現次數和文檔id;
正向索引:需要掃描索引庫中的所有文檔,根據打分模型,排出名詞後呈現給使用者。
檔案id->關鍵詞的映射
關鍵詞->檔案id清單
{
"關鍵詞":帶有此關鍵詞的文檔ID清單。
}