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

标签 azure azure-cognitive-search

我试图找到有关在 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": "<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="fa8e92939b9d95ba8e92939b9d95d4999597" rel="noreferrer noopener nofollow">[email protected]</a>",
   "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 中可以表达的内容仍然有一些限制。

幸运的是,我们正在研究native support for Complex Types ,所以很快就不需要这样的解决方法了。

编辑

为了解决您的具体示例,假设您在每篇文章的“扁平化”架构中对数据进行建模,您可以像这样过滤标签:

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

您可以像这样过滤 billType:

$filter=subscriptionBillType eq 'month'

一旦复杂类型功能普遍可用,这种“扁平化”就没有必要了。

关于azure 搜索 - 模型/查询复杂模型类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52444169/

相关文章:

azure-cognitive-search - Azure 认知搜索文本翻译技能 50k 字符限制

azure - 使用 Azure 认知搜索监视索引

c# - 将 CORS 添加到索引时(以编程方式)Azure.Search.Documents 引发错误

c# - SecurityTokenValidated 回调是否使用 Owin 中间件自动验证 token

php - Azure使用rest api和php将blob从一个容器复制到同一存储帐户中的另一个容器

azure - Azure 搜索服务上的 CORS 问题

azure - 查找不在 Azure 搜索索引项列表中的项目

azure - 在不同日期和不同时间设置 Cron 表达式

c++ - 5_4-2016q3\bin\arm-none-eabi-g++ 未找到 - Windows 10

visual-studio-2010 - 使用 Azure 计算模拟器调试单角色实例