{"record":{"id":"71e2d424b96e2eb8","repo":"elastic/elasticsearch","slug":"cannot-specify-both-keywords-pattern-and-keywor","errorCode":null,"errorMessage":"cannot specify both `keywords_pattern` and `keywords` or `keywords_path`","messagePattern":"cannot specify both `keywords_pattern` and `keywords` or `keywords_path`","errorType":"validation","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"modules/analysis-common/src/main/java/org/elasticsearch/analysis/common/KeywordMarkerTokenFilterFactory.java","lineNumber":56,"sourceCode":" * the settings include {@code keywords_pattern}, which contains the regular expression\n * to match against.\n */\npublic class KeywordMarkerTokenFilterFactory extends AbstractTokenFilterFactory {\n\n    private final CharArraySet keywordLookup;\n    private final Pattern keywordPattern;\n    private final AnalysisMode analysisMode;\n\n    KeywordMarkerTokenFilterFactory(IndexSettings indexSettings, Environment env, String name, Settings settings) {\n        super(name);\n\n        boolean ignoreCase = settings.getAsBoolean(\"ignore_case\", false);\n        String patternString = settings.get(\"keywords_pattern\");\n        if (patternString != null) {\n            // a pattern for matching keywords is specified, as opposed to a\n            // set of keyword strings to match against\n            if (settings.get(\"keywords\") != null || settings.get(\"keywords_path\") != null) {\n                throw new IllegalArgumentException(\"cannot specify both `keywords_pattern` and `keywords` or `keywords_path`\");\n            }\n            keywordPattern = Pattern.compile(patternString);\n            keywordLookup = null;\n        } else {\n            Set<?> rules = Analysis.getWordSet(env, settings, \"keywords\");\n            if (rules == null) {\n                throw new IllegalArgumentException(\n                    \"keyword filter requires either `keywords`, `keywords_path`, \" + \"or `keywords_pattern` to be configured\"\n                );\n            }\n            // a set of keywords (or a path to them) is specified\n            keywordLookup = new CharArraySet(rules, ignoreCase);\n            keywordPattern = null;\n        }\n        boolean updateable = settings.getAsBoolean(\"updateable\", false);\n        this.analysisMode = updateable ? AnalysisMode.SEARCH_TIME : AnalysisMode.ALL;\n    }\n","sourceCodeStart":38,"sourceCodeEnd":74,"githubUrl":"https://github.com/elastic/elasticsearch/blob/db6a809a667c081ca1dc7500389d26975573215f/modules/analysis-common/src/main/java/org/elasticsearch/analysis/common/KeywordMarkerTokenFilterFactory.java#L38-L74","documentation":"Error \"cannot specify both `keywords_pattern` and `keywords` or `keywords_path`\" thrown in elastic/elasticsearch.","triggerScenarios":"Thrown at modules/analysis-common/src/main/java/org/elasticsearch/analysis/common/KeywordMarkerTokenFilterFactory.java:56 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-12T08:17:17.861Z"}