我在弹性搜索中有一个很大的用例,里面有数百万条记录。
我会经常更新记录,比如每小时1000条记录。
我不希望弹性搜索重新索引我的每次更新。
我计划每周重新编制索引。
任何想法如何在更新时停止自动重新索引?
或欢迎任何其他更好的建议。在此先感谢:)
答案 0 :(得分:2)
Elasticsearch(ES)以下面的方式更新现有文档。 1.删除旧文档。 2.使用应用了更改的新文档编制索引。
根据ES文档: -
在Elasticsearch中,这个写作和打开的轻量级过程 新段称为刷新。默认情况下,每个分片都会刷新 每秒自动一次。这就是为什么我们说Elasticsearch 有近实时搜索:文档更改对搜索不可见 立即,但会在1秒内变得可见。
请注意,在ES将这些更改提交/刷新到磁盘缓存和磁盘之前,这些更改将不可见/可搜索,这是由软提交(es刷新间隔,默认为1秒)和硬提交(它实际上将文档写入磁盘,这可以防止它永久丢失,并且比软提交更加昂贵。
您需要确保调整ES刷新间隔,并进行适当的负载测试,因为将其设置得非常低且非常高有其自身的优缺点。
例如,设置它的时间非常短,例如1秒,如果你发生了太多的更新而不是性能损失,它可能会导致系统崩溃。同样将其设置为非常高,例如1小时意味着您现在没有NRT(接近实时搜索),并且在此期间,如果您的内存可能再次包含数百万个文档(取决于您的应用程序)并且可能导致内存错误,也承诺如此大的内存是一个非常昂贵的事情。