{"record":{"id":"6b67dff9870eda26","repo":"apache/seatunnel","slug":"elasticsearch-source-config-warn-when-both-index","errorCode":null,"errorMessage":"Elasticsearch Source config warn: when both 'index' and 'index_list' are present in the configuration, only the 'index_list' configuration will take effect","messagePattern":"Elasticsearch Source config warn: when both 'index' and 'index_list' are present in the configuration, only the 'index_list' configuration will take effect","errorType":"console","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"seatunnel-connectors-v2/connector-elasticsearch/src/main/java/org/apache/seatunnel/connectors/seatunnel/elasticsearch/source/ElasticsearchSource.java","lineNumber":79,"sourceCode":"\n@Slf4j\npublic class ElasticsearchSource\n        implements SeaTunnelSource<\n                        SeaTunnelRow, ElasticsearchSourceSplit, ElasticsearchSourceState>,\n                SupportParallelism,\n                SupportColumnProjection {\n\n    private final List<ElasticsearchConfig> elasticsearchConfigList;\n    private final ReadonlyConfig connectionConfig;\n\n    public ElasticsearchSource(ReadonlyConfig config) {\n        this.connectionConfig = config;\n        boolean multiSource = config.getOptional(ElasticsearchSourceOptions.INDEX_LIST).isPresent();\n        boolean singleSource = config.getOptional(ElasticsearchSourceOptions.INDEX).isPresent();\n\n        if (multiSource && singleSource) {\n            log.warn(\n                    \"Elasticsearch Source config warn: when both 'index' and 'index_list' are present in the configuration, only the 'index_list' configuration will take effect\");\n        }\n        if (multiSource) {\n            this.elasticsearchConfigList = createMultiSource(config);\n        } else {\n            this.elasticsearchConfigList =\n                    Collections.singletonList(parseOneIndexQueryConfig(config));\n        }\n    }\n\n    private List<ElasticsearchConfig> createMultiSource(ReadonlyConfig config) {\n        List<Map<String, Object>> configMaps = config.get(ElasticsearchSourceOptions.INDEX_LIST);\n        List<ReadonlyConfig> configList =\n                configMaps.stream().map(ReadonlyConfig::fromMap).collect(Collectors.toList());\n        List<ElasticsearchConfig> elasticsearchConfigList = new ArrayList<>(configList.size());\n        for (ReadonlyConfig readonlyConfig : configList) {\n            // NOTE: per-entry configs inside `index_list` are NOT validated by the factory's\n            // OptionRule (which only validates the top-level config). If an entry is missing\n            // `index`, or sets `search_type=SQL` without `sql_query`, parseOneIndexQueryConfig","sourceCodeStart":61,"sourceCodeEnd":97,"githubUrl":"https://github.com/apache/seatunnel/blob/cf67b549a7a6c35fa0beb12d83c62892427ea919/seatunnel-connectors-v2/connector-elasticsearch/src/main/java/org/apache/seatunnel/connectors/seatunnel/elasticsearch/source/ElasticsearchSource.java#L61-L97","documentation":"When an Elasticsearch source config contains both 'index' and 'index_list', the connector logs this warning because only 'index_list' is honored and the 'index' value is silently ignored. This prevents ambiguous multi/single-source setup.","triggerScenarios":"Setting index = \"...\" and index_list = [...] simultaneously in the Elasticsearch source configuration, e.g. after extending a single-index job to multiple indices.","commonSituations":"Copy-pasted configs where the old single-index key was not removed; templated configs that always emit both keys.","solutions":["Remove the 'index' key when 'index_list' is present","Or remove 'index_list' if you actually want a single index read","Confirm in logs which index set will be used"],"exampleFix":"// before\nindex = \"orders_v1\"\nindex_list = [\"orders_v1\", \"orders_v2\"]\n// after (multi-index)\nindex_list = [\"orders_v1\", \"orders_v2\"]","handlingStrategy":"validation","validationCode":"// reject configs with both keys\nif (config.hasPath(\"index\") && config.hasPath(\"index_list\")) {\n    throw new IllegalArgumentException(\"Set only one of 'index' or 'index_list'\");\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Keep a single canonical index key per job config","When scaling to multi-index, delete the old 'index' entry","Add a config lint step in CI for ES job files"],"tags":["elasticsearch","config","ambiguity"],"backgroundTag":"conflicting-config-options","analyzedSha":"cf67b549a7a6c35fa0beb12d83c62892427ea919","analyzedAt":"2026-09-10T21:44:55.265Z","contentChangedAt":"2026-09-10T21:44:55.265Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}