7

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

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

我已尝试根据此查询删除文档。当我针对索引运行此查询时,它返回的结果很好。但是当我尝试对索引运行删除命令时,什么也没有发生。

我不确定我是否构建了错误的查询或其他什么。

4

1 回答 1

11

您仅使用过滤器,而按查询删除 API可能需要查询。您可以使用如下过滤查询将过滤器转换为查询:

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

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

于 2012-09-13T07:47:29.500 回答