尽管在映射中设置了 [ERROR] 'The [dims] property must be specified for field [vector].'
getting [ERROR] 'The [dims] property must be specified for field [vector].' despite being set in mapping
我正在尝试将密集向量上传到 Elasticsearch 端点。
- 已创建索引,映射如下:
mapping = {
"mappings": {
"properties" : {
"vector": {
"type": "dense_vector",
"dims": 300
},
"word" : {
"type" : "text"
}
}
}
}
es.indices.create(
index="test",
body=mapping
)
收到回复:
{'acknowledged': True, 'shards_acknowledged': True, 'index': 'test'}
- 创建了一个使用批量 api 上传矢量的函数,如下所示:
模型是一个 python 字典,其中词作为键,关联向量作为值。
def gendata(model):
for key, value in model.items():
key = str(key)
yield {
"_index": "test",
"_id": key,
"_type": "document",
"word": key,
"vector": value
}
使用 helpers.bulk()
调用函数 gendata() 时出现以下错误
注意:dims 是在映射中设置的,那么为什么它给出必须指定 dims 的错误。
BulkIndexError: ('100 document(s) failed to index.', [{'index': {'_index': 'test', '_type': 'document', '_id': 'the', 'status': 400, 'error': {'type': 'mapper_parsing_exception', 'reason': 'The [dims] property must be specified for field [vector].'}, 'data': {'word': 'the', 'vector': [0.04656, 0.21318, -0.0074364, -0.45854, -0.035639, 0.23643, -0.28836, 0.21521, -0.13486, -1.6413, -0.26091, 0.032434, 0.056621, -0.043296, -0.021672, 0.22476, -0.075129, -0.067018, -0.14247, 0.038825, -0.18951, 0.29977, 0.39305, 0.17887, -0.17343, -0.21178, 0.23617, -0.063681, -0.42318, -0.11661, 0.093754, 0.17296, -0.33073, 0.49112, -0.68995, -0.092462, 0.24742, -0.17991, 0.097908, 0.083118, 0.15299, -0.27276, -0.038934, 0.54453, 0.53737, 0.29105, -0.0073514, 0.04788, -0.4076, -0.026759, 0.17919, 0.010977,
Elasticsearch 在查询期间不会读取您的映射配置,因为您使用的 ES 7.x 不再支持 doc_type
-doc here - 但您指定了这个bulk
查询中的参数。根据 mapping
变量,当您创建索引时,您没有指定 doc_type
,但是当您执行批量请求时,您使用的是不存在的 doc_type - document
.
所以请更改:
def gendata(model):
for key, value in model.items():
key = str(key)
yield {
"_index": "test",
"_id": key,
"_type": "document",
"word": key,
"vector": value
}
在:
def gendata(model):
for key, value in model.items():
key = str(key)
yield {
"_index": "test",
"_id": key,
"word": key,
"vector": value
}
我正在尝试将密集向量上传到 Elasticsearch 端点。
- 已创建索引,映射如下:
mapping = {
"mappings": {
"properties" : {
"vector": {
"type": "dense_vector",
"dims": 300
},
"word" : {
"type" : "text"
}
}
}
}
es.indices.create(
index="test",
body=mapping
)
收到回复:
{'acknowledged': True, 'shards_acknowledged': True, 'index': 'test'}
- 创建了一个使用批量 api 上传矢量的函数,如下所示: 模型是一个 python 字典,其中词作为键,关联向量作为值。
def gendata(model):
for key, value in model.items():
key = str(key)
yield {
"_index": "test",
"_id": key,
"_type": "document",
"word": key,
"vector": value
}
使用 helpers.bulk()
调用函数 gendata() 时出现以下错误注意:dims 是在映射中设置的,那么为什么它给出必须指定 dims 的错误。
BulkIndexError: ('100 document(s) failed to index.', [{'index': {'_index': 'test', '_type': 'document', '_id': 'the', 'status': 400, 'error': {'type': 'mapper_parsing_exception', 'reason': 'The [dims] property must be specified for field [vector].'}, 'data': {'word': 'the', 'vector': [0.04656, 0.21318, -0.0074364, -0.45854, -0.035639, 0.23643, -0.28836, 0.21521, -0.13486, -1.6413, -0.26091, 0.032434, 0.056621, -0.043296, -0.021672, 0.22476, -0.075129, -0.067018, -0.14247, 0.038825, -0.18951, 0.29977, 0.39305, 0.17887, -0.17343, -0.21178, 0.23617, -0.063681, -0.42318, -0.11661, 0.093754, 0.17296, -0.33073, 0.49112, -0.68995, -0.092462, 0.24742, -0.17991, 0.097908, 0.083118, 0.15299, -0.27276, -0.038934, 0.54453, 0.53737, 0.29105, -0.0073514, 0.04788, -0.4076, -0.026759, 0.17919, 0.010977,
Elasticsearch 在查询期间不会读取您的映射配置,因为您使用的 ES 7.x 不再支持 doc_type
-doc here - 但您指定了这个bulk
查询中的参数。根据 mapping
变量,当您创建索引时,您没有指定 doc_type
,但是当您执行批量请求时,您使用的是不存在的 doc_type - document
.
所以请更改:
def gendata(model):
for key, value in model.items():
key = str(key)
yield {
"_index": "test",
"_id": key,
"_type": "document",
"word": key,
"vector": value
}
在:
def gendata(model):
for key, value in model.items():
key = str(key)
yield {
"_index": "test",
"_id": key,
"word": key,
"vector": value
}