【问题标题】:Where am I going wrong with Elasticsearch _delete_by_query?Elasticsearch _delete_by_query 哪里出错了?
【发布时间】:2021-02-25 07:00:53
【问题描述】:

我是 Elasticsearch 的新手,并尝试使用 _delete_by_query API 定期删除文档(我非常感谢我可能应该使用基于时间的索引来简化此操作,并将更新索引在适当的时候构建结构,但现在我需要让它工作)。

我的索引包含名为 ServiceName、消息和时间戳(以及其他)的字段,我的要求非常简单。我想删除 ServiceName 等于特定值 (myService) 的文档,消息不等于两个特定值中的任何一个(Starting* 和 Finished*,因为我想保留任何跟踪历史记录中的第一条和最后一条日志消息),以及文件已超过 1 天。我正在使用带有以下负载的 _delete_by_query 端点:

{
    "query": {
        "bool": {
            "must": [],
            "filter": [{
                    "match_all": {}
                },
                {
                    "match_phrase": {
                        "ServiceName": {
                            "query": "myService"
                        }
                    }
                },
                {
                    "range": {
                         "@timestamp": {
                        "lte": "now-1d"
                        }
                    }
                }
            ],
            "should": [],
            "must_not": [{
                "bool": {
                    "should": [{
                            "match_phrase": {
                                "message": "Starting*"
                            }
                        },
                        {
                            "match_phrase": {
                                "message": "Finished*"
                            }
                        }
                    ],
                    "minimum_should_match": 1
                }
            }]
        }
    }
}

当我使用 _search API 运行查询时,它会返回我希望被删除的数据,但是当我向 _delete_by_query 发出相同的查询时,它搜索结果中未返回的已删除文档。我正在使用 AWS Elasticsearch 服务。任何人都可以告诉我哪里出错了或者这应该工作吗?我最初认为它可能是 minimum_should_match 属性,但文档似乎表明这在这种情况下无关紧要

【问题讨论】:

  • ...it deleted documents that were returned in the search results 这是您所期望的对吗?
  • 哈 - 错字了。它删除了搜索结果未返回的文档,这是我应该说的。将编辑
  • 好吧,这样更合乎逻辑 ;-) 不过我觉得这很令人惊讶...搜索查询得到多少结果?有多少是被同一个查询实际删除的?
  • 嗯,也许我真的做错了什么。我会再试一次,因为我也很惊讶。随着时间的推移,我们正在谈论 2000 万份文档
  • 感谢大家的 cmets - 我已经重新设计了索引策略以使用基于日期的索引,因此清除旧数据现在是删除索引的简单案例

标签: amazon-web-services elasticsearch amazon-elasticsearch


【解决方案1】:

这很奇怪。你能检查点击次数是否相同吗? kibana 中的搜索结果被截断,因此可能是在搜索结果中没有看到特定文档但在已删除文档中看到的原因。

如果不是这样,如果您可以共享两个文档的样本,那就太好了。

  • 文档 A:在搜索中列出并被删除。
  • 文档 B:未在搜索中列出,但已被删除。

这将有助于我复制问题并回复您。

【讨论】:

    猜你喜欢
    • 2022-11-11
    • 1970-01-01
    • 2016-08-02
    • 1970-01-01
    • 1970-01-01
    • 2011-03-14
    • 2021-04-27
    • 2015-01-17
    • 2013-12-25
    相关资源
    最近更新 更多