0

我試圖寫查詢(與foselastica束)其中值應該是一些id或可以爲null。elasticsearch - 其中字段爲空

在MySQL:WHERE city.id = 1 OR city.id IS NULL

我知道,我應該使用存在,不能表達,但不是爲我工作。有什麼建議?

$query = new \Elastica\Query(); 

    if ($phrase) { 
     $queryString = new \Elastica\Query\QueryString($phrase); 
     $query->setQuery($queryString); 
    } 

    $filter = new \Elastica\Query\BoolQuery(); 

    $city = new \Elastica\Query\Match(); 
    $city->setFieldQuery('city.id', $cityId); 
    $filter->addShould($city); 

    $nullCity = new \Elastica\Query\Exists('city.id'); 
    $filter->addMustNot($nullCity); 

    $query->setPostFilter($filter); 
+0

閱讀[在elasticsearch查詢與空不空值處理(http://www.inanzzz.com/index.php/post/ioyu/dealing-with-null-and-非空值功能於elasticsearch查詢)。您需要使用[missing](https://www.elastic.co/guide/en/elasticsearch/guide/current/_dealing_with_null_values.html)。 – BentCoder

+0

缺少的查詢已從版本5中刪除。我沒有[查詢]註冊[missing]異常。我找不到任何有用的例子。 –

回答

0

你已經接近它了。 試着這麼做

$query = new \Elastica\BoolQuery(); 
// ... 
$filter = new \Elastica\Query\BoolQuery(); 

$city = new \Elastica\Query\Match(); 
$city->setFieldQuery('city.id', $cityId); 
$filter->addShould($city); 

$nullCity = new BoolQuery(); 
$existQuery = new \Elastica\Query\Exists('city.id'); 
$nullCity->addMustNot($existQuery); 
$filter->addShould($nullCity); 

$query->addMust($filter); 
+0

謝謝,但是我不能在'$ query'上添加必須的':'試圖調用一個名爲\「addMust \」的類的未定義方法\「Elastica \\ Query \」。' –

+0

除了我'沒有[查詢]註冊[missing]' –

+0

我的不好,$查詢需要是BoolQuery。 '$ query = new \ Elastica \ Query \ BoolQuery();' – Elyass