2013-12-18 82 views
0

我遇到以下問題。如何優化數據庫搜索

我有一個數據庫,例如, 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個組合。

這是「刪除」搜索條件和搜索我需要優化的所有可能的組合。有誰知道這是什麼最好的算法,或者任何人都可以提供僞代碼?

我不知道這一點,因爲我試圖想到的每個場景,我仍然必須搜索每個可能的搜索條件組合,同時減慢項目返回給客戶的速度。

編輯:我想過給每個項目標籤的重量,但問題是,標籤的性質是這樣的,沒有標籤比任何其他標籤承載更多的重量。所有標籤都具有相同的權重。

數據庫可以被查詢的速度和結果被重新調整是我最大的目標。

+0

向我們展示查詢和表格結構(帶索引) –

+0

您可以爲要搜索的每個部分提供權重。就像'電影名稱'比'流派'更重要。所以如果你找不到'Name + Genre'的任何東西,請放下流派。現在,這是標識符的丟棄...對於實際的查詢......只是查詢用戶給出的每個可能的參數。如果您沒有任何匹配項,請執行相同的查詢,但刪除最弱的參數。依然沒有?刪除另一個參數並再次查詢相同的查詢。這種情況下,你只需要查詢n次,其中n =參數的數量。最後哪個並不是很糟糕。 – Viridis

+0

(在你的例子中:最壞的情況= 4個查詢)。最好的情況下,第一個查詢立即返回'想要'的項目數組。 (你可能想使用之前驗證或驗證...取決於你在做什麼) – Viridis

回答

0

作爲一種方法,我將通過總結每個術語返回的計數來探索對羣組中的搜索項使用左連接。你會有這樣的:

Title, Term, Count 

作爲結果集。將這個插入搜索項的值數據透視查詢旋轉獲得:

Title, Term1, Term1Count, Term2, Term2Count,..... 

然後,您可以換行了一個查詢,消除那些所有的*計數爲零,並以任何方式排序,你要。 這不是建議作爲解決方案,而是作爲探索的途徑。