我使用Laravel 5.2与https://github.com/sleimanx2/plastic和有一个表称为job_ads。job_ads表有一个类型列,有时为空。我想搜索所有类型为null的job_ads但如果我尝试
AppJobAd::search()->term('type', null)->sortBy("id", "ASC")->get()->totalHits();
通过php artisan tinker得到
ElasticsearchCommonExceptionsBadRequest400Exception with message 'query_parsing_exception: No value specified for term query'
我看了一下elasticsearch文档,但我没有看到我的错误。我使用的是elasticsearch 2.4.
您需要在must not子句中使用exists查询。它基本上是一个缺失查询(在2.2.0中已弃用),查找空值。试试下面的查询。
{
"query": {
"bool": {
"must_not": {
"exists": {
"field": "type"
}
}
}
}
}
我没有使用塑料,但它应该很容易转换。从文档来看,它应该类似于下面的query
AppJobAd::search()->mustNot()->exists('type')->sortBy("id", "ASC")->get()->totalHits();
希望有帮助!