如果新文档被索引到Elasticsearch索引,那么它可用于在索引操作之后搜索类似1秒的内容.但是,可以强制通过调用_flush或_refresh操作索引来立即搜索此文档.这两个操作之间有什么区别 - 结果对他们来说似乎是一样的,文档可以立即搜索到.
这些操作中的每一个究竟是什么?
ES文档似乎没有深入解决这个问题.
jav*_*nna 110
你得到的答案是正确的,但我认为值得详细说明.
刷新有效地调用lucene索引读取器上的重新打开,以便更新可以搜索的数据的时间点快照.这个lucene功能是近乎实时api的lucene的一部分.
一个elasticsearch刷新使可用于搜索文档,但并不保证它们将被写入磁盘到永久存储,因为它不叫FSYNC,因此不保证耐用性.什么使您的数据持久是一个lucene提交,这是更昂贵的方式.
虽然你可以每秒调用lucene重新打开,但你不能对lucene提交做同样的事情.
通过lucene,您可以通过经常调用重新打开来近乎实时地获取可用于搜索的新文档,但是您仍然需要调用commit以确保将数据写入磁盘并保存,因此是安全的.
Elasticsearch通过为每个分片添加事务日志(实际上是lucene索引)解决了这个"问题",其中存储了尚未提交的写入操作.事务日志是fsynced和safe,因此您可以在任何时间点获得持久性,即使对于尚未提交的文档也是如此.您可以近乎实时地搜索文档,因为每秒都会自动刷新,您还可以确定如果发生了错误,可以重放事务日志以恢复最终丢失的文档.关于事务日志的好处是它可以在内部用于其他事情,例如提供实时的id by get.
一个冲洗elasticsearch有效触发Lucene的承诺,同时也清空事务日志,因为一旦数据在Lucene的水平承诺,耐久性可以通过自身的Lucene保证.Flush也作为api公开,可以调整,虽然通常没有必要.刷新会自动发生,具体取决于添加到事务日志中的操作数量,它们的大小以及上次刷新的时间.
刷新:
冲洗:
Segment 是 lucene 的一部分。不可变段使操作系统页面缓存始终干净。
Translog 是 Elasticsearch 的一部分。Translog 的目标是耐用性。
参考:
| 归档时间: |
|
| 查看次数: |
36393 次 |
| 最近记录: |