{"record":{"id":"ac50bc99dc49f1af","repo":"elastic/elasticsearch","slug":"tokenize-on-chars-cannot-contain-empty-character","errorCode":null,"errorMessage":"[tokenize_on_chars] cannot contain empty characters","messagePattern":"\\[tokenize_on_chars\\] cannot contain empty characters","errorType":"validation","errorClass":"RuntimeException","httpStatus":null,"severity":"error","filePath":"modules/analysis-common/src/main/java/org/elasticsearch/analysis/common/CharGroupTokenizerFactory.java","lineNumber":42,"sourceCode":"\n    static final String MAX_TOKEN_LENGTH = \"max_token_length\";\n\n    private final Set<Integer> tokenizeOnChars = new HashSet<>();\n    private final Integer maxTokenLength;\n    private boolean tokenizeOnSpace = false;\n    private boolean tokenizeOnLetter = false;\n    private boolean tokenizeOnDigit = false;\n    private boolean tokenizeOnPunctuation = false;\n    private boolean tokenizeOnSymbol = false;\n\n    public CharGroupTokenizerFactory(IndexSettings indexSettings, Environment environment, String name, Settings settings) {\n        super(name);\n\n        maxTokenLength = settings.getAsInt(MAX_TOKEN_LENGTH, CharTokenizer.DEFAULT_MAX_WORD_LEN);\n\n        for (final String c : settings.getAsList(\"tokenize_on_chars\")) {\n            if (c == null || c.length() == 0) {\n                throw new RuntimeException(\"[tokenize_on_chars] cannot contain empty characters\");\n            }\n\n            if (c.length() == 1) {\n                tokenizeOnChars.add((int) c.charAt(0));\n            } else if (c.charAt(0) == '\\\\') {\n                tokenizeOnChars.add((int) parseEscapedChar(c));\n            } else {\n                switch (c) {\n                    case \"letter\" -> tokenizeOnLetter = true;\n                    case \"digit\" -> tokenizeOnDigit = true;\n                    case \"whitespace\" -> tokenizeOnSpace = true;\n                    case \"punctuation\" -> tokenizeOnPunctuation = true;\n                    case \"symbol\" -> tokenizeOnSymbol = true;\n                    default -> throw new RuntimeException(\"Invalid escaped char in [\" + c + \"]\");\n                }\n            }\n        }\n    }","sourceCodeStart":24,"sourceCodeEnd":60,"githubUrl":"https://github.com/elastic/elasticsearch/blob/db6a809a667c081ca1dc7500389d26975573215f/modules/analysis-common/src/main/java/org/elasticsearch/analysis/common/CharGroupTokenizerFactory.java#L24-L60","documentation":"Error \"[tokenize_on_chars] cannot contain empty characters\" thrown in elastic/elasticsearch.","triggerScenarios":"Thrown at modules/analysis-common/src/main/java/org/elasticsearch/analysis/common/CharGroupTokenizerFactory.java:42 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":[],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"analyzedSha":"db6a809a667c081ca1dc7500389d26975573215f","analyzedAt":"2026-08-12T01:39:14.192Z","schemaVersion":2},"datasetVersion":"2026-08-12T11:17:21.771Z"}