ElasticSearch删除查询 - 使用术语和范围进行过滤

时间:2012-09-13 05:49:31

标签: elasticsearch

我尝试使用以下查询来删除ElasticSearch索引中的数据。

{
    "filter": {
        "and": [
            {
                "range": {
                    "Time": {
                        "from": "20120101T000000",
                        "to": "20120331T000000"
                    }
                }
            },
            {
                "term": {
                    "Source": 1
                }
            }
        ]
    }
}

我试图根据此查询删除文档。当我针对索引运行它时,此查询返回结果。但是当我尝试对索引运行删除命令时,没有任何反应。

我不确定我是在构建错误的查询还是其他什么。

1 个答案:

答案 0 :(得分:10)

delete by query API可能需要查询时,您只使用过滤器。您可以使用filtered query将过滤器转换为查询:

{
    "filtered" : {
        "query" : {
            "match_all" : {}
        },
        "filter": {
            "and": [
                {
                    "range": {
                        "Time": {
                            "from": "20120101T000000",
                            "to": "20120331T000000"
                        }
                    }
                },
                {
                    "term": {
                        "Source": 1
                    }
                }
            ]
        }
    }
}

否则,您可以使用带有两个必须子句的bool query将过滤器转换为查询,这样您就不再需要过滤查询了。无论如何,我猜过滤器方法更好,因为过滤器更快。