При объединении вложенного запроса get invalid_state_exception не удалось найти вложенный объект по пути - PullRequest
1 голос
/ 03 июля 2019

Я создаю запрос на Elasticsearch для поиска документов по всем индексам.
Мне нужно объединить запрос должен, должен и вложенный на Elasticsearch, я получаю правильный результат, но получаю ошибку внутри результата.

Это запрос, который я использую

GET _all/_search
{
  "query": {
      "bool": {
        "minimum_should_match": 1,
        "should": [
          { "term": { "trimmed_final_url": "https://www.repubblica.it/t.../" } }
        ],
        "must": [
          {
            "nested": {
              "path": "entities",
              "query": {
                "bool": {
                  "must": [
                    { "term": { "entities.id": "138511" } }
                  ]
                }
              }
            }
          },
          {
            "term": {
              "language": { "value": "it" }
             }
          }
        ]
      }
  }

И вот результат

{
  "_shards" : {
    "total" : 38,
    "successful" : 14,
    "skipped" : 0,
    "failed" : 24,
    "failures" : [
      {
        "shard" : 0,
        "index" : ".kibana_1",
        "node" : "7twsq85TSK60LkY0UiuWzA",
        "reason" : {
          "type" : "query_shard_exception",
          "reason" : """
            failed to create query: {
            ...
              "index_uuid" : "HoHi97QFSaSCp09iSKY1DQ",
              "index" : ".reporting-2019.06.02",
              "caused_by" : {
                "type" : "illegal_state_exception",
                "reason" : "[nested] failed to find nested object under path [entities]"
              }
            }
          },
            ...
  "hits" : {
    "total" : {
      "value" : 50,
      "relation" : "eq"
    },
    "max_score" : 16.90015,
    "hits" : [
      {
        "_index" : "i_201906_v1",
        "_type" : "_doc",
        "_id" : "MugcbmsBAzi8a0oJt96Q",
        "_score" : 16.90015,
        "_source" : {
          "language" : "it",
          "entities" : [
            {
              "id" : 101580,
            },
            {
              "id" : 156822,
            },
            ...

Я не написал некоторые поля, потому что код слишком длинный

1 Ответ

2 голосов
/ 03 июля 2019

Я новичок в StackOverFlow (создал эту учетную запись, чтобы ответить на этот вопрос: D), так что, если этот ответ не соответствует действительности, оставайтесь со мной.Недавно я занимался вложенными полями в Elasticsearch, поэтому у меня есть некоторые идеи относительно того, как эта ошибка может появиться.Вы определили отображение для вашего типа документа?Я не верю, что Elasticsearch распознает поле как вложенное, если вы не укажете это сделать в отображении:

PUT INDEX_NAME
{
  "mappings": {
      "DOC_TYPE": {
          "properties": {
              "entities": {"type": "nested"}
          }
      }
   }
}

Возможно, вам придется указать это отображение для каждого индекса и типа документа.Не уверен, есть ли способ сделать это все с помощью одного запроса.

Я также заметил, что у вас есть предложение "must" с минимальным соответствием, равным 1. Я считаю, что это точно так же, как и "must"пункт, так что я не уверен, какой цели это достигает (поправьте меня, если я ошибаюсь).Если ваше сопоставление указано, запрос должен выглядеть примерно так:

GET /_all/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "nested": {
            "path": "entities",
            "query": {
              "term": {
                "entities.id": {
                  "value": "138511"
                }
              }
            }
          }
        },
        {
          "term": {
            "language": {
              "value": "it"
            }
          }
        },
        {
          "term": {
            "trimmed_final_url": {
              "value": "https://www.repubblica.it/t.../"
            }
          }
        }
      ]
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...