Azure cosmosdb Azure搜索服务索引指向多个文档数据库集合

Azure cosmosdb Azure搜索服务索引指向多个文档数据库集合,azure-cosmosdb,azure-cognitive-search,indexer,Azure Cosmosdb,Azure Cognitive Search,Indexer,如何将两个单独的azure cosmos db集合中的数据加载到单个azure搜索索引?我需要一个解决方案,以类似于SQL内部连接概念的方式连接来自两个集合的数据,并将该数据加载到azure搜索服务 我在azure cosmos db中有两个集合。 产品和样品文档的一个示例如下所示 { "description": null, "links": [], "replaces": "00000000-0000-0000-0000-000000000000", "replace

如何将两个单独的azure cosmos db集合中的数据加载到单个azure搜索索引?我需要一个解决方案,以类似于SQL内部连接概念的方式连接来自两个集合的数据,并将该数据加载到azure搜索服务

我在azure cosmos db中有两个集合。 产品和样品文档的一个示例如下所示

{
   "description": null,
   "links": [],
   "replaces": "00000000-0000-0000-0000-000000000000",
   "replacedBy": "00000000-0000-0000-0000-000000000000",
   "productTypeId": "ccd0bc73-c4a1-41bf-9c96-454a5ba1d025",
   "id": "a4853bf5-9c58-4fb5-a1ff-fc3ab575b4c8",
   "name": "New Product",
   "createDate": "2018-09-19T10:04:35.1951552Z",
   "createdBy": "00000000-0000-0000-0000-000000000000",
   "updateDate": "2018-10-05T13:46:24.7048358Z",
   "updatedBy": "DIJdyXMudaqeAdsw1SiNyJKRIi7Ktio5@clients"
 }
 {
   "description": null,
   "links": [],
   "replaces": "00000000-0000-0000-0000-000000000000",
   "replacedBy": "00000000-0000-0000-0000-000000000000",
   "productTypeId": "ccd0bc73-c4a1-41bf-9c96-454a5ba1d025",
   "id": "b9b6c3bc-a8f8-470f-ac93-be589eb1da16",
   "name": "New Product 2",
   "createDate": "2018-09-19T11:02:02.6919008Z",
   "createdBy": "00000000-0000-0000-0000-000000000000",
   "updateDate": "2018-09-19T11:02:02.6919008Z",
   "updatedBy": "00000000-0000-0000-0000-000000000000"
 }
 {
   "description": null,
   "links": [],
   "replaces": "00000000-0000-0000-0000-000000000000",
   "replacedBy": "00000000-0000-0000-0000-000000000000",
   "productTypeId": "ccd0bc73-c4a1-41bf-9c96-454a5ba1d025",
   "id": "98b3647a-3b40-4a00-bd0f-2a397bd48b68",
   "name": "New Product 7",
   "createDate": "2018-09-20T09:42:28.2913567Z",
   "createdBy": "00000000-0000-0000-0000-000000000000",
   "updateDate": "2018-09-20T09:42:28.2913567Z",
   "updatedBy": "00000000-0000-0000-0000-000000000000"
 }
ProductType的另一个集合包含以下示例文档

{
  "description": null,
  "links": null,
  "replaces": "00000000-0000-0000-0000-000000000000",
  "replacedBy": "00000000-0000-0000-0000-000000000000",
  "id": "ccd0bc73-c4a1-41bf-9c96-454a5ba1d025",
  "name": "ProductType1_186",
  "createDate": "2018-09-18T23:54:43.9395245Z",
  "createdBy": "00000000-0000-0000-0000-000000000000",
  "updateDate": "2018-10-05T13:29:44.019851Z",
  "updatedBy": "DIJdyXMudaqeAdsw1SiNyJKRIi7Ktio5@clients"
}
product type id在product collection中引用,它是链接两个集合的列

我想将上述两个集合加载到同一个azure搜索服务索引中,我希望我的索引字段的填充方式与下面类似


如果使用产品id作为键,只需将两个索引器指向同一索引,Azure Search就会自动合并文档。例如,以下两个索引器定义将其数据合并到同一索引中:

{
“名称”:“productIndexer”,
“数据源名称”:“productDataSource”,
“targetIndexName”:“combinedIndex”,
“时间表”:{“间隔”:“PT2H”}
}

{
“名称”:“样本索引器”,
“dataSourceName”:“sampleDataSource”,
“targetIndexName”:“combinedIndex”,
“时间表”:{“间隔”:“PT2H”}
}

了解有关创建索引器api的更多信息

但是,这两个集合似乎共享相同的字段。这意味着最后编制索引的文档中的字段将替换首先编制索引的文档中的字段。为了避免这种情况,我建议在Cosmos DB查询中将匹配
00000000-0000-0000-0000-000000000000
模式的字段替换为
null
。例如:

选择productTypeId,(createdBy!=“00000000-0000-0000-0000-000000000000”?createdBy:null)作为来自产品的createdBy

这个精确的查询可能不适用于您的用例。有关更多信息,请参阅

如果您有任何问题,或者某些东西没有按预期工作,请告诉我

谢谢
Matt

Hi Matt,但ProductType集合没有包含产品id的字段。为产品类型集合创建索引器失败,出现错误
,请确保数据源中存在“ProductId”列,或添加将现有列名之一映射到“ProductId”的字段映射。
,看起来您必须使用两个集合共用的列。我想你提到的ProductTypeId是这个专栏吗?是的,Matt,ProductTypeId是两个系列共有的专栏。但是我需要ProductId作为索引中的键列。有多个产品具有相同的产品类型id,我想在我的索引中列出我的所有产品。当我使用产品类型id作为键列时,我只得到单个产品的单个产品类型id。