2013-12-08 5 views
5

Используя GROK filter, мы можем добавить новое поле в Logstash.Настройка анализатора Elasticsearch для новых полей в logstash

Но тогда мне интересно, как установить анализатор для этого конкретного поля.

Для например: у меня есть новое поле идентификатора, которое имеет поле как a_b, но нормальный анализатор погружено Elasticsearch, сломает это в a и b. Из-за этого я не могу эффективно использовать функцию терминов в этой конкретной области и сделать ее полезной.

Здесь для поля ID я хочу применить собственный собственный анализатор, который не маркирует значение, а применяет фильтр нижнего регистра.

Как это можно сделать в logstash.

ответ

9

Анализатор по умолчанию в Elasticsearch будет разметить условия с помощью Standard tokenizer, который будет разметить a b на два слагаемые: a и b, что после того, как по умолчанию стоп-слова фишки фильтра будут включены в только одним термина b. См. this play для небольшого примера, показывающего, как анализируется текст.

Для того, чтобы проанализировать этот путь вы указали, мы должны настроить наш анализатор, как, например:

"analyzer": { 
    "my_id_analyzer": { 
     "type": "custom", 
     "tokenizer": "keyword", 
     "filters": ["lowercase"] 
    } 
} 

Byt поскольку Logstash обычно создает новые индексы, когда это необходимо, мы должны убедиться, что этот анализатор доступен для все индексы, когда они созданы. Это можно сделать двумя способами: 1) добавить его в конфигурацию экземпляра Elasticsearch (elasticsearch.yml) или 2) создать шаблон индекса, который включает анализатор.

Поскольку нам нужен только этот анализатор для конкретных индексов (индексы i.e с префиксом logstash-). Используя Index template API, мы можем сделать следующее:

curl localhost:9200/_template/logstash-id -XPUT -d '{ 
    "template": "logstash-*", 
    "settings" : { 
     "analysis": { 
      "analyzer": { 
       "my_id_analyzer": { 
        "type": "custom", 
        "tokenizer": "keyword", 
        "filters": ["lowercase"] 
       } 
      } 
     } 
    }, 
    "mappings": { 
     "_default_": { 
      "properties" : { 
       "id" : { "type" : "string", "analyzer" : "my_id_analyzer" } 
      } 
     } 
    } 
}' 

После выполнения указанной выше команды, этот шаблон будет применяться к любому индексу с префиксом logstash- созданными впоследствии, и только «магия» часть добавленной картирование определение, которое использует встроенный тип _default_, который является заполнителем для «любого» типа в данном индексе. Это означает, что отображение будет добавлено к любому типу, независимо от его фактического имени типа.

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

  • Нет связанных вопросов^_^