Database design 用于标记、云计算和搜索的最佳数据体系结构(如StackOverflow)?
我很想知道Stack Overflow的标记和搜索是如何构建的,因为它似乎工作得很好 如果我想执行以下所有操作,那么什么是好的数据库/搜索模型:Database design 用于标记、云计算和搜索的最佳数据体系结构(如StackOverflow)?,database-design,tags,full-text-search,tag-cloud,Database Design,Tags,Full Text Search,Tag Cloud,我很想知道Stack Overflow的标记和搜索是如何构建的,因为它似乎工作得很好 如果我想执行以下所有操作,那么什么是好的数据库/搜索模型: 在各种实体上存储标记(如何规范化?即实体、标记和实体\标记表?) 搜索具有特定标记的项目 构建应用于特定搜索结果集的所有标记的标记云 如何在搜索结果中显示每个项目的标记列表 也许以规范化的形式存储标记是有意义的,但出于#2、#4或#3的目的,也可以将标记作为空格分隔的字符串来存储。想法 我听说Stack Overflow使用Lucene进行搜索。这
- 搜索具有特定标记的项目
- 构建应用于特定搜索结果集的所有标记的标记云
- 如何在搜索结果中显示每个项目的标记列表
我听说Stack Overflow使用Lucene进行搜索。这是真的吗?我听过一些讨论SQL优化的播客,但对Lucene一无所知。如果他们确实使用Lucene,我想知道有多少搜索结果来自Lucene,以及“深入”标记云是否来自Lucene。我不知道它们是否符合最佳条件,但DotNetKicks和Kigg都是开源digg克隆实现。你可以看看他们是如何做标签和搜索的 我最好的猜测没有经过深思熟虑:)
因此,我最初的想法可能是Entity->EntityTag哇,我刚刚写了一篇大文章,然后就被憋住了。当我点击后退按钮重新提交时,标记编辑器是空的。啊 所以我又来了 关于堆栈溢出,事实证明它们使用了 关于@Grant推荐的操作系统项目:
- *DotNetKicks使用DB进行标记,使用Lucene进行全文搜索。似乎无法将全文搜索与标记搜索结合起来
- Kigg在搜索和标记查询中使用Linq到SQL。两个查询都连接故事->故事标签->标签
- 这两个项目都有一个3表的方法来标记,这似乎是每个人都推荐的
- 构建站点范围的标记云
- 按标记浏览(如SO/questions/tagged/ASP.NET等URL)
- 标记被合并成一个由Lucene索引的标记字符串
- 因此,我拥有Lucene查询引擎的全部功能(和/或/或不查询)
- 我可以同时搜索文本和按标签过滤
- Lucene analyzer合并单词以更好地进行标记搜索(即,标记搜索“test”也会找到标记为“testing”的内容)
- Lucene返回一个潜在的巨大结果集,我将其分页为20个结果
- 然后NHibernate根据Id从DB或实体缓存加载结果实体
- 因此,完全有可能搜索结果在数据库中点击0次
- 插入任何不存在的新标记
- 从EntityTag表中插入/删除
- 更新Entity.TagString
- 更新实体的Lucene索引
时间会告诉我们……这个答案中的第一个链接(“SQL server 2005全文搜索”)似乎不再有效了?更新后的链接可能是:很好的回顾,Winston,thx,以跟进您的方法。