Elasticsearch делает поле массивом - PullRequest
0 голосов
/ 04 февраля 2019

Как определить поле вasticsearch, чтобы всегда возвращать массив.

У меня есть поле KEYWORDS вasticsearch, которое иногда имеет одно ключевое слово

Затем Elasticsearch возвращаетэто поле в виде строки, а не списка, это разбивает десериализатор, поскольку он ожидает список, а не строку.

Вот как я определил сопоставление ключевых слов:

"KEYWORDS": {
  "type": "text",
  "fields": {
    "keyword": {
      "type": "text"

    }
  }
},

Ответы [ 2 ]

0 голосов
/ 04 февраля 2019

То, что вы пытаетесь достичь, должно обрабатываться при индексации документа.Поскольку для массива не существует такого конкретного типа данных.Так, например, если вы хотите иметь поле, которое хранит / возвращает массив целых чисел, все, что вам нужно, это определить поле как тип integer, и при индексации всегда проверяйте, что значение для этого поля является массивом, даже если значение одно.

Итак,

PUT test
{
  "mappings": {
    "_doc": {
      "properties": {
        "intArray": {
          "type": "integer"
        }
      }
    }
  }
}

PUT test/_doc/1
{
   "intArray": [10, 12, 50]
}

PUT test/_doc/1
{
   "intArray": [7]
}

То же самое относится и к любому другому типу данных.

0 голосов
/ 04 февраля 2019

В Elasticsearch нет выделенного типа array.По умолчанию любое поле может содержать 0 или более значений.

Это делает невозможным принудительное возвращение Elasticsearch массива JSON.Например, если ваш документ будет иметь только 1 значение, он будет возвращен как пара - field: value

Боюсь, у вас должно быть это преобразование / применение на стороне клиента

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