Azure 搜索如何获取复杂类型中的一个特定项 collection

Azure Search how to get one specific item in a complex type collection

我有一个歌曲索引,每首歌都有 collection 个顾客。 如果我过滤包含特定客户的歌曲效果很好,但我得到的结果是这首歌的所有客户。 我需要只与我在 collection.

中筛选的客户一起获取歌曲

我的索引是这样的:

{
   SongId: 1,
   Title: "My song",
   Artist: "Artist",
   Customers: [
   {
      CustomerId: 1,
      ...more customer data
   }
   {
      CustomerId: 2,
      ...more customer data
   }
   ]
}

我需要按标题过滤歌曲,如果客户 1 不在该歌曲的 collection 中,则只获取客户 1 的数据或没有客户。 这可能吗?

今天这是不可能的。您必须过滤掉 client-side.

上的复杂集合元素

此外,您在问题中没有提到这一点,但歌曲与客户之间的关系的基数似乎很高。如果是这种情况,您应该考虑不同的数据模型,因为每个文档的复杂集合中可以包含的元素数量有 hard limit。即使没有这个限制,复杂集合也有实际限制,例如围绕文档大小和无法在索引期间增量更新它们。

如果您的模型每首歌最多有几百个顾客,您可能没问题,但如果有数千个或更多,您应该重新考虑您的设计。