{"record":{"id":"2d341d9b45dd9f4a","repo":"elastic/elasticsearch","slug":"the-difference-between-max-gram-and-min-gram-in-ng-2d341d","errorCode":null,"errorMessage":"The difference between max_gram and min_gram in NGram Tokenizer must be less than or equal to: [{}] but was [{}]. This limit can be set by changing the [{}] index level setting.","messagePattern":"The difference between max_gram and min_gram in NGram Tokenizer must be less than or equal to: \\[(.+?)\\] but was \\[(.+?)\\]\\. This limit can be set by changing the \\[(.+?)\\] index level setting\\.","errorType":"validation","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"modules/analysis-common/src/main/java/org/elasticsearch/analysis/common/NGramTokenizerFactory.java","lineNumber":103,"sourceCode":"                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();\n    }\n\n    NGramTokenizerFactory(IndexSettings indexSettings, Environment environment, String name, Settings settings) {\n        super(name);\n        int maxAllowedNgramDiff = indexSettings.getMaxNgramDiff();\n        this.minGram = settings.getAsInt(\"min_gram\", NGramTokenizer.DEFAULT_MIN_NGRAM_SIZE);\n        this.maxGram = settings.getAsInt(\"max_gram\", NGramTokenizer.DEFAULT_MAX_NGRAM_SIZE);\n        int ngramDiff = maxGram - minGram;\n        if (ngramDiff > maxAllowedNgramDiff) {\n            throw new IllegalArgumentException(\n                \"The difference between max_gram and min_gram in NGram Tokenizer must be less than or equal to: [\"\n                    + maxAllowedNgramDiff\n                    + \"] but was [\"\n                    + ngramDiff\n                    + \"]. This limit can be set by changing the [\"\n                    + IndexSettings.MAX_NGRAM_DIFF_SETTING.getKey()\n                    + \"] index level setting.\"\n            );\n        }\n        this.matcher = parseTokenChars(settings);\n    }\n\n    @Override\n    public Tokenizer create() {\n        if (matcher == null) {\n            return new NGramTokenizer(minGram, maxGram);\n        } else {\n            return new NGramTokenizer(minGram, maxGram) {","sourceCodeStart":85,"sourceCodeEnd":121,"githubUrl":"https://github.com/elastic/elasticsearch/blob/db6a809a667c081ca1dc7500389d26975573215f/modules/analysis-common/src/main/java/org/elasticsearch/analysis/common/NGramTokenizerFactory.java#L85-L121","documentation":"Error \"The difference between max_gram and min_gram in NGram Tokenizer must be less than or equal to: [{}] but was [{}]. This limit can be set by changing the [{}] index level setting.\" thrown in elastic/elasticsearch.","triggerScenarios":"Thrown at modules/analysis-common/src/main/java/org/elasticsearch/analysis/common/NGramTokenizerFactory.java:103 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-12T13:17:24.610Z"}