Comment ne pas analyser dans ElasticSearch?
j'ai un champ dans un champ ElasticSearch que je ne veux pas avoir analysé, I. E. il doit être stocké et comparé mot à mot. Les valeurs contiendront des lettres, des nombres, des espaces, des tirets, des barres obliques et peut-être d'autres caractères.
si Je ne donne pas d'analyseur dans mon mapping pour ce champ, la valeur par défaut utilise toujours un tokenizer qui pirate ma chaîne mot à mot en morceaux de mots. Je n'en veux pas.
Existe-t-il un analyseur super simple qui, en gros, ne pas à l'analyse? Ou y a-t-il une autre façon de signifier que ce champ ne doit pas être analysé?
je ne créer l'index, je ne fais rien d'autre. Je peux utiliser des analyseurs comme "english" pour d'autres domaines qui semblent être des noms intégrés pour les analyseurs préconfigurés. Est-il une liste d'autres noms? Peut-être qu'il y en a une qui correspond à mes besoins (à savoir ne rien faire avec l'entrée).
C'est ma cartographie actuellement:
{
"my_type": {
"properties": {
"my_field1": { "type": "string", "analyzer": "english" },
"my_field2": { "type": "string" }
}
}
}
my_field1
dépend de la langue; ceci semble fonctionner. my_field2
doit être mot à mot. J'aimerais donner un analyseur qui ne fait rien.
une valeur d'échantillon pour my_field2
"B45c 14/04"
.
3 réponses
"my_field2": {
"properties": {
"title": {
"type": "string",
"index": "not_analyzed"
}
}
}
Check-vous ici https://www.elastic.co/guide/en/elasticsearch/reference/1.4/mapping-core-types.html pour plus d'infos.
ceci n'est plus vrai en raison de la suppression du string
(remplacé par keyword
et `) type décrit ici. A la place, vous devriez utiliser "index": true | false
.
Par Exemple:
{
"foo": {
"type" "string",
"index": "not_analyzed"
}
}
devient Nouveau:
{
"foo": {
"type" "keyword",
"index": true
}
}
Cela signifie que le champ est indexé, mais comme il est de type keyword
non analysé implicitement.
peut également être utilisé.
// don't actually use this, use "index": "not_analyzed" instead
{
"my_type": {
"properties": {
"my_field1": { "type": "string", "analyzer": "english" },
"my_field2": { "type": "string", "analyzer": "keyword" }
}
}
}
Comme indiqué ici: https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-keyword-analyzer.htmlil fait plus de sens pour marquer ces champs not_analyzed
.
Mais keyword
l'analyseur peut être utile quand il est défini par défaut pour l'indice entier.
mise à JOUR: Comme il l'a dit dans les commentaires, string
n'est plus supporté en 5.X