web-dev-qa-db-fra.com

différence entre un champ et le champ.

Si j'ajoute un document avec plusieurs champs à un index Elasticsearch, lorsque je le visualise dans Kibana, j'obtiens à chaque fois deux fois le même champ. L'un d'eux sera appelé

some_field

et l'autre sera appelé

some_field.keyword

D'où vient ce comportement et quelle est la différence entre les deux?

PS: l'un d'eux est agrégable (je ne sais pas ce que cela signifie) et l'autre (sans mot-clé) ne l'est pas.

20
tomak

Mise à jour: Une réponse courte serait ce type: le texte est analysé, ce qui signifie qu'il est divisé en mots distincts lorsque stocké et permet des recherches en texte libre sur un ou plusieurs mots dans le champ. Le champ .keyword prend la même entrée et reste comme une grande chaîne, ce qui signifie qu'il peut être agrégé et que vous pouvez utiliser des recherches génériques dessus. Agrégeable signifie que vous pouvez l'utiliser dans des agrégations dans elasticsearch, qui ressemble à un groupe sql si vous le connaissez. Dans Kibana, vous utiliseriez probablement le champ .keyword avec des agrégations pour compter des valeurs distinctes, etc.


Veuillez consulter cet article sur text vs keyword .

En bref: depuis Elasticsearch 5.0 string type a été remplacé par text et keyword types. Depuis lors, lorsque vous êtes ne spécifiez pas de mappage explicite, pour un document simple avec une chaîne:

{
  "some_field": "string value"
}

ci-dessous le mappage dynamique sera créé:

{
  "some_field": {
    "type" "text",
    "fields": {
      "keyword": {
        "type": "keyword",
        "ignore_above": 256
      }
    }
  }
}

Par conséquent, il sera possible d'effectuer une recherche plein texte sur some_field, ainsi que la recherche et les agrégations de mots clés à l'aide de some_field.keyword champ.

J'espère que cela répond à votre question.

24
Piotr Pradzynski

Regardez this issue. Il y a une explication de votre question. Grosso modo some_field est analysé et peut être utilisé pour la recherche plein texte. D'autre part some_field.keyword n'est pas analysé et peut être utilisé dans les requêtes de terme ou dans l'agrégation.

3
briarheart