php - elasticsearch - 其中字段为空

标签 php symfony elasticsearch elasticsearch-plugin foselasticabundle

我正在尝试编写查询(使用 foselastica bundle ),其中值应该是某个 id 或可以为空。

在 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);

最佳答案

你已经很接近了。 尝试类似的事情

$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); 

关于php - elasticsearch - 其中字段为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45167729/

相关文章:

php - Symfony 5 如何存储氩气的盐?

php - 类 __PHP_Incomplete_Class 没有反序列化器

node.js - 在 ElasticSearch 上搜索和排序

php - 使用文件下载将数据从数据库导出到csv

php - 更改通过表单上传的 tmp 文件的文件名

php - 我应该如何处理预期的错误?例如。 "username already exists"

symfony - 不同管理者之间的实体关联

php - 如何从以下连接 php/MySQLi 查找最后插入的 id、事务、提交、回滚

elasticsearch - 使用以下查询时未显示“源”字段

elasticsearch - 在 ElasticSearch 查询中结合 must_not