Несколько (AND) запросов для вложенной структуры индекса в Elasticsearch - PullRequest
0 голосов
/ 29 октября 2018

У меня есть индекс с отображением ниже

{
  "mappings": {
    "xxxxx": {
      "properties": {
        "ID": {
          "type": "text"
        },
        "pairs": {
          "type": "nested"
        },
        "xxxxx": {
          "type": "text"
        }
      }
    }
  }
}

поле pairs по сути является массивом объектов - каждому объекту присвоен уникальный идентификатор, связанный с ним

Я пытаюсь получить только один объект из поля пар для обновлений. В этой степени я пробовал это

GET /sample/_search/?size=1000
{
    "query": {
      "bool": {
        "must": [
            {
              "match": {
                "ID": "2rXdCf5OM9g1ebPNFdZNqW"
              }
            },
            {
              "match": {
                "pairs.id": "c1vNGnnQLuk"
              }
            }
          ]
      }
  },
  "_source": "pairs"
}

но это просто возвращает пустой объект, несмотря на то, что они являются действительными идентификаторами. Если я удалю правило pairs.id - я получу весь массив объектов.

Что мне нужно добавить / отредактировать, чтобы можно было выполнять запросы как через IDS (исходный, так и во вложенном)

1 Ответ

0 голосов
/ 29 октября 2018

Поскольку pairs имеет тип nested, вам необходимо использовать nested запрос . Также вы, возможно, захотите использовать вложенные inner-hits, а также:

GET /sample/_search/?size=1000
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "ID": "2rXdCf5OM9g1ebPNFdZNqW"
          }
        },
        {
          "nested": {
            "path": "pairs",
            "query": {
              "match": {
                "pairs.id": "c1vNGnnQLuk"
              }
            },
            "inner_hits": {}
          }
        }
      ]
    }
  },
  "_source": false
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...