Plastic/Elasticsearch -搜索null值的条目


Plastic/Elasticsearch - search for entries with null value

我使用Laravel 5.2与https://github.com/sleimanx2/plastic和有一个表称为job_ads。job_ads表有一个类型列,有时为空。我想搜索所有类型为null的job_ads但如果我尝试

App'JobAd::search()->term('type', null)->sortBy("id", "ASC")->get()->totalHits();

通过php artisan tinker得到

Elasticsearch'Common'Exceptions'BadRequest400Exception 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

App'JobAd::search()->mustNot()->exists('type')->sortBy("id", "ASC")->get()->totalHits();

希望有帮助!