Elasticsearch 2.3 has_child с запросом must_not.exists

83
9

Я пытаюсь построить запрос, в котором дети родителя фильтруются на основе кода страны в массиве. Если у ребенка нет поля стран, я все равно хочу вернуть результат.

У меня есть два рабочих запроса:

{
"query": {
"bool": {
"should": {
"has_child": {
"inner_hits": {},
"type": "service",
"score_mode": "sum",
"query": {
"bool": {
"filter": [
{
"term": {
"countries": "AF"
}
}
]
}
}
}
}
}
}
}

должным образом возвращает массив результатов, где "AF" находится в массиве стран и:

{
"query":
{
"bool": {
"should": {
"has_child": {
"inner_hits": {},
"type": "service",
"score_mode": "sum",
"query": {
"bool": {
"must_not": {
"exists": {
"field": "countries"
}
}
}
}
}
}
}
}
}

возвращает результаты, которые я хочу, если у ребенка нет поля стран.

Я не могу понять, как объединить эти два запроса, чтобы получить один комбинированный набор результатов. То есть я хочу "ИЛИ" два набора.

спросил(а) 2016-08-03T11:59:00+03:00 4 года, 4 месяца назад
1
Решение
117

На самом деле это не проверено, это слепое предложение:

{
"query": {
"bool": {
"should": {
"has_child": {
"inner_hits": {},
"type": "service",
"score_mode": "sum",
"query": {
"bool": {
"must": [
{
"bool": {
"should": [
{
"bool": {
"must": [
{
"exists": {
"field": "countries"
}
},
{
"term": {
"countries": "AF"
}
}
]
}
},
{
"missing": {
"field": "countries"
}
}
]
}
},
{
"term": {
"whatever": "blabla"
}
}
]
}
}
}
}
}
}
}

ответил(а) 2016-08-03T12:14:00+03:00 4 года, 4 месяца назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема