一尘不染

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

elasticsearch

我有一个包含以下架构的数据库,该架构描述了与多个顾问联系的个人之间的链接,这些顾问与多个组织有联系

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

为此,我们针对这些概念及其之间的关系创建了一个扁平化的表格。因此,相同的AdvisorId将出现在多行中

当我搜索字符串时,我想确保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),如何确保排序基于构面中最佳的搜索分数文档


阅读 206

收藏
2020-06-22

共1个答案

一尘不染

除非您对数据进行不同的建模,否则无法在单个请求中实现您想要的功能。可以不对个人顾问和顾问企业关系进行非规范化,而是可以使每个顾问拥有一个文档,并使用集合来存储有关个人和企业的信息。根据您是否需要对与Advisor相关的个人和企业支持相关过滤,这可能对您不起作用。有一个白皮书这里应该帮助您评估这种做法是否会为你工作。

另一种选择是将个人,顾问和企业建模为单独的索引,发出三个查询,并进行客户端联接。但是,这受到在个人和企业查询中需要发送的顾问ID数量的限制。Azure搜索对筛选器的大小限制,除非查询的召回率较低,否则筛选器的大小将变得不切实际。

我们正在努力使Azure搜索更好地适合您的方案。例如,我们目前正在努力添加对复杂类型的支持。请对“用户语音”进行投票,并随时建议其他有用的功能。

2020-06-22