elasticsearch - 在 Multi-Tenancy 索引中区分_delete_by_query任务

标签 elasticsearch

场景:
我在Elasticsearch 6.x中有一个包含一堆 Multi-Tenancy 数据的索引。这些数据经常被租户删除(通过_delete_by_query)并填充。

当使用_delete_by_query发出wait_for_completion=false请求时,提供查询JSON以删除租户的数据,我可以通过_tasks API查看通用任务信息。问题在于,对于大量租户,在任何给定时间都不清楚谁在删除数据。

我的问题是这样的:
有没有办法查看_delete_by_query任务正在对其进行操作的查询?或者我可以在任务中缓存的URL上附加附加参数以区分它们吗?

旁注:查看文档:https://www.elastic.co/guide/en/elasticsearch/reference/6.6/tasks.html我看到description API响应中有一个_tasks字段,该查询具有作为字符串的查询,但是,我在description字段中看不到该级别的详细信息:"description" : "delete-by-query [myindex]"
提前致谢

最佳答案

识别查询的一种方法是将 X-Opaque-Id HTTP header添加到查询中:

例如,当删除(例如)用户3的所有租户数据时,您可以发出以下命令:

curl -XPOST -H 'X-Opaque-Id: 3' -H 'Content-type: application/json' http://localhost:9200/my-index/_delete_by_query?wait_for_completion=false -d '{"query":{"term":{"user": 3}}}'

然后,您将获得一个任务ID,并在查看相关任务文档时,由于包含HTTP header 的headers部分,您将能够确定正在/正在删除哪个租户数据的任务:
  "_source" : {
    "completed" : true,
    "task" : {
      "node" : "DB0GKYZrTt6wuo7d8B8p_w",
      "id" : 20314843,
      "type" : "transport",
      "action" : "indices:data/write/delete/byquery",
      "status" : {
        "total" : 3,
        "updated" : 0,
        "created" : 0,
        "deleted" : 3,
        "batches" : 1,
        "version_conflicts" : 0,
        "noops" : 0,
        "retries" : {
          "bulk" : 0,
          "search" : 0
        },
        "throttled_millis" : 0,
        "requests_per_second" : -1.0,
        "throttled_until_millis" : 0
      },
      "description" : "delete-by-query [deletes]",
      "start_time_in_millis" : 1570075424296,
      "running_time_in_nanos" : 4020566,
      "cancellable" : true,
      "headers" : {
        "X-Opaque-Id" : "3"                             <--- user 3
      }
    },

关于elasticsearch - 在 Multi-Tenancy 索引中区分_delete_by_query任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58209680/

相关文章:

elasticsearch - Logstash 调度第一次运行

elasticsearch - 添加突出显示不适用于 Elasticsearch 2.3.3 中的 has_child 查询

elasticsearch - 在ElasticSearch中,如何组合 `span_near`和 `term`?

java - ES 7.4.1 - 身份验证 [Rest API]

ruby-on-rails - 升级到Elasticsearch 7时重新索引错误

elasticsearch - Elastic Search 嵌套多匹配查询

javascript - 无法使用 node.js http.request 将记录插入 ElasticSearch - MapperParsingException[无法解析]

python - Elasticsearch DocumentSimilarity density_vector为参数 'body'获得了多个值

elasticsearch - 使用elasticsearch shutdown API和终止Elasticsearch进程有什么区别?

sorting - ElasticSearch对多值排序不起作用