public function makeQuery()
{
$query = $this->query($this->getValues());
$map = [Filter::MERGE_AND => 'must', Filter::MERGE_OR => 'should'];
if ($this->isInclude()) {
if ($this->getLogicalOperator() == Filter::MERGE_AND) {
$query = ['bool' => ['must' => [$query]]];
} elseif ($this->getLogicalOperator() == Filter::MERGE_OR) {
$query = ['bool' => ['should' => [$query]]];
}
} elseif ($this->isExclude()) {
$mergeOperator = $map[$this->getLogicalOperator()];
$query = ['bool' => [$mergeOperator => [['bool' => ['must_not' => [$query]]]]]];
} elseif ($this->isOff()) {
$query = [];
}
foreach ($this->getLinkedFilters() as $filter) {
$extraQuery = $filter->makeQuery();
// if ($filter->isInclude()) {
if ($this->getLogicalOperator() == Filter::MERGE_AND) {
$query = $this->mergeBoolQuery($query, $extraQuery, 'must');
} elseif ($this->getLogicalOperator() == Filter::MERGE_OR) {
$query = $this->mergeBoolQuery($query, $extraQuery, 'should');
}
// }
// elseif ($filter->isExclude()) {
// $query = $this->mergeBoolQuery($query, $extraQuery, 'must_not');
// }
}
return $query;
}