Amazon OpenSearch Service:expected total copies错误修复求助
修复Amazon OpenSearch索引创建时的副本数验证错误
你遇到的错误信息:
[illegal_argument_exception] Validation Failed: 1: expected total copies needs to be a multiple of total awareness attributes [3];
错误原因
你的Amazon OpenSearch域开启了分片感知(shard awareness),且当前感知属性数量为3,但要创建的索引的分片副本总数(主分片数+副本分片数)不是3的整数倍。OpenSearch要求开启分片感知时,分片副本总数必须和感知属性数量成倍数关系,才能保证分片在各个感知节点组(比如多AZ部署的不同可用区)之间均匀分布。
修复方案
方案1:自定义索引的分片与副本配置
创建索引时指定合适的分片和副本数,确保两者之和是3的倍数。比如主分片数设为1、副本数设为2(1+2=3),或者主分片数2、副本数1(2+1=3)等。
用LangChain的OpenSearchVectorStore时,可通过indexSettings参数添加自定义配置:
import { Client } from "@opensearch-project/opensearch"; import { Document } from "langchain/document"; import { OpenAIEmbeddings } from "langchain/embeddings/openai"; import { OpenSearchVectorStore } from "langchain/vectorstores/opensearch"; const client = new Client({ nodes: [process.env.OPENSEARCH_URL ?? "http://127.0.0.1:9200"], auth: { username: process.env.OPENSEARCH_USERNAME ?? "", password: process.env.OPENSEARCH_PASSWORD ?? "", }, }); const embedding = new OpenAIEmbeddings(); await OpenSearchVectorStore.fromDocuments(docs, embedding, { client, indexName: process.env.OPENSEARCH_INDEX, indexSettings: { "number_of_shards": 1, "number_of_replicas": 2 // 总数3,匹配感知属性数量 } });
方案2:调整OpenSearch域的分片感知配置
如果不需要分片感知功能,或者想调整感知属性数量:
- 登录AWS控制台,进入Amazon OpenSearch服务页面
- 找到目标域,进入配置 > 集群配置
- 关闭分片感知选项,或者修改感知属性的数量(比如改成1或2,确保后续索引的副本总数能匹配)
- 保存配置,等待域更新完成
方案3:修改默认索引模板
如果希望所有新创建的索引都自动满足要求,可以修改OpenSearch的默认索引模板,设置默认的number_of_shards和number_of_replicas,使两者之和为3的倍数。
内容的提问来源于stack exchange,提问作者Seok Loi
相关产品推荐
相关产品推荐

