Azure搜索 - 复制嵌套SQL查询

时间:2017-06-29 11:33:09

标签: azure elasticsearch azure-search

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

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

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

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中实现的嵌套搜索做(a),(b)和(c)作为单个API调用

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

1 个答案:

答案 0 :(得分:1)

除非您对数据进行不同的建模,否则无法在单个请求中实现您想要的效果。不是将个人 - 顾问和顾问 - 企业关系非规范化,而是可以为每个顾问提供一个文档,并使用集合来存储有关个人和企业的信息。这可能适用于您,也可能不适用,具体取决于您是否需要支持与Advisor相关的个人和企业的相关过滤。有一份白皮书https://gcc.gnu.org/onlinedocs/gcc/Extended-Asm.html可以帮助您评估这种方法是否适合您。

另一种选择可能是将个人,顾问和企业建模为单独的索引,发出三个查询,并进行客户端连接。但是,这受到您在个人和企业的查询中需要发送的顾问ID数量的限制。 Azure搜索有here,除非您的查询调用率较低,否则可能会导致这种情况不切实际。

我们正在努力使Azure搜索更适合像您这样的场景。例如,我们目前正在努力添加对limits on the size of filters的支持。请对用户语音进行投票,并随时建议其他有用的功能。