【发布时间】:2013-12-23 00:53:54
【问题描述】:
这是我的情况(或请参阅底部的 TLDR):我正在尝试创建一个系统,该系统将通过多个文档搜索用户输入的单词并返回包含这些单词的文档。用户将搜索数千个文档,每个文档将有 10 到 100 多页长,并存储在网络服务器上。
我现在的解决方案是将每个唯一单词存储在带有 ID 的表中(英语中可能只有 120 000 个相关单词),然后在单独的表中存储单词 id,它所在的文档,以及它在该文档中出现的次数。
例如:文档 foo 的文本是
abc abc def
文档栏的文字是
abc def ghi
Documents 表会有
id | 姓名
1 'foo'
2 'bar'
单词表:
id | 单词
1 'abc'
2 'def'
3 'ghi'
Word 文档表:
字号 | 文档编号 | 发生次数
1 1 2
1 2 1
2 1 1
2 2 1
3 2 1
正如您所见,当您拥有数千个文档并且每个文档都有数千个独特的单词时,Word 文档表会很快爆炸,并且搜索时间过长。
TL;DR 我的问题是:
如何将大型文档中的可搜索数据存储在 SQL 数据库中,同时保留基于自定义因素(如发生率、以及其他人)没有一个完整的大表来存储将每个单词链接到文档及其在该文档中的属性的所有条目?
抱歉阅读了很久,感谢您的帮助!
【问题讨论】:
-
如果全文搜索不能解决您的所有问题,那么关系数据库可能不是您想要的解决方案......
-
内容索引人员实际上存储了每个单词在文档中的位置(这样您就可以判断单词是否彼此靠近,查找短语等),而不仅仅是出现的次数。跨度>
-
这是一个更适合
nosql特别是redis的问题 -
我认为你的结构是正确的。这将是关于索引
-
你看过Lucene吗?
标签: sql sql-server database search document