从elasticsearch中删除字段与特定值不匹配的所有项目

时间:2014-02-17 17:11:51

标签: elasticsearch

我正在尝试从Elasticsearch索引中删除所有项目,其中字段time_crawl_started与特定值不匹配。我正在使用match_all查询和NOT过滤器。

这是我到目前为止所得到的:

    $client = new Elasticsearch\Client();
    $params = Array(
      'index' => ...,
      'type'  => ...
    );
    $params['body']['query']['filtered']['query']['match_all'] = Array();
    $params['body']['query']['filtered']['filter']['not']['term']['time_crawl_started'] = $someDate;
    $client->deleteByQuery($params);

问题是这会删除所有项目,甚至是将time_crawl_started设置为$ someDate的项目,这只是日期时间,例如“2014-02-17 19:13:31”。

如何更改此选项以仅删除没有正确日期的项目?

1 个答案:

答案 0 :(得分:0)

问题是分析了time_crawl_started字段,因此按值进行的任何比较都是错误的。我必须手动创建索引(而不是通过仅将新文档插入到不存在的索引中而自动创建索引)并指定我的项类型的映射,设置'index'=> 'not_analyzed'为time_crawl_started。

我最终使用了这样的脚本过滤器:

    $params['body']['query']['filtered']['query']['match_all'] = Array();
    $params['body']['query']['filtered']['filter']['script']['script'] = "doc['time_crawl_started'].value != \"" . $someDate . "\"";