Здравствуйте. Немного предистории...
Есть курсы у курсов есть список тегов.
Делаю индекс:
'mappings' => [
'properties' => [
'id' => [
'type' => 'integer',
],
'name' => [
'type' => 'text',
'analyzer' => 'course',
],
'format' => [
'type' => 'keyword',
'null_value' => '',
],
'tags' => [
'type' => 'nested',
'properties' => [
'id' => [
'type' => 'integer',
],
'name' => [
'type' => 'text',
'analyzer' => 'tags',
],
],
],
],
]
Я пытаюсь составить запрос на получение курсов по списку идентификаторов (идентификатор курса совпадает с идентификатором документа) и потом в них нужно найти искомое слово в названии курса или в названии тега. На sql я бы сделал так:
...
WHERE id IN(...) and (name like '...' or tags.name like '...');
Вот что получил из последних результатов пробования составить данный запрос на эластике (он не правильный)
'query' => [
'bool' => [
'must' => [
['terms' => ['id' => $options['course_ids']]],
],
'should' => [
['match' => [
'name' => ['query' => $searchable],
]],
['nested' => [
'path',
'query' => [
'bool' => [
'must' => [
['match' => ['tags.name' => ['query' => $searchable]]],
],
]
],
]],
],
],
],
Подскажите пожалуйста где я ошибся? Как его довести "до ума"?