3 votes

Elasticsearch fait du champ un tableau

Comment définir un champ dans elasticsearch pour qu'il renvoie toujours un tableau.

J'ai un champ MOTS CLÉS dans elasticsearch qui ont parfois un seul mot-clé

Elasticsearch renvoie alors ce champ sous la forme d'une chaîne plutôt que d'une liste, ce qui perturbe le désérialiseur car il s'attend à une liste plutôt qu'à une chaîne.

C'est ainsi que j'ai défini la cartographie des mots-clés :

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

    }
  }
},

6voto

Ce que vous essayez de réaliser devrait être traité lors de l'indexation d'un document. En effet, il n'existe pas de type de données spécifique pour les tableaux. Ainsi, par exemple, si vous souhaitez avoir un champ qui stocke/renvoie un tableau d'entiers, il vous suffit de définir le champ comme étant de type entier et, lors de l'indexation, de toujours vous assurer que la valeur de ce champ est un tableau, même si la valeur est unique.

Ainsi,

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

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

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

Il en va de même pour tout autre type de données.

1voto

Mysterion Points 1263

Dans Elasticsearch, il n'y a pas de array type. Par défaut, tout champ peut contenir 0 ou plusieurs valeurs.

Il est donc impossible de forcer Elasticsearch à renvoyer toujours un tableau JSON. Par exemple, si votre document n'a qu'une seule valeur, il sera retourné sous forme de paire - field: value

Je crains que vous ne deviez effectuer cette conversion/application du côté du client

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X