Сопоставить элемент массива в массиве объектов json вasticsearch - PullRequest
0 голосов
/ 03 октября 2019

Я используюasticsearch-6.4.3

Допустим, у меня есть образец документа в форме:

{
"segment_details": [{
  "departure_airport_code": "DEL",
  "departure_time": "2019-10-10 03:00:00"
}, 
{
"departure_airport_code": "BOM",
"departure_time": "2019-10-11 23:00:00" 
}]
}

Я написал запрос, чтобы получить все документы, в которых любой изэлементы сегмента_детали имеют код_доставки_доставки заданного code. Приведенный ниже запрос работает нормально.

GET flight-cache_layers/_doc/_search
{
  "query": {
    "nested": {
      "path": "segment_details",
      "query": {
        "bool": {
          "must": [
            { "match": { 
              "segment_details.departure_airport_code": code }}
          ]
        }
      }
    }
  }
}

Я хочу написать запрос, в котором я хочу проверить, содержит ли какой-либо элемент элемента attribute_details какой-либо код выезда_airport_code в указанном списке codes.

GET flight-cache_layers/_doc/_search
{
  "query": {
    "nested": {
      "path": "segment_details",
      "query": {
        "bool": {
          "must": [
            { "match": { 
              "segment_details.departure_airport_code" IN codes }}  # something like this.
          ]
        }
      }
    }
  }
}

1 Ответ

1 голос
/ 03 октября 2019

Вложенная агрегация Вы можете использовать предложение must, где текст должен соответствовать любому из этих значений.

"query": {
    "nested": {
      "path": "segment_details",
      "query": {
        "bool": {
          "should": [
            {
              "match": {
                "FIELD": "TEXT"  --> replace field with your field and text with value
              }
            },
             {
              "match": {
                "FIELD": "TEXT"
              }
            }
          ]
        }
      }
    }
  }

Если вы ищете точные слова, вы можете использовать термины query

"query": {
    "nested": {
      "path": "segment_details",
      "query": {
        "bool": {
          "must": [
            {
              "terms": {
                "FIELD": [ --> replace field with your field and value array with values, you might need to use field.keyword as per your mapping 
                  "VALUE1",
                  "VALUE2"
                ]
              }
            }
          ]
        }
      }
    }
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...