Настройка Elasticsearch Analyzer для новых полей в logstash

Используя GROK filter, мы можем добавить новое поле в Logstash.

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

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

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

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


person Vineeth Mohan    schedule 08.12.2013    source источник


Ответы (1)


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

Чтобы проанализировать это так, как вы указали, мы должны настроить наш анализатор следующим образом:

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

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

Так как нам нужен этот анализатор только на определенных индексах (т.е. индексах с префиксом logstash-). Используя 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_, который является заполнителем для «любого " введите указанный индекс. Это означает, что сопоставление будет добавлено к любому типу, независимо от его фактического имени типа.

person Njal Karevoll    schedule 09.12.2013