起因:增删改之后,马上查找,数据不会发生变化
发现elasticsearch执行增删改之后,是不会立即进行刷新的,需要配置refresh这个参数
Lucene的一个Index会由一个或多个sub-index构成,sub-index被称为Segment,每个segment中包含多个documents文件,一个segment中会有完整的正向索引和反向索引;
在搜索时,Lucene会遍历这些segments,以segments为基本单位独立搜索每个segments文件,而后再把搜索结果合并;
Elasticsearch
采取的机制是将数据添加到lucene
,lucene
内部会维护一个数据缓冲区,此时数据都是不可搜索的。每隔一段时间(默认为1秒),Elasticsearch
会执行一次refresh
操作:lucene
中所有的缓存数据都被写入到一个新的Segment
,清空缓存数据。此时数据就可以被搜索。当然,每次执行refresh
操作都会生成一个新的Segment
文件,这样一来Segment
文件有大有小,相当碎片化。Elasticsearch
内部会开启一个线程将小的Segment
合并(Merge)成大的Segment
,减少碎片化,降低文件打开数,提升IO性能;
参数由来
以下摘录自官网:Update API | Elasticsearch Guide [7.5] | Elastic
Update API
Updates a document using the specified script.
Request
POST /<index>/_update/<_id>
Query parameters
if_seq_no
(Optional, integer) Only perform the operation if the document has this sequence number. See Optimistic concurrency control.
if_primary_term
(Optional, integer) Only perform the operation if the document has this primary term. S