web-dev-qa-db-fra.com

Comment ne pas analyser dans ElasticSearch?

J'ai un champ dans un champ ElasticSearch que je ne veux pas analyser, i. e. il doit être stocké et comparé textuellement. Les valeurs contiendront des lettres, des chiffres, des espaces, des tirets, des barres obliques et peut-être d'autres caractères.

Si je ne donne pas d'analyseur dans mon mappage pour ce champ, la valeur par défaut utilise toujours un tokenizer qui pirate ma chaîne textuelle en morceaux de mots. Je n'en veux pas.

Existe-t-il un analyseur super simple qui, fondamentalement, n'analyse pas? Ou existe-t-il une autre manière de dire que ce champ ne doit pas être analysé?

Je crée seulement 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 des analyseurs préconfigurés. Y a-t-il une liste d'autres noms? Peut-être qu'il y en a un qui correspond à mes besoins (à savoir ne rien faire avec l'entrée).

Voici ma cartographie actuellement:

{
  "my_type": {
    "properties": {
      "my_field1": { "type": "string", "analyzer": "english" },
      "my_field2": { "type": "string" }
    }
  }
}

my_field1 dépend de la langue; cela semble fonctionner. my_field2 doit être mot pour mot. Je voudrais y donner un analyseur qui ne fait tout simplement rien.

Un exemple de valeur pour my_field2 serait "B45c 14/04".

42
Alfe
"my_field2": {
    "properties": {
        "title": {
            "type": "string",
            "index": "not_analyzed"
        }
    }
}

Vérifiez-vous ici, https://www.elastic.co/guide/en/elasticsearch/reference/1.4/mapping-core-types.html , pour plus d'informations.

52
Scott Rice

Ce n'est plus vrai en raison de la suppression du type string (remplacé par keyword et ``) comme décrit ici . Au lieu de cela, vous devez utiliser "index": true | false.

Par exemple OLD:

{
  "foo": {
    "type" "string",
    "index": "not_analyzed"
  }
}

devient NOUVEAU:

{
  "foo": {
    "type" "keyword",
    "index": true
  }
}

Cela signifie que le champ est indexé mais comme il est tapé comme keyword non analysé implicitement.

30
vanthome

keyword l'analyseur 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.html , il est plus logique de marquer ces champs comme not_analyzed.

Mais l'analyseur keyword peut être utile lorsqu'il est défini par défaut pour l'index entier.

MISE À JOUR: Comme indiqué dans les commentaires, string n'est plus pris en charge dans 5.X

3
denis.peplin