删除所有搜索响应文档

时间:2018-11-02 17:44:34

标签: elasticsearch nest

使用nest进行Elasticsearch我正在尝试从索引中删除确切数量的文档(我可以找到的最旧的文档)。我的映射对象有一个TimeStamp字段。我设法完成这项工作的唯一方法是搜索这些文档,然后在每个匹配项上运行一次foreach,并将该匹配项的ID传递到delete API中,然后逐个删除它们:

var searchResponseAsc = client.Search<MyPersonalObject>(s => s.Sort(sd => sd.Ascending(e => e.TimeStamp)).Take(NumberOfDocumentsToBeDeleted));

foreach (IHit<MyPersonalObject> hit in searchResponseAsc.Hits) {
    client.DeleteByQuery<MyPersonalObject>(dbq => dbq.Index(IndexName).Query(q => q.Ids(s => s.Values(hit.Id))));
}

是否可以在大量搜索响应中调用delete API,或者甚至更好地将搜索查询直接嵌套到delete查询中?

任何提示将不胜感激!

1 个答案:

答案 0 :(得分:1)

您可以在delete by query API中嵌入Elasticsearch搜索查询:

POST twitter/_delete_by_query
{
  "query": { 
    "match": {
      "message": "some message"
    }
  }
}