Здравствуйте! Запутался в запросе, прошу помощи.
Есть несколько полей, по которым ищем. Одно поле обязательное для всех нод - targetStatus, в нем хранится статус. Другие поля могут быть в нодах, а могут просто отсутствовать (targetCategories - массив с категориями, targetGoodType - число). Нужно отфильтровать по статусу плюс по каждому необязательному полю по такой схеме для необязательных: этого поля либо вообще может не быть в ноде и это будет удовлетворять выборке, либо поле должно быть и должно удовлетворять заданным условиям. Примерно так, но это не работает:
$this->_paramsForSearch = [
'index' => $this->_index,
'type' => $this->_type,
'body' => [
'size' => $this->_size,
'sort' => $this->_getSort(),
'query' => [
'bool' => [
'must' => [
['term' => [
'targetStatus' => Target::STATUS_STARTED
]],
'bool' => [
'should' => [
[
['terms' => [
'targetCategories' => $this->_categories
]],
['must_not' => [
'exists' => [
'field' => 'targetCategories'
]
]],
'minimum_should_match' => 1
],
[
['term' => [
'targetGoodType' => $this->_goodType
]],
['must_not' => [
'exists' => [
'field' => 'targetGoodType'
]
]],
'minimum_should_match' => 1
],
'minimum_should_match' => 2
]
]
]
]
]
]
];
Раньше если у ноды эти необязательные поля были пустыми, то они были, но там было либо 0 либо пустой массив. Сейчас если поле пустое, вообще не добавляю это поле в эластик. Думал через exist решу, но тоже не получилось