簡體   English   中英

選擇正確的搜索和索引解決方案

[英]Choosing the Right Solution for Search and Indexing

我們正在致力於無頭應用程序的設計和開發。 目前,我們面臨着一個**architectural question** ,我們需要找到答案才能繼續設計系統,我們不是**search engine**方面的專家,但我們正在研究這個領域。

我們的技術stack is .net Core/SQL Server ,將來我們可能plan to use Raven DB.

我們計划不再使用內容分發 API,而是使用Query based content delivery分發,使其更靈活,並減少 API 開發每個前端框架的開銷。 並且我們決定對大部分數據管理使用索引和索引,即減少數據庫負載。 所以基本上大多數內容操作都將使用索引來處理。

我們在搜索引擎中觀察到的問題:在第一次剪輯時,我們計划使用Elastic Search ,但我們再次理解了以下issues

系統將具有dynamic field management and field data management ,即用戶將在系統運行時編輯字段和字段值。 因為每次我們可能需要重建索引來更新彈性搜索中的字段(我們不是搜索引擎專家),這會增加.network 負載,這對於我們在大型多租戶環境中運行可能是不可行的。

所以我們decided to go with Lucene.net ,但在繼續使用lucene.net之前,我們要確保可以解決以下問題。

動態更新字段而無需每次重建索引,lucene 是否支持此功能,或者我們可以自定義來管理此功能嗎?

第二個問題是使用分布式架構為每個租戶管理單獨的索引。

我們計划為生產中的每個租戶創建一個分區,這樣數據就不會位於單個索引中。 這是因為我們不需要在 web 服務器上施加高負載來管理基於權限的查詢結果,而 Lucene 將執行此操作。 所以對於任何查詢結果都將基於查詢它的用戶的權限返回,所以最好為每個租戶有單獨的索引以減少操作。

是否可以通過為每個租戶專門設置一個分區來實現分布式 Lucene 的實現?

因此,請幫助找到我們現在面臨的上述兩個問題的解決方案。

Elasticsearch 內部僅使用 Lucene,每個 elasticsearch 索引(由一個或多個分片組成)內部是一個 Lucene 索引。 您甚至可以將 Elasticsearch 視為分布式 Lucene ,可以輕松擴展到數千台物理服務器。

現在,這應該消除您的任何疑問,因為所有低級操作(如更新文檔和刪除文檔)都是由內部 Lucene 完成的,如果 Elasticsearch 是您問題的第 1 部分。

你的第一個問題

Q:動態更新字段,不用每次都重建索引,Lucene是否支持這個,或者我們可以自定義管理這個嗎?

您只是更新一個文檔,它不會導致整個索引重建,您將在 1 秒內(默認刷新間隔)獲得更新的文檔,或者如果您想要立即更新文檔,您可以進行顯式刷新(不推薦)。

來到你的第二個問題:

問:是否可以通過為每個租戶獨占一個分區來實現分布式 Lucene 的實現?

回答:如前所述,您可以將 Elasticsearch 視為僅分布式 Lucence,並且可以輕松地為每個租戶創建單獨的索引,並且它們不會相互連接數據(盡管如果您將多個索引存儲在同一個 Elasticsearch 集群上,將會不是基礎資源隔離(CPU、內存))等,您可能會遇到嘈雜的鄰居問題。

暫無
暫無

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

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