我将分享我的经验,我在之前的启动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