簡體   English   中英

站點范圍內的多對象搜索-數據庫設計/代碼策略?

[英]Sitewide multi object search - database design / code strategy?

我不知道如何最好地使用網站搜索組件。 我有一個類似於yelp的用戶內容網站。 人們可以搜索本地地點,本地事件,本地照片,成員等。因此,如果我在搜索框中輸入“湯姆”,我希望搜索返回與湯姆匹配的所有用戶對象的結果。 現在,湯姆(Tom)一詞可以在任何地方,例如餐廳名稱,餐廳說明中,評論中或某人的評論中等等。

因此,如果我僅使用規范化的sql進行設計,則需要連接約15個對象表以掃描所有不同的用戶對象+掃描每個表中的多個colunms以搜索所有字段/列。 現在我不知道這是正常完成還是有更好的方法? 我已經看過諸如Solr / Apache / Elasticsearch之類的東西,但是我不確定它們如何適合我的用例,即使我使用這些,我仍然認為我仍然需要掃描所有15個表+ 30-40個正確的列? 我的平台是php / mysql。 還有為此遵循的任何編碼/組件體系結構/ DB設計實踐嗎? 一位朋友說我應該將所有對象組合到1個表中,但由於您無法將照片,視頻,評論,頁面,個人資料等組合到1個表中而無法正常工作,因此我對如何實現此方法一無所知。

可能您的朋友打算將所有可搜索字段組合到一個表中。

基本思想是創建一個用作索引的表。 一列是可索引的並存儲單詞,而另一列包含對這些字段之一中包含該單詞的對象的引用列表(例如,一個對象可能是圖片,而其可搜索字段可能是標題和注釋)。

引用列表可以通過多種方式存儲,例如,您可以使用長度可變的字符串(例如BLOB),並在其中存儲JSON編碼的ID和對象類型的數組,以便您可以輕松找到它們然后通過在表格中搜索與對象類型相對應的ID)。

當然,在添加/刪除/修改可索引數據時,您應該相應地更新索引(但是您可以使用惰性更新技術來最終在后台更新索引-這是因為大多數人都希望索引在一個數據的當前狀態需要幾分鍾的時間。ApacheCassandra是實現這種索引的一種方法,但我不會將其用於小型項目,因為這些項目不需要分布式數據庫等。

暫無
暫無

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

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