qkfang Asked: 2024-12-26 11:13:42 +0800 CST2024-12-26 11:13:42 +0800 CST 2024-12-26 11:13:42 +0800 CST 将动态 json 文档添加到 Azure AI Search,而无需明确定义字段名称 772 我一直在研究 Azure AI Search,以存储用于向量搜索的动态 json 文档。 了解我们可以在 AI 搜索中定义 json 模式,如下所示,以获得结构化的 json。但是,想知道是否有一种方法可以在没有统一结构的情况下存储 json 有效负载。例如,它可以存储 json 文件 1/2/3(每个文件在侧内容字段中的结构不同,理想情况下为 json 类型而不是字符串类型) 还尝试将 json 转储为字符串并存储在内容字段中,但不确定是否有更好的方法可以做到这一点,以便以后进行向量搜索。 azure-openai 1 个回答 Voted Best Answer JayashankarGS 2024-12-26T18:57:14+08:002024-12-26T18:57:14+08:00 以下是可能的方法。 您将整个 json 制作content成字符串并创建一个vector_content。当您进行向量搜索时,这将包括所有 Json 内容。 预处理数据并上传到索引的示例代码。 import openai openai.api_type = "azure" openai.api_key = "YOUR_API_KEY" openai.api_base = "https://YOUR_RESOURCE_NAME.openai.azure.com" openai.api_version = "2024-06-01" documents=[] files=["cosmosdata.json","file2.json"...] for file in files: data = json.dumps(json.load(open(file))) response = openai.Embedding.create( input=data, engine="YOUR_DEPLOYMENT_NAME") embeddings = response['data'][0]['embedding'] obj = { "id":1, "content":data, "content_vector": embeddings #Add required fields from metadata } documents.append(obj) result = search_client.upload_documents(documents=[documents]) 您可以相应地修改上述代码,检查此文档以了解如何生成嵌入和创建索引 如果 Json 内容是部分动态的,即某些字段对于所有需要进行过滤的记录都是通用的,那么您只需为通用字段创建一个模式并将剩余内容保存为字符串。 您可以仅在 JSON 内容的相关部分生成嵌入以提高搜索质量,因此要创建索引,您需要预处理文档并将其上传到索引。 例如,下面有 2 个不同的 Json 数据。 { "id": "2", "Color2": "WHITE-CREAM" }, { "id": "10", "Color3": "WHITE" } 这里,id有相同,又有color不同。 在这种情况下,您可以使用创建索引字段id并uncommon_content包含颜色数据和矢量字段uncommon_content,这里您只包含嵌入的相关部分。
以下是可能的方法。
content
成字符串并创建一个vector_content
。当您进行向量搜索时,这将包括所有 Json 内容。预处理数据并上传到索引的示例代码。
您可以相应地修改上述代码,检查此文档以了解如何生成嵌入和创建索引
如果 Json 内容是部分动态的,即某些字段对于所有需要进行过滤的记录都是通用的,那么您只需为通用字段创建一个模式并将剩余内容保存为字符串。
您可以仅在 JSON 内容的相关部分生成嵌入以提高搜索质量,因此要创建索引,您需要预处理文档并将其上传到索引。
例如,下面有 2 个不同的 Json 数据。
这里,
id
有相同,又有color
不同。在这种情况下,您可以使用创建索引字段
id
并uncommon_content
包含颜色数据和矢量字段uncommon_content
,这里您只包含嵌入的相关部分。