Я искал это и не нашел ничего, что говорит, поддерживается это или нет. В соответствии с документацией Elasti c :
"Внутренние попадания могут быть использованы путем определения определения inner_hits для запроса и фильтра вложенных, has_child или has_parent."
Я хочу использовать inner_hits для вложенного объекта has_parent. Я попробовал это, как показано в примере ниже. Кто-нибудь знает возможно ли это?
Пример сценария (для этого поста я упростил данные и свойства)
Мы сохраняем переводы заголовка и описания задачи как вложенный объект в родительской задаче. Каждый вложенный заголовок имеет ISO-код и переведенный заголовок и описание. В некоторых случаях мы распространяем дочерние задачи среди тысяч пользователей, поэтому не имеет смысла копировать заголовок / описание в каждый дочерний объект.
Пример родительской задачи
{
"_id": "parenttask_177448",
"startDate": "2020-05-01T00:00:00",
"endDate": "2020-05-05T00:00:00",
"type": "task",
"taskjoin" : "parenttask",
"priorityId": 1,
"translations": [
{
"title": "This is a test task",
"description": "test",
"localeIsoCode": [
"en-US"
]
},
{
"description": "tester",
"title": "Ceci est une tâche de test",
"localeIsoCode": [
"fr-FR"
]
}
]
}
Children Task (s) Пример
{
"_id": "childtask_12345",
"taskSubType": "distributed",
"subtasks": [],
"startDate": "2020-03-19T00:00:00",
"endDate": "2020-03-19T00:00:00",
"taskJoinField": {
"name": "childtask",
"parent": "parenttask_177448"
},
"assignedUserId": 12345,
"assignedUserName": "Bob Jones"
}
Соответствующая часть выполняемого мной запроса, которая не возвращает внутренних результатов хитов
{
"has_parent": {
"ignore_unmapped": true,
"parent_type": "parenttask",
"query": {
"nested": {
"ignore_unmapped": true,
"inner_hits": {
"name": "innerhits_task",
"_source": {
"includes": [
"title"
]
}
},
"path": "translations",
"query": {
"term": {
"translations.localeIsoCode.keyword": {
"value": "fr-FR"
}
}
},
"boost": 1.1,
"_name": "nested_isocode"
}
},
"score": true,
"boost": 1.1,
"_name": "parent_isocode"
}
}
Соответствующее сопоставление
{
"thinktime_dev_7003_tasks": {
"mappings": {
"properties": {
"assignedUserId": {
"type": "long"
},
"assignedUserName": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"taskJoinField": {
"type": "join",
"eager_global_ordinals": true,
"relations": {
"parenttask": "childtask"
}
},
"localeIsoCode": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"locationId": {
"type": "long"
},
"title": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"translations": {
"type": "nested",
"properties": {
"description": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"image": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"isPrimary": {
"type": "long"
},
"localeIsoCode": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
},
"url": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}
}
},
"title": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}
}
}
}
}
}
Я получаю результаты от дочерних задач, но внутренние совпадения не совпадают. Если я перенесу внутренние хиты в has_parent, я получу все переводы обратно.
Мой вопрос: возможно ли выполнение родительских вложенных внутренних хитов в Elasti c? Я удивлен, что не нашел никого, кто пытался сделать это или примеры на Inte rnet. Это похоже на довольно распространенный вариант использования.
Спасибо за вашу помощь.