Как проверить существует ли поле в документе с оператором И

Есть обычный поиск, где мы ищем по category_id и существованию характеристики fields.id

"query" => [
  "bool" => [
    "must" => [
      "match" => [
        "category_id" => $category_id
      ], [
        "exists" => [ 
          "field" => "fields.$id"
        ]
      ]
    ]
  ]
]

Поиск работает, встала задача добавить еще одну проверку на существование характеристики fields.id, но чтобы у нее был оператор И, то есть нужно получить все товары, где:

Категория = 1
Есть характеристика с id = 1
ИЛИ есть характеристика с id =2

В документации нашел возможность выбора оператора, только для match

"match" => [
  "message" => [
    "query": "this is a test",
    "operator": "or"
  ]
]

Есть ли подобное решение для exists


Ответы (1 шт):

Автор решения: Сергей Храмов

вам просто нужно использовать "should": https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-bool-query.html

"query" => [
  "bool" => [
    "must" => [
      "match" => [
        "category_id" => $category_id
      ]
    ],
    "should" => [
      [
        "exists" => [ 
          "field" => "fields.$id1"
        ]
      ],
      [
        "exists" => [ 
          "field" => "fields.$id2"
        ]
      ],
    ]
  ]
]
→ Ссылка