{"record":{"id":"3d2ea8d56836483f","repo":"elastic/elasticsearch","slug":"unknown-token-type-must-be-one-of","errorCode":null,"errorMessage":"Unknown token type: '{}', must be one of {}","messagePattern":"Unknown token type: '(.+?)', must be one of (.+?)","errorType":"validation","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"modules/analysis-common/src/main/java/org/elasticsearch/analysis/common/NGramTokenizerFactory.java","lineNumber":75,"sourceCode":"                    continue;\n                }\n            }\n        }\n        MATCHERS = unmodifiableMap(matchers);\n    }\n\n    static CharMatcher parseTokenChars(Settings settings) {\n        List<String> characterClasses = settings.getAsList(\"token_chars\");\n        if (characterClasses == null || characterClasses.isEmpty()) {\n            return null;\n        }\n        CharMatcher.Builder builder = new CharMatcher.Builder();\n        for (String characterClass : characterClasses) {\n            characterClass = characterClass.toLowerCase(Locale.ROOT).trim();\n            CharMatcher matcher = MATCHERS.get(characterClass);\n            if (matcher == null) {\n                if (characterClass.equals(\"custom\") == false) {\n                    throw new IllegalArgumentException(\n                        \"Unknown token type: '\"\n                            + characterClass\n                            + \"', must be one of \"\n                            + Stream.of(MATCHERS.keySet(), Collections.singleton(\"custom\"))\n                                .flatMap(x -> x.stream())\n                                .collect(Collectors.toSet())\n                    );\n                }\n                String customCharacters = settings.get(\"custom_token_chars\");\n                if (customCharacters == null) {\n                    throw new IllegalArgumentException(\"Token type: 'custom' requires setting `custom_token_chars`\");\n                }\n                final Set<Integer> customCharSet = customCharacters.chars().boxed().collect(Collectors.toSet());\n                matcher = customCharSet::contains;\n            }\n            builder.or(matcher);\n        }\n        return builder.build();","sourceCodeStart":57,"sourceCodeEnd":93,"githubUrl":"https://github.com/elastic/elasticsearch/blob/db6a809a667c081ca1dc7500389d26975573215f/modules/analysis-common/src/main/java/org/elasticsearch/analysis/common/NGramTokenizerFactory.java#L57-L93","documentation":"Error \"Unknown token type: '{}', must be one of {}\" thrown in elastic/elasticsearch.","triggerScenarios":"Thrown at modules/analysis-common/src/main/java/org/elasticsearch/analysis/common/NGramTokenizerFactory.java:75 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":[],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"db6a809a667c081ca1dc7500389d26975573215f","analyzedAt":"2026-08-12T01:39:14.192Z","schemaVersion":2},"datasetVersion":"2026-08-12T12:31:55.035Z"}