我將分享我的經驗,我在之前的啓動Pageflakes社區網站上如何做到這一點。在Pageflakes中,用戶創建的內容被標記。從這裏你可以看到一個例子:
http://www.pageflakes.com/Community/Content/Flakes.aspx?moduleKey=4796
每個窗口小部件,pagecast有標籤的集合。當有人搜索時,我們給予標籤最高優先級,然後標題,然後描述項目。
假設你有一個表的內容是這樣的:
Content (id, title, description)
首先,你需要創建一個表的所有獨特標籤。
Tag (id, name (unique), countOfItems)
然後,您需要將標籤映射到內容行。
TagContentMap (tagid, contentid)
您現在要問,對於每個新內容,我必須插入三個表格。不總是。只有當您有新標籤時纔可以插入標籤表格。大多數時候,人們選擇現有的標籤。經過幾個月的標記後,用戶應該已經用盡了獨特的標籤。從那時起,99%的時間用戶選擇一些現有的標籤。所以,這爲您刪除了一個插入。所以,你只有一個額外的插入。
此外,insert總是顯着低於select。很可能你會有99%的閱讀,1%的寫作。
除非您介紹這兩個表格,否則您永遠無法擁有一個用戶界面,用戶可以點擊某個標籤並查看標記有該特定標籤的所有內容。如果您不需要這種功能,那麼您當然可以在內容表格本身上添加一個「標籤」列,並以逗號分隔的格式存儲標籤。
現在最重要的一點 - 如何產生最好的搜索結果。在內容表中,我們有一個名爲「SearchData」的varchar字段。該字段首先填充標籤名稱,然後是標題,然後是說明。因此,
SearchData = tag names comma delimited + newline + title + newline + description.
然後,您使用SQL Server的全文索引來索引僅SearchData列,而不是內容表中的任何其他字段。
這是否適合您?
標籤代表什麼?也許這會幫助我們想象這個問題。 FTS似乎有點過分。 – 2011-05-15 14:02:12
他們代表類別。以IMDB爲例,其中每部電影有多個流派。 – Muis 2011-05-15 14:05:27