usa tutorial que puertos para instalar index funciona elastic crear como elasticsearch logstash logstash-grok elasticsearch-mapping

tutorial - puertos elasticsearch



Cambie la asignaciĆ³n predeterminada de la cadena a "no analizada" en Elasticsearch (4)

En mi sistema, la inserción de datos siempre se realiza a través de archivos csv a través de logstash. Nunca predefiní el mapeo. Pero cada vez que ingreso una cadena, siempre se toma para analyzed , como resultado, una entrada como hello I am Sinha se divide en hello , I , am , Sinha . ¿Hay alguna forma de que pueda cambiar la asignación predeterminada / dinámica de Elasticsearch para que todas las cadenas, independientemente del índice, independientemente del tipo, sean tomadas para not analyzed ser not analyzed ? ¿O hay alguna forma de configurarlo en el archivo .conf ? Digamos que mi archivo conf parece

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 } }

Quiero que not analyzed todas las cadenas y tampoco me importa que sea la configuración predeterminada para que todos los datos futuros se inserten en elasticsearch


Creo que actualizar el mapeo es un enfoque incorrecto solo para manejar un campo con fines informativos. Tarde o temprano es posible que desee poder buscar tokens en el campo. Si está actualizando el campo a "no analizado" y desea buscar foo desde un valor "foo bar", no podrá hacerlo.

Una solución más elegante es usar filtros de agregación de kibana en lugar de términos. Algo como a continuación buscará los términos ivr04 y ivr02. Entonces, en su caso, puede tener un filtro "Hola, soy Sinha". Espero que esto ayude.


Haga una copia de lib / logstash / salidas / elasticsearch / elasticsearch-template.json de su distribución Logstash (posiblemente instalada como /opt/logstash/lib/logstash/outputs/elasticsearch/elasticsearch-template.json), modifíquela reemplazándola

"dynamic_templates" : [ { "string_fields" : { "match" : "*", "match_mapping_type" : "string", "mapping" : { "type" : "string", "index" : "analyzed", "omit_norms" : true, "fields" : { "raw" : {"type": "string", "index" : "not_analyzed", "ignore_above" : 256} } } } } ],

con

"dynamic_templates" : [ { "string_fields" : { "match" : "*", "match_mapping_type" : "string", "mapping" : { "type" : "string", "index" : "not_analyzed", "omit_norms" : true } } } ],

y la template puntos para su complemento de salida a su archivo modificado:

output { elasticsearch { ... template => "/path/to/my-elasticsearch-template.json" } }

Todavía puede anular este valor predeterminado para campos particulares.


Puede consultar la versión .raw de su campo. Esto se agregó en Logstash 1.3.1 :

La plantilla de índice logstash que proporcionamos agrega un campo ".raw" a cada campo que indexa. Logstash establece estos campos ".raw" como "no_analizados" para que no tenga lugar ningún análisis o tokenización: ¡nuestro valor original se utiliza tal cual!

Entonces, si su campo se llama foo , consultaría foo.raw para devolver la not_analyzed (no dividida en delimitadores).


Solo crea una plantilla. correr

curl -XPUT localhost:9200/_template/template_1 -d ''{ "template": "*", "settings": { "index.refresh_interval": "5s" }, "mappings": { "_default_": { "_all": { "enabled": true }, "dynamic_templates": [ { "string_fields": { "match": "*", "match_mapping_type": "string", "mapping": { "index": "not_analyzed", "omit_norms": true, "type": "string" } } } ], "properties": { "@version": { "type": "string", "index": "not_analyzed" }, "geoip": { "type": "object", "dynamic": true, "path": "full", "properties": { "location": { "type": "geo_point" } } } } } } }''