Как добавить дополнительные разделители в стандартный токенизатор? - PullRequest
0 голосов
/ 20 мая 2019

Учитывая этот текст (пример из журналов nginx)

646 # 646: * 226999 Сбой SSL_do_handshake () (SSL: ошибка: 1417D18C: подпрограммы SSL: tls_process_client_hello: слишком низкая версия) во время подтверждения SSL, клиент: 192.0.2.0, сервер: 0.0.0.0:443

токенизатор standard производит

646
646
226999
ssl_do_handshake
failed
ssl
error
1417d18c:ssl
routines:tls_process_client_hello:version
too
low
while
ssl
handshaking
client
192.0.2.0
server
0.0.0.0
443

Я бы хотел, чтобы токены 1417d18c:ssl и routines:tls_process_client_hello:version были дополнительно разделены на :. Тем не менее, я не хочу, чтобы ssl_do_handshake или 192.0.2.0 делился дальше, и не должен, например can't быть маркированным на can, t.

Есть ли способ применить дополнительное разбиение после встроенного токенизатора?

Я застрял с использованием pattern? В каком случае какое регулярное выражение дублирует поведение standard?

1 Ответ

1 голос
/ 21 мая 2019

Кажется, вы добавляете в стандартные анализаторы.Если вы согласны с тем, что делает стандартный анализатор, и просто дополнительно хотите, чтобы производимые токены были далее токенизированы с помощью :, тогда вы можете определить стандартный анализатор как свой собственный анализатор, например, дать здесь и добавить шаблон захватить токен-фильтр для дальнейшего токенизации токенов, произведенных стандартным токенизатором.

Итак, определите анализатор и токен-фильтр, как показано ниже:

{
  "settings": {
    "analysis": {
      "analyzer": {
        "logs": {
          "tokenizer": "standard",
          "filter": [
            "lowercase",
            "log"
          ]
        }
      },
      "filter": {
        "log": {
          "type": "pattern_capture",
          "patterns": [
            "([^:]+)"
          ],
          "preserve_original" : false
        }
      }
    }
  }
}
...