【问题标题】:Delete all search response documents删除所有搜索响应文档
【发布时间】:2018-11-03 03:03:42
【问题描述】:

使用嵌套进行弹性搜索我试图从我的索引中删除确切数量的文档(我能找到的最旧的)。我的映射对象有一个 TimeStamp 字段。我设法完成这项工作的唯一方法是搜索这些文档,然后对每个命中运行 foreach 并将该命中的 ID 传递到删除 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))));
}

有没有办法在大量搜索响应中调用删除 API,或者将搜索查询直接嵌套到删除查询中更好?

任何提示将不胜感激!

【问题讨论】:

  • 您需要创建基于时间的索引,例如每日索引,然后使用 curator 删除旧索引
  • 我在删除 APi 中没有看到这一点,您可以做的一件事是将要保留的数据重新索引到其他索引中,然后删除旧索引,在重新索引中您可以插入查询跨度>

标签: elasticsearch nest


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-17
    • 2012-10-19
    • 1970-01-01
    • 2015-04-04
    • 1970-01-01
    • 2023-01-05
    相关资源
    最近更新 更多