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.
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 desome_field.keyword
champ.
J'espère que cela répond à votre question.
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.