Я пытаюсь создать запрос, включающий соединение has_parent
. Я запрашиваю 2 типа документов, и важно отметить, что я хочу, чтобы всегда родитель включал в возвращаемый документ. Я пытаюсь сделать это с помощью inner_hits
, но не могу достичь этого в сочетании с выделением:
DELETE /my_index
PUT my_index
{
"mappings": {
"properties": {
"name": {
"type": "text"
},
"cc": {
"type": "join",
"relations": {
"company": "employee"
}
}
}
}
}
PUT my_index/_doc/1?refresh
{
"name": "Walmart",
"cc": "company"
}
PUT my_index/_doc/2?routing=1&refresh
{
"name": "Smith",
"cc": {
"name": "employee",
"parent": "1"
}
}
POST /my_index/_search
{
"query": {
"bool": {
"must": [
{
"bool": {
"should": [
{
"query_string": {
"default_operator": "and",
"fields": [
"name"
],
"query": "Walmart"
}
},
{
"has_parent": {
"inner_hits": {
"highlight": {
"fields": {
"name": {
"number_of_fragments": 20,
"type": "plain"
}
}
}
},
"parent_type": "company",
"query": {
"bool": {
"should": [
{
"query_string": {
"fields": [
"name"
],
"query": "Walmart"
}
}
]
}
}
}
}
]
}
},
{
"has_parent": {
"parent_type": "company",
"query": {
"match_all": {}
}
}
}
]
}
}
}
Когда я нахожу сотрудника по названию компании ( Walmart ), inner_hits
выглядит как ожидалось:
...
"inner_hits" : {
"company" : {
"hits" : {
"total" : {
"value" : 1,
"relation" : "eq"
},
"max_score" : 0.6931472,
"hits" : [
{
"_index" : "my_index",
"_type" : "_doc",
"_id" : "1",
"_score" : 0.6931472,
"_source" : {
"name" : "Walmart",
"cc" : "company"
},
"highlight" : {
"name" : [
"<em>Walmart</em>"
]
}
}
]
}
}
}
...
Когда я нахожу сотрудника по имени сотрудника ( Смит ), inner_hits
не заполняется:
...
"inner_hits" : {
"company" : {
"hits" : {
"total" : {
"value" : 0,
"relation" : "eq"
},
"max_score" : null,
"hits" : [ ]
}
}
}
...
Я знаючто я мог бы добавить inner_hits
при внешнем соединении has_parent
(чтобы ограничить результаты типом emnployee), но я теряю результаты выделения. И добавление inner_hits
к обоим has_parent
объединениям, заканчивающимся исключением. Что я могу сделать, чтобы всегда получить полный родительский документ (с выделением по требованию)?
Я использую ElasticSearch 7.2