Azure 搜索 - 嵌套 SQL 查询的复制结果

Azure Search- replicating result of nested SQL query

我有一个数据库,包含以下模式,描述了与多个顾问联系的个人之间的联系,这些顾问与多个组织有隶属关系

Individuals--> Advisors (m:n relationship)
Advisors --> Enterprises (m:n relationship)

业务需求是启用对所有这些概念的搜索并围绕 AdvisorId 组织结果。例如,搜索结果的显示可能如下

a) Advisor1-> connected to Individuals A,B,C; and linked to Enterprises X,Y

b) Advisor2-> connected to Individuals A, E; and linked to Enterprises M,X,Z

为此,我们对这些概念及其之间的关系进行了扁平化 table。因此,同一个 AdvisorId 会出现在多行中

当我搜索一个字符串时,我想确保 ALL 一个 AdvisorId 周围的记录一起返回,而不管各个记录的搜索分数如何。

一种方法可以是

 a) first run an Azure Search and get a result of AdvisorId, ordered by search score of each record. This will repeat Advisor Ids

b) take a distinct set of  AdvisorIds (across pages) via standard SQL

c) for each AdvisorId, pick all the related records via standard SQL

2 个问题

此处 (b) 和 (c) 中的大量处理将在 Azure 外部完成,从而导致延迟。另外,如果我要为 (a) 使用分页,我永远不确定 AdvisorId 的数量,我最终会在不同的操作之后得到

我想检查是否有办法让 Azure 中实现的嵌套搜索作为单个 API 调用

执行 (a)、(b) 和 (c)

如果我要使用分面一起处理 (a) 和 (b),我如何确保排序基于分面内的最佳搜索得分文档

除非您对数据进行不同的建模,否则无法在单个请求中实现您想要的结果。与非规范化个人-顾问和顾问-企业关系不同,每个顾问有一个文档并使用集合来存储有关个人和企业的信息是可能的。这可能对您有用,也可能对您不起作用,具体取决于您是否需要支持对与顾问相关的个人和企业进行相关过滤。有一份白皮书 here 应该可以帮助您评估这种方法是否适合您。

另一种选择可能是将个人、顾问和企业建模为单独的索引,发出三个查询,然后进行客户端连接。但是,这受到您需要在个人和企业查询中发送的顾问 ID 数量的限制。 Azure 搜索 limits on the size of filters 可能会使这变得不切实际,除非你的查询召回率很低。

我们正在努力使 Azure 搜索更适合像你这样的场景。例如,我们目前正在努力添加对 complex types 的支持。请对 User Voice 进行投票,并随时建议其他有用的功能。