我遇到以下問題。如何優化數據庫搜索
我有一個數據庫,例如, 1000個項目。每個項目可以有任何數量的與之相關的識別標籤。出於問題的目的,該項目和標籤純粹是假設的。例如,說一個項目是DVD,那麼該項目的標籤將是: DVD,獨行俠,西部,行動,家庭
另一個DVD被標記爲: DVD,The Magnificent 7,西部,動作
現在我的網站上搜索在搜索框中鍵入以下關鍵詞,用戶點擊搜索: 西部,動作,家庭,PG13
兩個DVD的比賽中至少2個搜索詞,而且沒有一個與PG13相匹配。第一張DVD的比賽也是最接近搜索條件的。
搜索已開始,對於所有1000種產品,我必須搜索每個商品標籤以查看它們是否符合搜索條件。
所以對於第一張DVD,它匹配4個標籤中的3個,而第二張DVD則匹配4個標籤中的2個。
我的問題是,如何優化此搜索?對於每個項目,查詢會查看每個項目標籤,然後將其與搜索項匹配。如果沒有找到與所有搜索字詞匹配的項目,則必須「刪除」其中一個搜索字詞,然後查看是否有任何項目與4個搜索字詞的任意3個組合相匹配。
然後它放下另一個搜索詞並搜索4個搜索詞中的2個,嘗試匹配4個搜索詞的任意2個組合。
這是「刪除」搜索條件和搜索我需要優化的所有可能的組合。有誰知道這是什麼最好的算法,或者任何人都可以提供僞代碼?
我不知道這一點,因爲我試圖想到的每個場景,我仍然必須搜索每個可能的搜索條件組合,同時減慢項目返回給客戶的速度。
編輯:我想過給每個項目標籤的重量,但問題是,標籤的性質是這樣的,沒有標籤比任何其他標籤承載更多的重量。所有標籤都具有相同的權重。
數據庫可以被查詢的速度和結果被重新調整是我最大的目標。
向我們展示查詢和表格結構(帶索引) –
您可以爲要搜索的每個部分提供權重。就像'電影名稱'比'流派'更重要。所以如果你找不到'Name + Genre'的任何東西,請放下流派。現在,這是標識符的丟棄...對於實際的查詢......只是查詢用戶給出的每個可能的參數。如果您沒有任何匹配項,請執行相同的查詢,但刪除最弱的參數。依然沒有?刪除另一個參數並再次查詢相同的查詢。這種情況下,你只需要查詢n次,其中n =參數的數量。最後哪個並不是很糟糕。 – Viridis
(在你的例子中:最壞的情況= 4個查詢)。最好的情況下,第一個查詢立即返回'想要'的項目數組。 (你可能想使用之前驗證或驗證...取決於你在做什麼) – Viridis