2010-01-13 89 views
4

我正在一個有用戶和用戶生成的文章,畫廊和視頻的網站上工作。我正在嘗試製作一個標記系統並搜索它們。哪個搜索/標籤系統更好?

起初我在考慮tbl_articles,tbl_galleries和tbl_videos我會有一個標題,描述和標籤字段。然後運行像每個以下查詢:爲tbl_galleries和tbl_videos

select * from tbl_articles where match(title, description, tags) 
    against ('$search' in boolean mode) ORDER BY match(title, description, tags) 
    against ('$search' in boolean mode) DESC, views desc LIMIT 0, 3 

相同的查詢。用戶只需比較用戶名即可。然後用「更多」按鈕(臉譜風格)在結果頁面上顯示三個。

當查看文章,圖庫或視頻時,也會有鏈接到相關內容,所以我只想在LIMIT設置爲'1,3'時使用相同的查詢 - 以避免出現。

Q1 - 該系統如何?

我很高興與系統,直到我發現this

在他們有

  • 一個「標籤」表包含兩個 列的主ID和一個獨特的 索引TAG_NAME。
  • 一個「類型」表,他們有 另一主ID和一個獨特的 索引「類型」(類別)(我想 我可以用它來 用戶/視頻/條/畫廊)
  • 一個'搜索「表中包含 文章的網址,其中來自'tags'和'type'的外部ID爲 。 (我想 ,而不是一個完整的URL我可以 店國外相關ID,以便 我可以生成URL如 article.php ID = ....?)

Q2 - 這系統看起來效率更高......雖然我如何搜索標題或描述?

Q3 - 另一個壞事是每個頁面視圖我都必須加入標籤..所以它可能不是那麼高效。

Q4 - 我的系統也只搜索布爾值,我會更喜歡'喜歡'查詢嗎?我只是鼓勵單詞(stackoverflow樣式)...我意識到儘管在我的系統中搜索'火車站'不會匹配像'火車站'我怎麼解決這個問題?

很多問題......很抱歉,它太長了。謝謝。

回答

2

Q1 - 您最好用三個獨立的表格來搜索文章,標籤以及鏈接表中的文章和標籤。你也可以用兩張表格和一張articles_tags表格來完成。 articles_tags表將包含articleID字段,並將標記本身作爲複合鍵。通過兩個或三個表格可以很容易地找到哪些文章具有給定的標籤以及將哪些標籤分配給給定的文章。第二季度 - 標題和描述搜索可以使用百分比「like」或正則表達式或全文搜索來完成。

Q3 - 不必擔心與其他人連接標籤表。爲了解釋Knuth,先構建它,然後找到瓶頸。 MySQL非常擅長它。一次又一次地將這些表連接在一起不會造成傷害。

Q4 - 這取決於你想從結果中得到什麼。通常你需要實際的數據,然後你可以測試返回的行數,告訴你它是真是假。

Q5 - 同樣,在將查詢切換到數據庫之前,您必須使用「like」語法,並且可能在PHP方面使用了一些創造性的正則表達式。

祝你好運!

+0

謝謝你的回答。還有一個問題......你在哪裏推薦我把標題和描述放在他們的原始表格中? – Mark 2010-01-14 09:40:44

+0

看來他們使用tag_target_name和tag_target_url來構建鏈接到標記的內容。您可以將標題和描述放在他們的位置,但更好的解決方案是將所有信息放在單獨的「articles」表中,並將articles表中的行的id存儲到tag_targets表中。這樣你就不會重複每篇文章中每個標籤的標題和描述。 – 2010-01-14 14:46:55