Mapping

Bonjour, j'ai une petite question.

j'utilise logstash pour importer un fichier csv vers elasticsearch, comment pourrais-je créer mon propre mapping ? Je trouve souvent des tutos qui montrent comment le faire mais juste dans des cas ou ils insèrent des documents un par un (via python ou la console de kibana) et non pas dans les cas où l'on insère tous les documents en même temps.

Merci

Bonjour,

Vous envoyez tous les documents en même temps ou vous envoyer tout le contenu d'un fichier csv en même temps ?

Est-il possible de voir vos données et la manière dont vous avez configuré le fichier .conf de logstash ?

Je veux envoyer tout le contenu du fichier CSV à la fois.

la configuration:

input { stdin {}
        file {
	         path => "C:/elastic_stack/data/les_hotels_classes_update.csv"
			 start_position => "beginning"
			 sincedb_path => "NUL"
	          }
     }
filter {
  		
        csv {
		    separator => ";"
			columns => ["date_de_classement","departement","classement","nom_commercial","adresse","code_postal","commune","telephone","courriel","site_internet","capacite_d_accueil_personnes","nombre_de_chambres","typologie_etablissement","geo"]
			}
			grok{
		      match => {"message" => "%{DATE:date_de_classement}\;%{INT:departement}\;%{DATA:classement}\;%{DATA:nom_commercial}\;%{DATA:adresse}\;%{INT:code_postal}\;%{DATA:commune}\;%{DATA:telephone}\;%{EMAILADDRESS:courriel}\;%{DATA:site_internet}\;%{INT:capacite_d_accueil_personnes}\;%{INT:nombre_de_chambres}\;%{DATA:typologie_etablissement}\;%{DATA:geo}"}	
			}
       }

output {
         elasticsearch {
                        hosts => "http://localhost:9200"
			            index => "test_mapping_fr_hotels"
                       }		
         stdout { codec => rubydebug }					   
        }

Si ce que vous voulez dire par "envoyer tout le contenu du fichier CSV à la fois" c'est que le contenu du fichier soit envoyé ligne par ligne, le tout référencé sous un même index. Alors oui la configuration est correct.

Par contre attention, vos deux plugin dans la partie filter font la meme chose. Le plugin csv va créer les champs et pour chacun de ces champs, le plugin csv va lui attribuer une valeur grace au séparateur que vous avez spécifié. Le plugin grok lui va remplir ces même champs (puisqu'ils ont le même nom dans le plugin csv et dans le plugin grok) avec le contenu de la phrase si elle respecte la regex mise en place. Donc vous écrivez deux fois la même valeur dans chaque champs.

Pour en revenir au mapping, ici il vous faudrait définir le type de chaque colonne de votre csv.
C'est à dire donner à date_de_classement le type des données situé dans la première colonne de votre csv. Et faire cela pour chaque champs.

Bonjour,
Merci infiniment pour votre réponse.