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".

37
demandé sur Alfe 2013-08-14 19:31:34

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.

49
répondu Scott Rice 2017-02-01 12:16:37

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.

15
répondu vanthome 2018-02-13 17:49:37

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

2
répondu denis.peplin 2017-05-26 06:51:46