【问题标题】:ElasticSearch and NEST: How do you purge all documents from an index?ElasticSearch 和 NEST:如何从索引中清除所有文档?
【发布时间】:2014-11-13 19:52:24
【问题描述】:

我知道如何delete an entire ElasticSearch index,但是如何从索引中清除所有文档?

我的动机:我想要一个“ReIndex”方法来清除索引的全部内容,以便我可以重新加载所有文档。

ElasticSearch 语法会很有帮助。 NEST 语法会更好。

【问题讨论】:

  • DeleteByQuery 现已弃用。有人知道 Nest 2 版本的最新语法吗?
  • @Linoy.M.Kunjappan DeleteByQuery 不再被弃用。正如here 所说的“DBQ 最初已被弃用并从 Elasticsearch 本身中删除,然后他们通过新的实现将其带回来。

标签: c# elasticsearch nest


【解决方案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

【讨论】:

【解决方案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"));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-04-07
      • 2020-09-11
      • 1970-01-01
      • 2020-07-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多