我正在尝试从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”。
如何更改此选项以仅删除没有正确日期的项目?
答案 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 . "\"";