我有一个数据库,包含以下模式,描述了与多个顾问联系的个人之间的联系,这些顾问与多个组织有联系
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),我如何确保排序基于方面内的最佳搜索分数文档
答案 0 :(得分:1)
除非您对数据进行不同的建模,否则无法在单个请求中实现您想要的效果。不是将个人 - 顾问和顾问 - 企业关系非规范化,而是可以为每个顾问提供一个文档,并使用集合来存储有关个人和企业的信息。这可能适用于您,也可能不适用,具体取决于您是否需要支持与Advisor相关的个人和企业的相关过滤。有一份白皮书https://gcc.gnu.org/onlinedocs/gcc/Extended-Asm.html可以帮助您评估这种方法是否适合您。
另一种选择可能是将个人,顾问和企业建模为单独的索引,发出三个查询,并进行客户端连接。但是,这受到您在个人和企业的查询中需要发送的顾问ID数量的限制。 Azure搜索有here,除非您的查询调用率较低,否则可能会导致这种情况不切实际。
我们正在努力使Azure搜索更适合像您这样的场景。例如,我们目前正在努力添加对limits on the size of filters的支持。请对用户语音进行投票,并随时建议其他有用的功能。