Azure AI Search向量存储导入报错:无法转换为Edm.String
Azure AI Search导入文档类型转换错误排查与解决
问题场景
已成功创建Azure AI Search索引,代码如下:
# Define the index fields client = SearchIndexClient(endpoint, credential) fields = [ SimpleField(name="id", type=SearchFieldDataType.String, key=True, sortable=True, filterable=True, facetable=True), SimpleField(name="originalbalancedue", type=SearchFieldDataType.Double, sortable=True, filterable=True, facetable=True), SimpleField(name="adjustedbalancedue", type=SearchFieldDataType.Double, sortable=True, filterable=True, facetable=True), SimpleField(name="feeamount", type=SearchFieldDataType.Double, sortable=True, filterable=True, facetable=True), SearchableField(name="result", type=SearchFieldDataType.Double, sortable=True, filterable=True) ] index = SearchIndex(name=index_name, fields=fields, vector_search=vector_search) result = client.create_or_update_index(index) print(f'{result.name} created')
执行文档导入代码时:
with open('worthiness_with_result_small.json', 'r') as f: content = f.read().strip() if content: documents = json.loads(content) print(f"loaded {len(documents)} documents") else: print("The file is empty.") search_client = SearchClient(endpoint=endpoint, index_name=index_name, credential=credential) result = search_client.upload_documents(documents) print(f"Uploaded {len(documents)} documents")
出现如下错误:
HttpResponseError: () The request is invalid. Details: Cannot convert the literal '5759.12' to the expected type 'Edm.String'. Code: Message: The request is invalid. Details: Cannot convert the literal '5759.12' to the expected type 'Edm.String'.
导入的JSON数据:
[{"id":"425001","originalbalancedue":1684269.59,"adjustedbalancedue":1683369.59,"feeamount":6659.1199999999998900,"result":5759.1199999999998900}]
错误原因
SearchableField类型不支持直接定义SearchFieldDataType.Double类型。当用SearchableField声明字段时,Azure AI Search默认期望该字段为字符串类型(Edm.String),但导入的result字段是数值类型,因此触发类型转换错误。
解决方案
将result字段的定义从SearchableField改为SimpleField,并添加searchable=True参数,这样既保留数值类型,又能让字段支持搜索:
修改后的索引字段定义代码:
# Define the index fields client = SearchIndexClient(endpoint, credential) fields = [ SimpleField(name="id", type=SearchFieldDataType.String, key=True, sortable=True, filterable=True, facetable=True), SimpleField(name="originalbalancedue", type=SearchFieldDataType.Double, sortable=True, filterable=True, facetable=True), SimpleField(name="adjustedbalancedue", type=SearchFieldDataType.Double, sortable=True, filterable=True, facetable=True), SimpleField(name="feeamount", type=SearchFieldDataType.Double, sortable=True, filterable=True, facetable=True), # 修改此处:用SimpleField并开启searchable SimpleField(name="result", type=SearchFieldDataType.Double, sortable=True, filterable=True, searchable=True) ] index = SearchIndex(name=index_name, fields=fields, vector_search=vector_search) result = client.create_or_update_index(index) print(f'{result.name} created')
修改后重新创建索引,再执行文档导入操作即可解决问题。
内容的提问来源于stack exchange,提问作者VictorGram
相关产品推荐
相关产品推荐

