Определить массив строк в поле поиска elasti c - PullRequest
1 голос
/ 05 апреля 2020

Как определить поле, которое принимает массив строк, таких как ["A", "B", "C"].

Я попытался сделать следующее: создал поле в моем index:

    {
      "properties": 
      {
        "date": {"type": "date"},
        "imageUrls": { "type": "nested" },
        }
    }

И я пишу документ

..../_doc/1

Метод: POST

тело:

{
    "imageUrls": ["A", "B", "C"]
}

Всегда получаю эту ошибку:

{
    "error": {
        "root_cause": [
            {
                "type": "mapper_parsing_exception",
                "reason": "object mapping for [imageUrls] tried to parse field [null] as object, but found a concrete value"
            }
        ],
        "type": "mapper_parsing_exception",
        "reason": "object mapping for [imageUrls] tried to parse field [null] as object, but found a concrete value"
    },
    "status": 400
}

1 Ответ

0 голосов
/ 05 апреля 2020

Отдельные значения во вложенном отображении не допускаются. Из документов - система

позволяет индексировать массивы объектов таким образом, чтобы их можно было запрашивать независимо друг от друга.

То есть,

PUT ahm
{
  "mappings": {
    "properties": {
      "date": {
        "type": "date"
      },
      "imageUrls": {
        "type": "nested",
        "properties": {
          "url": {
            "type": "text",
            "fields": {
              "keyword": {
                "type": "keyword"
              }
            }
          }
        }
      }
    }
  }
}

, а затем

POST ahm/_doc
{
  "imageUrls": [
    {
      "url": "A"
    },
    {
      "url": "B"
    },
    {
      "url": "C"
    }
  ]
}

Это совершенно бессмысленно, как есть, но если бы к объектам массива было добавлено больше свойств, это имело бы смысл .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...