Too many cached tokens with illegal_state_exception

Доброго времени суток.
При использовании фонетического анализатора (см transliteration в конфиге ниже), во время записи (индексации) документов в Elasticsearch, используя Bulk API (пачка порядка 100 документов за один запрос), в ответе API выстреливает исключение вида:

Type: "illegal_state_exception",
Reason: "Too many cached tokens (> 100)"

Причем данное исключение появилось не сразу, поначалу данные индексировались корректно.

Если пересоздать индекс без фонетического анализатора - исключения пропадают.
Гугление данного исключения не дало никаких результатов, нигде нет и упоминания.
Фонетический анализатор используется в нескольких полях документа, маппинг приведен ниже.

Как решить данную проблему?

Версия ES: 7.4.1
Конфиг индекса:

{
  "settings": {
    "number_of_shards": 3,
    "index.refresh_interval": "30s",
    "analysis": {
      "filter": {
        "transliteration_english": {
          "type": "phonetic",
          "encoder": "beider_morse",
          "rule_type": "approx",
          "name_type": "generic",
          "languageset": [
            "english"
          ]
        },
        "transliteration_cyrillic": {
          "type": "phonetic",
          "encoder": "beider_morse",
          "rule_type": "approx",
          "name_type": "generic",
          "languageset": [
            "cyrillic"
          ]
        }
      },
      "analyzer": {
        "transliteration": {
          "tokenizer": "standard",
          "filter": [
            "lowercase",
            "transliteration_english",
            "transliteration_cyrillic"
          ]
        }
      }
    }
  },
  "mappings": {
    "properties": {
      "field1": {
        "type": "search_as_you_type",
        "analyzer": "transliteration",
        "max_shingle_size": 3
      },
      "field2": {
        "type": "text",
        "analyzer": "russian",
        "fields": {
          "keyword": {
            "type": "keyword",
            "ignore_above": 256
          },
          "translit": {
            "type": "search_as_you_type",
            "analyzer": "transliteration",
            "max_shingle_size": 2
          }
        }
      },
      "field3": {
        "type": "keyword"
      },
      "field4": {
        "type": "keyword"
      },
      "field5": {
        "type": "keyword"
      },
      "field6": {
        "type": "integer"
      },
      "field7": {
        "type": "integer"
      },
      "field8": {
        "type": "search_as_you_type",
        "analyzer": "russian",
        "fields": {
          "keyword": {
            "type": "keyword",
            "ignore_above": 256
          }
        }
      },
      "field9": {
        "properties": {
          "subfield1": {
            "type": "keyword"
          },
          "subfield2": {
            "type": "search_as_you_type",
            "max_shingle_size": 2,
            "analyzer": "russian",
            "fields": {
              "keyword": {
                "type": "keyword",
                "ignore_above": 256
              }
            }
          }
        }
      },
      "field10": {
        "type": "boolean"
      },
      "field11": {
        "type": "boolean"
      }
    }
  }
}
2 Likes

А можно на stacktrace этой ошибки как-нибудь посмотреть? Странно, что это во время индексирования происходит, этот фильтр обычно только во время поиска так сбоит.

Удалось воспроизвести. Похоже на баг, я открыл https://github.com/elastic/elasticsearch/issues/61491

1 Like

Не успел прислать stacktrace.
Большое спасибо за оперативность и исследование проблемы!

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.