ElasticSearch 和 NEST:如何从索引中清除所有文档?
Posted
技术标签:
【中文标题】ElasticSearch 和 NEST:如何从索引中清除所有文档?【英文标题】:ElasticSearch and NEST: How do you purge all documents from an index? 【发布时间】:2014-11-13 19:52:24 【问题描述】:我知道如何delete an entire ElasticSearch index,但是如何从索引中清除所有文档?
我的动机:我想要一个“ReIndex”方法来清除索引的全部内容,以便我可以重新加载所有文档。
ElasticSearch 语法会很有帮助。 NEST 语法会更好。
【问题讨论】:
DeleteByQuery 现已弃用。有人知道 Nest 2 版本的最新语法吗? @Linoy.M.Kunjappan DeleteByQuery 不再被弃用。正如here 所说的“DBQ 最初已被弃用并从 Elasticsearch 本身中删除,然后他们通过新的实现将其带回来。” 【参考方案1】:我在 Nest 中寻找类似的东西,我想我会把语法放在这里给任何想看的人:
var node = new Uri("http://localhost:9200");
var settings = new ConnectionSettings(node);
var client = new ElasticClient(settings);
client.DeleteByQuery<ElasticsearchProject>(del => del
.Query(q => q.QueryString(qs=>qs.Query("*")))
);
【讨论】:
这是一个需要指定T
的通用表单。如果我想删除所有索引和所有类型怎么办?
@MathiasLykkegaardLorenzen 使用 dynamic 而不是 T。【参考方案2】:
您可以使用按查询删除。这将删除所有匹配 * 的文档,即所有内容。
curl -XDELETE localhost:9200/<indexname>/_query?q=*
将 localhost 更改为运行节点的主机名。
http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/docs-delete-by-query.html
事后别忘了优化。
curl localhost:9200/<indexname>/_optimize
【讨论】:
链接已失效。 https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-delete-by-query.html 看起来是个不错的替代品。【参考方案3】:$ curl -XPOST localhost:9200/myindex/_optimize
....
优化过程将清除您通过查询删除完成的所有软删除。
我们也面临着一个类似的问题,我们删除了很多文档。实际上,我们将很多文档从一个索引移动到另一个索引,因为我们已经按日期分片了数据。但是由于 ES 不支持将数据从一个索引移动到另一个索引。
但优化是一项代价高昂的操作,因为它会消耗大量的 IO 寻道。如果您只想为删除进行清除,我猜您可以使用“only_expunge_deletes”标志将段与仅删除合并。
http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/indices-optimize.html
【讨论】:
【参考方案4】:**To delete all Records -**
client.DeleteByQuery<ElasticsearchProject>(del => del
.Query(q => q.QueryString(qs=>qs.Query("*"))
));
**To delete index-**
client.DeleteIndex(d => d.Index("index_name"));
【讨论】:
以上是关于ElasticSearch 和 NEST:如何从索引中清除所有文档?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 NEST2 中更新 Elasticsearch 文档
如何使用 NEST 更新 ElasticSearch 索引中的现有文档?
如何将单个 .NET 类型映射到 ElasticSearch/NEST 中的多个嵌套对象类型?