Modifier la valeur par défaut de la cartographie de la chaîne de “ne pas analyser” dans Elasticsearch
Dans mon système, l'insertion de données se fait toujours par le biais de fichiers csv via logstash. Je n'ai jamais de pré-définir la cartographie. Mais chaque fois que j'en entrée une chaîne de caractères, il est toujours analyzed
, suite à une entrée comme hello I am Sinha
est divisé en hello
,I
,am
,Sinha
. Est-il de toute façon je pouvais changer le répertoire par défaut/une cartographie dynamique de elasticsearch, de sorte que toutes les chaînes, quel que soit l'indice, quel que soit le type sont prises pour être not analyzed
? Ou est-il un moyen de la mettre au .conf
fichier? Dire que mon conf
fichier ressemble à
input {
file {
path => "/home/sagnik/work/logstash-1.4.2/bin/promosms_dec15.csv"
type => "promosms_dec15"
start_position => "beginning"
sincedb_path => "/dev/null"
}
}
filter {
csv {
columns => ["Comm_Plan","Queue_Booking","Order_Reference","Multi_Ordertype"]
separator => ","
}
ruby {
code => "event['Generation_Date'] = Date.parse(event['Generation_Date']);"
}
}
output {
elasticsearch {
action => "index"
host => "localhost"
index => "promosms-%{+dd.MM.YYYY}"
workers => 1
}
}
Je veux que toutes les chaînes soient not analyzed
et je n'ai pas l'esprit étant le paramètre par défaut pour toutes les futures données à insérer dans elasticsearch soit
Vous devez vous connecter pour publier un commentaire.
Vous pouvez interroger l'
.raw
version de votre domaine. Ceci a été ajouté dans Logstash 1.3.1:Donc, si votre champ est appelé
foo
, vous feriez requêtefoo.raw
pour retourner lenot_analyzed
(pas de split sur délimiteurs) version..raw
champ et réalisé que c'était quelque chose de logstash créé pour moi, donc, ma réponse ici, n'est pas utile. 🙂 Cependant, la question est balisé et se réfère à logstash, donc de sens que ma réponse est acceptée, un. Il y a d'autres SI les questions et les réponses sur la création denot_analyzed
champs avec de la vanille Elasticsearch qui peuvent être portés sur.5.x
avec Elasticsearch5.x
modifie la cartographie de.raw
à.keyword
- élastique.co/guide/fr/logstash/actuel/...Il suffit de créer un modèle. exécuter
dynamic templates
etproperties
, leindex
est défini commenot analyzed
. En conséquence, si nous sommes à l'entrée d'une chaînehello, I am Sinha
, elle sera traitée comme une chaîne de caractères et non pas divisé enhello
I
am
Sinha
ind
. le nombre de champs dans les données d'entrée n'est pas fixe, mais pour sûr il y aura un champ de type chaîne ded
. Je ne veux terraind
être analysés et tous les autres champs de type chaîne pour ne pas être analysés.Faire une copie du répertoire lib/logstash/sorties/elasticsearch/elasticsearch-modèle.json de votre Logstash de distribution (éventuellement installé comme /opt/logstash/lib/logstash/sorties/elasticsearch/elasticsearch-modèle.json), de le modifier en remplaçant
avec
et point
template
pour vous de la sortie du plugin dans votre fichier modifié:Vous pouvez toujours remplacer cette valeur par défaut pour un champ particulier.
State
qui a une instance appeléeWest Bengal
. Quand j'ai tracé un graphique à barres, je reçois 2 différentes légendes à savoirwest
etbengal
qui est faux. Le problème est toujours là{"promosms-16.12.2014":{"mappings":{"promosms_dec15":{"properties":{..............,"State":{"type":"string"},.........}}}}}
il n'y a aucune information quant à savoir si il est analysé ou pas"template" : "*"
Je pense que la mise à jour de la cartographie est une mauvaise approche juste pour manipuler un champ à des fins de reporting. Tôt ou tard, vous voudrez peut-être capable de rechercher sur le champ de jetons. Si vous mettez à jour le champ "not_analyzed" et souhaitez rechercher foo à partir d'une valeur "foo bar", vous ne serez pas en mesure de le faire.
Plus gracieux solution est d'utiliser kibana agrégation des filtres au lieu de termes. Quelque chose comme ci-dessous sera à la recherche pour les termes ivr04 et ivr02. Donc dans votre cas, vous pouvez avoir un filtre "Bonjour, je suis Sinha". Espérons que cette aide.