Прежде всего, вы должны предоставить вложенное отображение вашего поля «cast»:
PUT test_movies
{
"mappings": {
"properties": {
"cast": {
"type": "nested",
"properties": {
"firstName": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"lastName": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}
}
},
"title": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}
}
}
}
Обратите внимание, что это Elasti c Mapping по умолчанию с ключевым словом и текстом для каждого поля. но лучше всего указывать каждое поле, если это ключевое слово, текст или оба. Кроме того, чтобы изменить отображение индекса, вы должны удалить и воссоздать его
Теперь, когда ваше поле «cast» объявлено как вложенное, вы можете выполнить для него вложенный запрос:
POST test_movies/_search
{
"query": {
"nested": {
"path": "cast",
"query": {
"match": {
"cast.firstName": "Chris"
}
},
"score_mode": "sum"
}
}
}
"score_mode": "sum"
добавит счет для каждого под-матча в вашем вложенном поле
РЕДАКТИРОВАТЬ
Если вы хотите выполнить поиск по названию и вложенный дочерний элемент, который вы должны составить с помощью bool Query , поэтому ваш запрос будет выглядеть следующим образом:
POST test_movies/_search
{
"query": {
"bool": {
"should": [
{
"match": {
"title": "Chris"
}
},
{
"nested": {
"path": "cast",
"query": {
"match": {
"cast.firstName": "Chris"
}
},
"score_mode": "sum"
}
}
]
}
}
}