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 索引中的现有文档?

Elasticsearch,如何使 NEST 地图响应类

如何将单个 .NET 类型映射到 ElasticSearch/NEST 中的多个嵌套对象类型?

如何在 C# Nest 中将日期值发送到 elasticsearch 聚合查询

使用 NEST 的 Elasticsearch:如何配置分析器来查找部分单词?