PHP/MySQL後端。我有一個充滿電影YouTube風格的數據庫。每個視頻都有一個名稱和類別。視頻和類別具有m:n的關係。稱重搜索結果
我希望我的訪問者能夠搜索視頻並讓他們在一個搜索字段中輸入搜索詞。我無法弄清楚如何根據類別,名稱中的事件返回最佳搜索結果。
什麼是最好的方式去這樣的事情?評分? =>檢查每個搜索詞是否出現在視頻名稱中;如果是的話,授予視頻一分;檢查視頻是否在包含在搜索查詢中的類別中;如果是的話,給它一個點。按收到的號碼分類嗎?這聽起來在CPU使用率方面非常昂貴。
PHP/MySQL後端。我有一個充滿電影YouTube風格的數據庫。每個視頻都有一個名稱和類別。視頻和類別具有m:n的關係。稱重搜索結果
我希望我的訪問者能夠搜索視頻並讓他們在一個搜索字段中輸入搜索詞。我無法弄清楚如何根據類別,名稱中的事件返回最佳搜索結果。
什麼是最好的方式去這樣的事情?評分? =>檢查每個搜索詞是否出現在視頻名稱中;如果是的話,授予視頻一分;檢查視頻是否在包含在搜索查詢中的類別中;如果是的話,給它一個點。按收到的號碼分類嗎?這聽起來在CPU使用率方面非常昂貴。
首先,使用全文搜索。它可以是MySql全文搜索或某種外文全文搜索引擎。我建議sphinx。它非常快速,簡單,甚至可以使用SphinxSE與MuSQL集成(所以搜索索引看起來像MySQL中的loke表)。但是,您必須安裝並配置它。
其次,考慮按搜索類型拆分搜索結果。任何類型的全文搜索都會返回按相關性排序的匹配項列表。您可以搜索所有字段並獲取單個列表。這是個不好的主意,因爲按名稱命中和按類別命中將是混合的。要解決這個問題,您可以進行多項搜索 - 首先按名稱搜索,然後按類別搜索。
因此,你將有兩個匹配的集合,你有很多選擇如何顯示這個。一些想法:
而且你可以使用這個方法對於任何類型的領域 - 名稱,分類,演員,導演等。但是,越多的領域,你使用更多的搜索查詢,你必須執行
使用全文搜索可以幫助:http://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html#function_match
您可以一次對一個表達測試數列。
我不認爲你可以避免爲每個搜索查看每部電影的標題和類別。因此,CPU的使用率是給定的。如果您擔心排序的CPU使用率,那麼在大多數情況下它可以忽略不計,因爲您只會排序具有多於零點的項目。
話雖如此,你可能想要的是一個部分基於規則和部分基於點的系統。例如,如果您的標題與搜索字詞相同,則無論點數如何,它都應該排在第一位。構建您的搜索,以便您可以輕鬆添加規則和調整點,只要您認爲合適就能產生最佳結果。
編輯:如果確切標題匹配,您可以利用數據庫索引而不是搜索整個表格。或者,類別也是一樣。
真棒,正是我一直在尋找。感謝並歡迎SO – 2011-02-20 11:01:09