# Поиск по необязательным полям с помощью exist

**URL:** <https://discuss.elastic.co/t/exist/164114>\
**Category:** Вопросы на русском языке\
**Created:** [January 14, 2019, 9:13am UTC](https://discuss.elastic.co/t/exist/164114 "2019-01-14T09:13:49Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![smola](https://avatars.discourse-cdn.com/v4/letter/s/ac91a4/32.png) [@smola](https://discuss.elastic.co/u/smola)\
**Post date:** [January 14, 2019, 9:13am UTC](https://discuss.elastic.co/t/exist/164114/1 "2019-01-14T09:13:49Z")

</div>

Здравствуйте! Запутался в запросе, прошу помощи.  
Есть несколько полей, по которым ищем. Одно поле обязательное для всех нод - 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 решу, но тоже не получилось

---

<div class="post-metadata">

**Author:** ![smola](https://avatars.discourse-cdn.com/v4/letter/s/ac91a4/32.png) [@smola](https://discuss.elastic.co/u/smola)\
**Post date:** [January 14, 2019, 11:46am UTC](https://discuss.elastic.co/t/exist/164114/3 "2019-01-14T11:46:49Z")

</div>

Решено, прошу прощения что поспешил

---

<div class="post-metadata">

**Author:** ![system](https://us1.discourse-cdn.com/elastic/original/3X/1/a/1ac57faf039f6b580b3f104ef42a2a89e41014de.png) [@system](https://discuss.elastic.co/u/system)\
**Post date:** [February 11, 2019, 11:46am UTC](https://discuss.elastic.co/t/exist/164114/4 "2019-02-11T11:46:50Z")

</div>

Closed on February 11, 2019, 11:46am UTC

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.
