[英]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 search
、 faceted search
、 weighted search
、 stemming
,與您的問題最相關的是autocomplete analyzers
和completion suggesters
。
可以在此處、 此處和此處找到 ElasticSearch 中提前查詢、創建索引、自動完成分析器和查詢時間“鍵入時搜索”的主題
您計划擁有多個數據源的事實也可能使 ElasticSearch 集群方法更具吸引力,以聚合搜索數據。
我使用 Azure 市場上提供的 Bitnami 模板創建了相對較小的實例,最重要的是,這使我能夠將集群與其他組件放在同一個虛擬網絡上,從而大大提高了性能。
成本低於 Azure Search(在底層使用 ElasticSearch)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.