1、问题:node settings must not contain any index level settings
2、原因:
在 Elasticsearch 节点级别的配置中包含了索引级别的设置。
在 Elasticsearch 8.x 中,节点级别的配置和索引级别的配置应该分开设置,不应该在相同的配置块中混合使用。 确保节点配置文件(通常是 elasticsearch.yml 文件)中没有包含索引级别的设置。
例如,如果elasticsearch.yml中包含了以下类似的配置:
node.name: node-1
node.roles: [ master ]
index.number_of_shards: 3
上述配置中,node.name 和 node.roles是节点级别的配置,而 index.number_of_shards 是索引级别的配置。在 Elasticsearch 8.x 中,节点级别的配置应该在 elasticsearch.yml 中的 node 块中设置,而索引级别的配置应该在索引的创建过程中或通过修改索引的 settings 接口进行设置。
正确的配置方式是:
node.name: node-1
node.roles: [ master ]
然后,在索引创建或修改索引设置时设置 number_of_shards。在 Elasticsearch 中,索引的创建是通过 HTTP 请求发送给 Elasticsearch REST API 完成的,通常使用 PUT 请求创建索引。索引的创建请求可以包含一些配置参数,例如分片数、副本数等。
例如:通过 HTTP 请求创建一个名为 "my_index" 的索引:
PUT /my_index
{
"settings": {
"number_of_shards": 3,
"number_of_replicas": 1
}
}
在这个例子中,PUT /my_index 是创建索引的请求路径,而请求体中的 JSON 包含了索引的设置。
使用 curl 命令创建索引的示例:
curl -X PUT "http://localhost:9200/my_index" -H 'Content-Type: application/json' -d '
{
"settings": {
"number_of_shards": 3,
"number_of_replicas": 1
}
}'
在这个示例中,假设 Elasticsearch 运行在本地机器上,并且使用默认端口 9200。
验证索引的创建:
可以使用 curl 或者其他工具来验证索引是否成功创建。以下是一个检查索引是否存在的示例:
curl -X GET "http://localhost:9200/my_index"
如果索引成功创建,将会返回有关索引的信息。