2017-06-29 69 views
1

我有包括以下模式描繪誰與多個顧問和連接這些顧問有多個組織Azure的搜索 - 複製嵌套的SQL查詢的結果

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會出現在多個行

當我搜索字符串,我想確保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做(a),(b)和(c)作爲一個單一的API調用

如果我要使用方面一起處理(a)和(b),我如何確保排序是基於在一個方面的最佳搜索得分文檔

+0

在彈性搜索中處理問題的鏈接:https://stackoverflow.com/questions/26509045/filter-elasticsearch-results-to-contain-only-unique-documents-based-on-one-field – user7995357

回答

1

除非您以不同方式對數據建模,否則沒有辦法在單個請求中實現您想要的內容。與其將個人 - 顧問和顧問 - 企業關係非規範化,可能相反,每個顧問可以有一個文檔,並使用集合來存儲關於相關個人和企業的信息。根據您是否需要支持與顧問相關的個人和企業的相關過濾,這可能或可能不適用於您。有一個白皮書here應該幫助您評估這種方法是否適用於您。

另一種選擇可能是將個人,顧問和企業建模爲單獨的索引,發出三個查詢並進行客戶端連接。但是,這受到您在個人和企業查詢中需要發送的顧問ID數量的限制。 Azure搜索有limits on the size of filters,這可能會使這不切實際,除非您的查詢回憶率低。

我們正在努力使Azure搜索更適合您的場景。例如,我們目前正在爲complex types添加支持。請對用戶語音進行投票,並隨時提出其他有助於解決問題的功能。

+0

謝謝。我目前正在計劃運行此查詢,因爲在Azure Search- query1上的2個查詢將獲取文檔並構建唯一按照最高匹配排列的顧問列表。如果數字不足10個獨特的AdvisorIds,我可能需要迭代。然後,Query2將爲此列表選擇數據 – user7995357