2016-12-29 7 views
0

Я использую elasticsearch кластера версии 1.7.2, и пытается изменить отображение (я думаю) одного из полей, чтобы игнорировать этот символ: «-»ElasticSearch - Изменить отображение в поле

, поле является «Request.Headers.Host», а значение может включать в себя «-» как: «app-cdn.cap.com»

#curl -X GET http://10.2.5.181:9200?pretty 
{ 
    "status" : 200, 
    "name" : "log-zone-a", 
    "cluster_name" : "cap-logs", 
    "version" : { 
    "number" : "1.7.2", 
    "build_hash" : "e43676b1385b7f593f7202acbd816e8ec", 
    "build_timestamp" : "2015-09-14T09:49:53Z", 
    "build_snapshot" : false, 
    "lucene_version" : "4.10.4" 
    }, 
    "tagline" : "You Know, for Search" 
} 

Я видел, что это связано с параметром not_analyzed, и от того, что я ve найдено в Интернете, я пробовал:

#curl -X PUT '{"mappings":{"logs":{"properties":{"Request.Headers.Host":{"type":"string","index":"not_analyzed"}}}}}' http://10.2.5.181:9200/logstash-2016.12.27/logs/_mapping?pretty 
curl: (3) [globbing] nested braces not supported at pos 13 
{ 
    "error" : "ActionRequestValidationException[Validation Failed: 1: mapping source is empty;]", 
    "status" : 400 
} 
#curl -H 'Accept: application/json' -X PUT http://10.2.5.181:9200/logstash-2016.12.27?pretty -d @/home/moses/mapping.json 
{ 
    "error" : "RemoteTransportException[[log-zone-b][inet[/10.2.105.181:9300]][indices:admin/create]]; nested: IndexAlreadyExistsException[[logstash-2016.12.27] already exists]; ", 
    "status" : 400 
} 

#cat /home/moses/mapping.json | jq . 
{ 
    "logstash-2016.12.27": { 
    "mappings": { 
     "logs": { 
     "properties": { 
      "Request.Headers.Host": { 
      "type": "string", 
      "index": "not_analyzed" 
      } 
     } 
     } 
    } 
    } 
} 

Когда я меняю отображение и делать то же самое для несуществующего индекса это успех, но индекс кажется неправильным, отделить «Request.Headers.Host» с точками :(

#cat /home/moses/mapping.json 
{"Request.Headers.Host":{"type":"string","index":"not_analyzed"}} 

    #curl -H 'Accept: application/json' -X PUT http://10.2.5.181:9200/logstash-2016.12.30?pretty -d @/home/moses/mapping.json 
    { 
     "acknowledged" : true 
    } 

#curl -H 'Accept: application/json' -X GET http://10.2.5.181:9200/logstash-2016.12.30?pretty 
{ 
"logstash-2016.12.30" : { 
"aliases" : { }, 
"mappings" : { }, 
"settings" : { 
    "index" : { 
    "creation_date" : "1483011476137", 
    "Request" : { 
     "Headers" : { 
     "Host" : { 
      "type" : "string", 
      "index" : "not_analyzed" 
     } 
     } 
    }, 
    "uuid" : "M6Ly0wvwTGu1aulSViYcPg", 
    "number_of_replicas" : "1", 
    "number_of_shards" : "5", 
    "version" : { 
     "created" : "1070299" 
    } 
    } 
}, 
"warmers" : { } 
    } 
} 

Как установить этот вид конфигурации сопоставления с текущими индексами и будущими индексами?

Спасибо, Моше

+0

Вы не можете обновить отображение для существующих полей. У вас есть два способа обхода здесь: 1) Полные данные Reindex с обновленным сопоставлением. Но прежде чем индексировать данные, убедитесь, что вы разместили их. 2) Добавьте новое поле 'not_analyzed' в существующий индекс. [Ссылка -1] (http://stackoverflow.com/questions/25471715/create-or-update-mapping-in-elasticsearch), [Ссылка-2] (http://stackoverflow.com/questions/16290636/how -to-update-a-field-type-in-elasticsearch) – Roopendra

+0

О дефис: см. [ElasticSearch - Поиск с дефисами] (http://stackoverflow.com/questions/30917043/elasticsearch-searching-with-hyphens) – rvheddeg

+0

@rvheddeg У меня проблемы с дефисами, когда я создаю информационные панели, kibana анализирует значение: «Request.Headers.Host»: «app-cdn.cap.com» как два значения: «приложение» и «cdn .cap.com " –

ответ

0

Чтобы правильно установить отображение для внутреннего поля, как «Request.Headers.Host», вы должны определить несколько уровней:

{ 
    "logs" : { 
    "properties" : { 
     "Request" : { 
     "properties" : { 
      "Headers" : { 
      "properties": { 
       "Host": { 
       "type" : "string", 
       "index": "not_analyzed" 
       } 
      } 
      } 
     } 
     } 
    } 
    } 
} 
+0

спасибо @AlainCollins! Я довольно noob в ES, как я могу перенести это отображение в будущие индексы? –

+0

Чтобы установить сопоставление для будущего индекса, используйте [шаблон] (https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-templates.html). –

+0

thanks @AlainCollins Как установить сопоставление по умолчанию для определенного индекса (например, имя_пользователя: logstash-2016.02.01)? Мне нужен по умолчанию для этого индекса будет «not_analyzed» без указания каждого поля. –

Смежные вопросы