Azure 搜索 - 模型/查询复杂模型类型



我试图找到有关在 Azure 搜索上建模/查询复杂数据类型的最佳方法的示例。我只能在以下链接中找到两种模型方法:

https://learn.microsoft.com/en-us/azure/search/search-howto-complex-data-types

但是没有关于如何从 JSON 查询特定属性的示例。似乎此功能在此阶段处于预览模式:

https://feedback.azure.com/forums/263029-azure-search/suggestions/6670910-modelling-complex-types-in-indexes

假设我有一个复杂类型,我想将其存储在 Azure 搜索的一个字段中:

{
"name": "Thiago",
"email": "thiago@thiago.com",
"subscription": {
"plan": "A",
"billType": "month", 
"tags": ["azure", "mvp", "search"]
}
}

假设我想筛选包含标签"azure"的文档。或者对于那些账单类型为"月"的人

使用本文中提到的方法模拟复杂类型时,可以像使用"平面类型"一样进行筛选。但是,这带来了一些限制。  使用集合模拟复杂类型的限制之一是无法轻松地对"子文档"执行筛选器。以本文为例,假设您有locationsIdlocationsDescription字段。如果执行如下筛选器:

$filter=locationsId/any(id: id eq '4') and locationsDescription/any(d: d eq 'Home office')

您可能会得到比您想要的更多的结果。例如,您可能会收到locationsId为 3 且描述为"家庭办公室"的文档,或locationsId为 4 且具有不同locationsDescription的文档。这是因为上面的两个子句必须使用单独的 lambda 表达式,因此不会对同一逻辑"子文档"进行比较。本文中提到的一种解决方法是将值组合索引在一起。如果您有locationsCombined字段,则可以像这样对其进行筛选(假设您使用|作为分隔符为值编制索引(:

$filter=locationsCombined/any(c: c eq '4|Home office')

不过,这对您可以在 lambda 中表达的内容仍然有一些限制。

幸运的是,我们正在研究对复杂类型的本机支持,因此很快就不需要这样的解决方法了。

编辑

为了解决您的特定示例,假设您正在根据本文在"扁平化"架构中对数据进行建模,您可以按如下所示的标签进行筛选:

$filter=subscriptionTags/any(t: t eq 'azure')

您可以像这样过滤billType

$filter=subscriptionBillType eq 'month'

复杂类型功能正式发布后,就不需要这种"平展"。

相关内容

  • 没有找到相关文章

最新更新