"反向索引在弹性搜索中是不可变的"确切意思?

时间:2017-08-06 05:53:22

标签: elasticsearch inverted-index

我正在浏览弹性搜索的在线权威指南。

我对以下链接中描述的倒排索引的不变性有疑问: https://www.elastic.co/guide/en/elasticsearch/guide/current/making-text-searchable.html

在索引中添加新文档会发生什么?是否会重新创建倒排索引以包含与新文档相关的详细信息/元数据?

它不会影响弹性的表现吗?

2 个答案:

答案 0 :(得分:1)

在该文章的最后回答了您的问题:

当然,不可变索引也有其缺点,主要是它是不可变的!你无法改变它。 如果要使新文档可搜索,则必须重建整个索引。这对索引可以包含的数据量或索引的频率有很大的限制。更新。

这意味着您需要销毁旧索引并重新创建以包含新文档。通过集群数据并在冷群集上执行新索引创建然后将其切换为热,然后在现在冷群集上重建索引,可以减轻性能影响。

答案 1 :(得分:1)

当您向索引添加新文档时,所有在1秒内写入的文档(默认值 - 您可以增加它,但实际上不应该将其设置为0)将写入(Lucene)段。该段将首先在内存中,稍后将刷新到磁盘。

如果您更新文档,原始版本将被标记为已删除,并且将创建一个新文档(与1s内的其他文档一起批量创建到一个段中)。

每个段都有自己的倒排索引,只要它在内存中,就可以搜索到。

最终,Elasticsearch将进行合并并将多个细分合并为一个。在此步骤中,删除和替换(旧版本的更新)文档也将被删除。一般情况下,您不必调用强制合并 - Elasticsearch非常善于确定何时应该自行完成。

这一般提供了非常好的性能平衡。如果您不需要立即查找文档,则常见的性能调整是将刷新间隔设置为30秒或类似值。

PS:更改现有数据需要您重新索引文档 - 有一个API。重新索引数据很常见,特别是对于搜索用例。

相关问题