Files
Phraseanet/lib/Alchemy/Phrasea/SearchEngine/Elastic/AST/KeyValue/MissingExpression.php
jygaulier 1e7092b86a [skip ci] PHRAS-3417_search-empty-fields_MASTER
add : special values "_empty_" and "_any_" to search empty field or not-empty field. Works only with = operator.
e.g.: Title=_empty_

wip/todo : unit test ; facet
2021-04-15 17:31:22 +02:00

50 lines
1.1 KiB
PHP

<?php
namespace Alchemy\Phrasea\SearchEngine\Elastic\AST\KeyValue;
use Alchemy\Phrasea\SearchEngine\Elastic\AST\Node;
use Alchemy\Phrasea\SearchEngine\Elastic\Search\QueryContext;
use Alchemy\Phrasea\SearchEngine\Elastic\Search\QueryPostProcessor;
class MissingExpression extends Node
{
const MISSING_VALUE = '_empty_';
private $key;
private $value;
public function __construct(Key $key)
{
$this->key = $key;
}
public function buildQuery(QueryContext $context)
{
$query = [
'bool' => [
'must_not' => [
'exists' => [
'field' => $this->key->getIndexField($context, true)
]
]
]
];
if ($this->key instanceof QueryPostProcessor) {
return $this->key->postProcessQuery($query, $context);
}
return $query;
}
public function getTermNodes()
{
return array();
}
public function __toString()
{
return sprintf('(<%s> == <%s>)', $this->key, self::MISSING_VALUE);
}
}