2015-03-23 1 views
1

J'exécute la version ElasticSearch 1.4ElasticSearch: Comment définir un mappage par défaut à un modèle

Je veux créer un modèle qui a nommé:

listener*

avec le mapping suivant:

Chaque champ chaîne sera défini comme not_analyzed.

Signification analyzer:not_analyzed

La raison principale de ceci est mon intention de sauvegarder les données AS IS. (par exemple Person ID)

Ceci peut être fait, mais seulement quand je spécifie spécifiquement le champ dans sa structure exacte de JSon.

Lorsque vous avez une grande structure JSON, il est très difficile à maintenir.

Est-il possible de préciser à la mise en correspondance que chaque chaîne champ sera not_analyzed?

Répondre

1

Cela devrait le faire. Après l'avoir exécuté, vous devrez supprimer et reconstruire votre index, mais cela fonctionnera pour tous les nouveaux index.

PUT _template/not_analyzed_template 
{ 
    "template": "*", 
    "mappings": { 
     "_default_": { 
      "dynamic_templates": [ 
       { 
        "template_1": { 
         "mapping": { 
          "index": "not_analyzed", 
          "type": "string" 
         }, 
         "match_mapping_type": "string", 
         "match": "*" 
        } 
       } 
      ] 
     } 
    } 
} 

est ici un code de jouet que je l'habitude de le tester:

http://sense.qbox.io/gist/398aab275d48a7a2aac6ba725d5691e1e159496c

+0

grand. J'ai essayé et ça marche. BTW, quand j'ai posé cette question et obtenu la même réponse: utiliser l'analyseur "mot-clé". Quand je l'ai fait, ce n'était pas comme le "non-analysé", par ex. DATA: "This-Is-My-Data", mot-clé ANALYZER: word1: "this", word2: "est", word3: "my", word4: "data" qui n'a rien à voir avec "This-Is-My-Data" ". Ma question est la suivante: est-ce la seule façon de réaliser ce que je veux? Ou y a-t-il une autre réponse à ma question ci-dessus? – raven99