我在尝试将数据添加到 Azure 认知搜索索引时遇到问题。使用 python 脚本从 SQL Server 表中读取数据。该脚本使用 azure 搜索 sdk 中的 SearchIndexClient 将其发送到索引。
问题在于将 Python“int”值发送到 Edm.String 类型的搜索索引字段时。下面的链接似乎表明这应该是可能的。任何数字类型都可以进入 Edm.String。
但是我收到此错误:
无法将文字“0”转换为预期类型“Edm.String”。
我是否误解了文档?通过 Azure 搜索 SDK,python int 与 SQL Server int 不同吗?
我正在使用 pyodbc 连接到 Azure Synapse 数据库。使用游标循环检索行。这基本上就是我正在做的事情......
search_client = SearchIndexClient(env.search_endpoint,
env.search_index,
SearchApiKeyCredential(env.search_api_key),
logging_enable=True)
conn = pyodbc.connect(env.sqlconnstr_synapse_connstr, autocommit=True)
query = f"SELECT * FROM [{env.source_schema}].[{source_table}]"
cursor = conn.cursor()
cursor.execute(query)
source_table_columns = [source_table_column[0] for source_table_column in cursor.description]
rows = []
for source_table_values in cursor.fetchmany(MAX_ROWS_TO_FETCH):
source_table_row = dict(zip(source_table_columns,
source_table_values))
rows.append(source_table_row)
upload = search_client.upload_documents(documents=rows)
如果该行包含具有 int 值的行并且搜索索引表字段是 Edm.String,我们会收到错误。
无法将文字“0”转换为预期类型“Edm.String”。
最佳答案
感谢您提供代码片段。当使用 Indexer 时,数据类型映射链接适用。填充索引。
索引器提供了一种方便的机制来将文档从源数据源加载到索引中。他们执行概述的映射 here默认情况下或可以采用可选的 fieldMappings .
在手动更新索引的代码片段中,当源和目标之间存在类型不匹配时,用户将通过强制转换/转换等方式来处理。在获得字典后的代码片段中,您可以在将批处理上传到索引之前使用 str() 将 int 转换为字符串
source_table_row[列名] = str(source_table_row[列名])
这是一个python sample创建一个索引器来更新索引
关于Azure 认知搜索 int 到 Edm.String 字段问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71802722/