azure - 无法使用 REST API 将 cosmos db 的嵌套数据源字段映射到 Azure 索引器的根索引字段
问题描述
我有一个users
具有以下数据格式的 mongo db 集合
{
"name": "abc",
"email": "abc@xyz.com"
"address": {
"city": "Gurgaon",
"state": "Haryana"
}
}
现在我正在使用 azure rest apis 为这个集合创建一个数据源、一个索引和一个索引器。
数据源
def create_datasource():
request_body = {
"name": 'users-datasource',
"description": "",
"type": "cosmosdb",
"credentials": {
"connectionString": "<db conenction url>"
},
"container": {"name": "users"},
"dataChangeDetectionPolicy": {
"@odata.type": "#Microsoft.Azure.Search.HighWaterMarkChangeDetectionPolicy",
"highWaterMarkColumnName": "_ts"
}
}
resp = requests.post(url="<create-datasource-api-url>", data=json.dumps(request_body),
headers=headers)
上述数据源的索引
def create_index(config):
request_body = {
'name': "users-index",
'fields': [
{
'name': 'name',
'type': 'Edm.String'
},
{
'name': 'email',
'type': 'Edm.DateTimeOffset'
},
{
'name': 'address',
'type': 'Edm.String'
},
{
'name': 'doc_id',
'type': 'Edm.String',
'key': True
}
]
}
resp = requests.post(url="<azure-create-index-api-url>", data=json.dumps(request_body),
headers=config.headers)
现在是上述数据源和索引的索引器
def create_interviews_indexer(config):
request_body = {
"name": "users-indexer",
"dataSourceName": "users-datasource",
"targetIndexName": users-index,
"schedule": {"interval": "PT5M"},
"fieldMappings": [
{"sourceFieldName": "address.city", "targetFieldName": "address"},
]
}
resp = requests.post("create-indexer-pi-url", data=json.dumps(request_body),
headers=config.headers)
这毫无例外地创建了索引器,但是当我在 azure 门户中检查检索到的数据时users-indexer
,该address
字段是null
并且没有从address.city
创建索引器时提供的字段映射中获取任何值。
我也尝试过以下代码作为映射,但它也不起作用。
"fieldMappings": [
{"sourceFieldName": "/address/city", "targetFieldName": "address"},
]
azure 文档也没有说明这种映射。因此,如果有人可以帮助我,将不胜感激。
解决方案
对 MongoDb API 风格的支持是公共预览版 - 您需要在数据源的连接字符串中明确指出 Mongo,如本文所述。另请注意,对于 Mongo 数据源,afaik 不支持先前响应建议的自定义查询。希望团队中的某个人能够澄清这种支持的当前状态。
推荐阅读
- reporting-services - 根据字符串值过滤列
- java - 尽管进入 META-INF/services,但未调用 Intellij 插件自定义编译器
- docker - 需要帮助使用虚拟机配置重新映像 Azure Batch 池中的现有 Azure 节点
- java - 如何从 maven 公共存储库导入 Talend 数据集成以供 tJava 使用?
- c# - 单击链接按钮/按钮时,我的 C# 代码不会触发
- spring-boot - 我们如何禁用 /oauth/token 的 GET 选项端点,并且只在 Spring Security 中保留 POST 选项?
- c++ - Visual Studio 无缘无故地重新编译在两个解决方案之间共享的项目
- ios - 如何从 Firebase Storage 下载 USDZ 模型并将它们加载到我的 iOS 应用上的 ARQuickLook?
- c# - 匹配任何不是字母的特殊字符(包括下划线,但不包括空格)
- java - 如何在使用 HibernateSearch QueryDSL 构建的 Elasticsearch 查询中包含 prefixLength