我有一个mongo数据库集合users
,具有以下数据格式
{
"name": "abc",
"email": "abc@xyz.com"
"address": {
"city": "Gurgaon",
"state": "Haryana"
}
}
现在,我要使用天蓝色的REST API为该集合创建数据源,索引和索引器。
数据源
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
,并且没有从{获得任何值创建索引器时提供的{1}}字段映射。
我还尝试了以下代码作为映射,但也无法正常工作。
address.city
azure文档也没有提及这种映射。因此,如果有人可以帮助我,将不胜感激。
答案 0 :(得分:1)
container
元素允许您指定一个query
,您可以使用它来展平JSON文档(参考:https://docs.microsoft.com/en-us/rest/api/searchservice/create-data-source),而不是在索引器中进行列映射定义,您可以编写查询并以所需的格式获取输出。
在这种情况下,您用于创建数据源的代码为:
def create_datasource():
request_body = {
"name": 'users-datasource',
"description": "",
"type": "cosmosdb",
"credentials": {
"connectionString": "<db conenction url>",
},
"container": {
"name": "users",
"query": "SELECT a.name, a.email, a.address.city as address FROM a",
},
"dataChangeDetectionPolicy": {
"@odata.type": "#Microsoft.Azure.Search.HighWaterMarkChangeDetectionPolicy",
"highWaterMarkColumnName": "_ts"
}
}
resp = requests.post(url="<create-datasource-api-url>", data=json.dumps(request_body),
headers=headers)
答案 1 :(得分:1)
对MongoDb API风味的支持已公开发布-您需要按照this article中的说明在数据源的连接字符串中明确指出Mongo。还要注意,对于Mongo数据源,不支持由上一个响应建议的自定义查询afaik。希望团队中的某人能够澄清此支持的当前状态。
答案 2 :(得分:0)
对于我来说,以下字段映射正确无误。 Azure搜索查询正确返回了地址值。
"fieldMappings": [{"sourceFieldName": "address.city", "targetFieldName": "address"}]
我确实对您提供的数据进行了一些更改,例如
由于MongoDB API在Azure搜索的预览模式下,请确保使用的是预览API版本。 例如https:// {azure搜索名称} .search.windows.net / indexers?api-version = 2019-05-06-预览