簡體   English   中英

在 azure DocumentDb 中預先搜索文檔字段

[英]Look ahead search on document fields in azure DocumentDb

我們有興趣使用 DocumentDb 作為許多數據源的數據存儲,因此我們正在運行一個快速 POC 以確定它是否符合我們正在尋找的標准。

我們熱衷於提供的領域之一是某些領域的前瞻搜索功能。 這些傳統上是使用 SQL LIKE 語法提供的,目前似乎不受支持。

在線搜索我看到人們談論集成 Azure 搜索,但對於這樣一個簡單的用例來說,這似乎是一種非常昂貴的機制。

我還看到人們提到使用 UDF,但這似乎需要整個集合掃描,這從性能角度來看是不切實際的。

有沒有人有任何替代建議? 我考慮過的一件事是簡單地使用 SQL 表並在每次插入\\更新\\刪除文檔時啟動更新?

DocumentDB 支持STARTSWITH和范圍索引以支持前綴/ STARTSWITH搜索。

您可以根據用戶在文本框中鍵入的內容逐步進行如下查詢:

SELECT TOP 10 * FROM hotel H WHERE STARTSWITH(H.name, "H")
SELECT TOP 10 * FROM hotel H WHERE STARTSWITH(H.name, "Hi") 
SELECT TOP 10 * FROM hotel H WHERE STARTSWITH(H.name, "Hil")
SELECT TOP 10 * FROM hotel H WHERE STARTSWITH(H.name, "Hilton") 

請注意,您必須使用范圍索引配置集合或用於這些查詢的路徑/屬性。 您也可以擴展此方法以處理其他情況:

要以不區分大小寫的方式查詢,您必須存儲搜索屬性的小寫形式,並將其用於查詢。

當用戶輸入搜索詞時,我遇到了類似的情況,需要快速查找。

我的情況是,可能有數千名用戶同時執行此類查找; 在負載下測試時,為了避免飽和和節流,我們發現我們必須將 DocumentDB 請求單元 (RU) 吞吐量增加到在我們的特定情況下對我們來說在財務上不可行的點。

我們認為 DocumentDB 最適合用作持久存儲和“完整”數據檢索——這個角色表現得非常好——而一個小的 ElasticSearch 集群執行設計的角色—— text searchfaceted searchweighted searchstemming ,與您的問題最相關的是autocomplete analyzerscompletion suggesters

可以在此處此處此處找到 ElasticSearch 中提前查詢、創建索引、自動完成分析器和查詢時間“鍵入時搜索”的主題

您計划擁有多個數據源的事實也可能使 ElasticSearch 集群方法更具吸引力,以聚合搜索數據。

我使用 Azure 市場上提供的 Bitnami 模板創建了相對較小的實例,最重要的是,這使我能夠將集群與其他組件放在同一個虛擬網絡上,從而大大提高了性能。

成本低於 Azure Search(在底層使用 ElasticSearch)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM