我需要经常删除文档,但es
只会将这些标记为已删除。如果有大量已删除的文档,查询速度会降低吗?还有其他问题吗?
修改
换句话说,我经常从index
中删除大量文档,并且从不使用force merge
api来释放磁盘使用情况,一段时间后我会遇到查询性能问题吗?
答案 0 :(得分:1)
您必须在下面的结构
中向您的弹性搜索节点发送一个httpPOST
请求
http://localhost:9200/your_index_name/_forcemerge
有关详情,请参阅此page
如果有大量已删除的文档,查询速度会降低吗?
答案是肯定的
当插入或更新操作太高(导致段变脏)时,换句话说,我经常从索引中删除很多文档,并且从不使用强制合并API来释放磁盘使用情况,一段时间后我会遇到查询性能问题吗?
elasticsearch会自动运行合并过程。另一方面,您可以使用forcemerge
api自行控制合并过程。
答案 1 :(得分:0)
文档作为在lucene中创建文档时形成的段存储在索引中。从弹性中删除文档实际上不会从基础段中删除文档,这构成了ES的基本数据存储。
是的,有很多已删除的文档会出现查询性能问题,因为查询仍然会在已删除的段中搜索匹配的文档。
Force_merge or optimize索引通常是做它的选项,但你应该小心处理这个,因为这是重磁盘的i / o操作。
$ curl -XPOST 'http://localhost:9200/kimchy,elasticsearch/_optimize'
$ curl -XPOST 'http://localhost:9200/_optimize?only_expunge_deletes=true'
您能解释一下为什么经常删除这么多的原因。由于我们经常有大量删除,但我们在索引级别处理它们。我们的删除发生在特定日期范围的文档中,因此我们根据日期对文档进行索引,何时删除特定日期的文档,我们只需删除索引。
如果你有任何删除文件的模式,我建议你在索引中将它们分开,然后删除索引