ElasticSearch 6.2.4 java.lang.IllegalArgumentException: документ содержит хотя бы один огромный термин - PullRequest
0 голосов
/ 26 октября 2018

Я использую Elasticsearch 6.2.4 и пытаюсь проиндексировать данные вasticsearch.

Вот шаблон, который я использую:

{
   "order": 0,
   "template": "logs-*",
   "settings": {
      "index": {
         "analysis": {
            "analyzer": {
               "ngram-msg-analyzer": {
                  "filter": [
                     "lowercase",
                     "standard"
                  ],
                  "min_gram": "3",
                  "type": "custom",
                  "max_gram": "3",
                  "tokenizer": "ngram",
                  "min": "0",
                  "max": "2147483647"
               }
            }
         },
         "number_of_shards" : "3",
         "number_of_replicas" : "1"
      }
   },
   "mappings": {
      "_doc": {
         "dynamic_templates": [
            {
               "ts": {
                  "mapping": {
                     "format": "epoch_millis",
                     "type": "date"
                  },
                  "match_mapping_type": "string",
                  "match": "*_ts"
               }
            },
            {
               "strings_notanalyzed": {
                  "unmatch": "*_analyzed",
                  "mapping": {
                     "index": true,
                     "type": "keyword"
                  },
                  "match_mapping_type": "string"
               }
            }
         ],
         "properties": {
            "server_ts": {
               "format": "strict_date_optional_time||epoch_millis",
               "type": "date"
            },
            "log_message": {
               "analyzer": "ngram-msg-analyzer",
               "index": true,
               "type": "text",
               "fields": {
                  "std": {
                     "analyzer": "standard",
                     "type": "text"
                  },
                  "raw": {
                     "ignore_above": 2147483647,
                     "type": "keyword"
                  }
               }
            },
            "message": {
               "index": true,
               "type": "text"
            }
         }
      }
   },
   "aliases": {}
}

Я установил для параметра ignore_above значение max, чтобы избежать отбрасывания сообщений, но все же я получаю следующую ошибку в журналах индексации Elasticsearch для терминов, превышающих 32766.

не удалось выполнить массовый элемент (индекс) BulkShardRequest [[logs-2018-10-25] [1]], содержащий [1406] запросов java.lang.IllegalArgumentException: документ содержит по крайней мере один огромный термин в field = "log_message.raw" (чья кодировка UTF8 длиннее максимальной длины 32766), все из которых были пропущены. Пожалуйста, исправьте анализатор, чтобы не выдавать такие термины. Префикс первого необъятного термина: '[82, 101, 113, 117, 101, 115, 116, 32, 112, 114, 111, 99, 101, 115, 115, 105, 110, 103, 32, 101 , 120, 99, 101, 112, 116, 105, 111, 110, 58, 32] ... ', исходное сообщение: длина байт может быть не более 32766; получил 86139

Почему это происходит даже после установки ignore_above на такое высокое значение?

...