into files elasticsearch logstash

files - Los geodatos de CSV en elasticsearch como un tipo de punto de geo usando logstash



logstash elasticsearch (1)

El problema es que en su resultado de base_map_simple usted nombró el índice base_map_simple mientras que en su plantilla la propiedad de la template es base_map_template , por lo tanto, la plantilla no se aplica al crear el nuevo índice. La propiedad de la template debe coincidir de alguna manera con el nombre del índice que se está creando para que la plantilla se active.

Funcionará si simplemente cambia el último a base_map_* , es decir, como en:

{ "template": "base_map_*", <--- change this "order": 1, "settings": { "index.number_of_shards": 1 }, "mappings": { "node_points": { "properties": { "location": { "type": "geo_point" } } } } }

ACTUALIZAR

Asegúrese de eliminar primero el índice actual y la plantilla., Es decir,

curl -XDELETE localhost:9200/base_map_simple curl -XDELETE localhost:9200/_template/logstash

A continuación se muestra un ejemplo reproducible del problema que estoy teniendo con la mayoría de las versiones recientes de logstash y elasticsearch.

Estoy usando logstash para ingresar datos geoespaciales de un csv en elasticsearch como geo_points.

El CSV tiene el siguiente aspecto:

$ head simple_base_map.csv "lon","lat" -1.7841,50.7408 -1.7841,50.7408 -1.78411,50.7408 -1.78412,50.7408 -1.78413,50.7408 -1.78414,50.7408 -1.78415,50.7408 -1.78416,50.7408 -1.78416,50.7408

He creado una plantilla de mapeo que se parece a la siguiente:

$ cat simple_base_map_template.json { "template": "base_map_template", "order": 1, "settings": { "number_of_shards": 1 }, "mappings": { "node_points" : { "properties" : { "location" : { "type" : "geo_point" } } } } }

y tiene un archivo de configuración de logstash que se parece a lo siguiente:

$ cat simple_base_map.conf input { stdin {} } filter { csv { columns => [ "lon", "lat" ] } if [lon] == "lon" { drop { } } else { mutate { remove_field => [ "message", "host", "@timestamp", "@version" ] } mutate { convert => { "lon" => "float" } convert => { "lat" => "float" } } mutate { rename => { "lon" => "[location][lon]" "lat" => "[location][lat]" } } } } output { stdout { codec => dots } elasticsearch { index => "base_map_simple" template => "simple_base_map_template.json" document_type => "node_points" } }

Luego ejecuto lo siguiente:

$cat simple_base_map.csv | logstash-2.1.3/bin/logstash -f simple_base_map.conf Settings: Default filter workers: 16 Logstash startup completed ....................................................................................................Logstash shutdown completed

Sin embargo, al mirar el índice base_map_simple, sugiere que los documentos no tendrían una ubicación: tipo de punto de geo en él ... y más bien serían dos dobles de lat y lon.

$ curl -XGET ''localhost:9200/base_map_simple?pretty'' { "base_map_simple" : { "aliases" : { }, "mappings" : { "node_points" : { "properties" : { "location" : { "properties" : { "lat" : { "type" : "double" }, "lon" : { "type" : "double" } } } } } }, "settings" : { "index" : { "creation_date" : "1457355015883", "uuid" : "luWGyfB3ToKTObSrbBbcbw", "number_of_replicas" : "1", "number_of_shards" : "5", "version" : { "created" : "2020099" } } }, "warmers" : { } } }

¿Cómo necesitaría cambiar cualquiera de los archivos anteriores para asegurarme de que entra en la búsqueda elástica como tipo de punto geográfico?

Finalmente, me gustaría poder realizar una búsqueda de un vecino más cercano en los puntos geográficos usando un comando como el siguiente:

curl -XGET ''localhost:9200/base_map_simple/_search?pretty'' -d'' { "size": 1, "sort": { "_geo_distance" : { "location" : { "lat" : 50, "lon" : -1 }, "order" : "asc", "unit": "m" } } }''

Gracias