SQL将文档中的每个单词单独存储在文档中的最有效方法
这里是我的情况(或参见底部的TLDR ):我试图建立一个系统,通过几个文档搜索用户输入的单词并返回包含这些单词的文档。 用户将通过数以千计的文档进行搜索,每个文档长度为10 - 100+页,并存储在网络服务器上。
我现在的解决方案是将每个唯一的单词存储在一个带有ID的表格中(在英语中只有120 000个相关单词),然后在单独的表格中存储单词id,它所在的文档以及在该文件中出现的次数。
例如:文件foo的文本是
abc abc def
和文档栏的文字是
abc def ghi
文件表将具有
id | 名称
1 'foo'
2 'bar'
字表:
id | 字
1 'abc'
2 'def'
3 'ghi'
Word文档表格:
word id | doc id | 事件
1 1 2
1 2 1
2 1 1
2 2 1
3 2 1
正如你可以看到当你有成千上万的文件,每个文件有成千上万个独特的单词时,Word文档表非常快速地爆炸,并且花费太长时间来搜索。
TL; DR我的问题是这样的:
如何将大型文档中的可搜索数据存储在SQL数据库中,同时保留使用我自己的搜索算法(我知道SQL有一个内置的.docs和pdf)的能力,基于自定义因素(如出现次数,以及其他)没有一个完全庞大的表,所有条目将每个单词链接到文档及其文档中的属性?
对不起,长时间阅读并感谢您的帮助!
而不是建立你自己的搜索引擎使用SQL Server,你有没有考虑过使用一个C#.net实现lucene搜索api的? 看看https://github.com/apache/lucene.net
好问题。 我会背诵现有的SQL Server解决方案(全文索引)。 他们已经集成了一个很好的索引引擎,它比你自己的代码可能做得更好(或者微软的开发人员很懒,或者他们只需要花一毛钱来构建它):-)
请参阅SQL服务器文本索引背景。 您可以查询诸如sys.fulltext_index_fragments之类的视图或使用存储过程。
当然,对现有解决方案的支持有一些缺点:
但是,如果您允许SQL Server执行索引,则可以更轻松,更少时间构建自己的解决方案。
你的问题让我觉得太天真了。 首先,你正在乞求这个问题。 你给自己的问题提供了一个有缺陷的解决方案......然后解释为什么它不能工作。 如果你简单描述你的目标是什么,那么你的问题就会好得多......然后,让你的人比你更聪明地告诉你如何实现这个目标。
就在旁边......数据库对我来说听起来像是一个非常愚蠢的想法。 很长一段时间,人们一直在类UNIX环境中使用命令行工具来查看文本。 要么是已经存在的能够解决你的问题的东西,要么是一个像样的perl脚本会为你“伪造”它 - 当然,这取决于你的真实世界约束。
根据你的问题实际是什么,我怀疑这可能会引入一些非常有趣的计算机科学问题 - 索引,贝叶斯过滤,还有谁知道还有什么。 然而,我怀疑你正在做一个比需要的更复杂的基本任务。
TL; DR我的答案是这样的:
**为什么你不只是写一个脚本来通过一个目录...然后使用正则表达式来计算每个文件中发现的单词的出现次数?
链接地址: http://www.djcxy.com/p/76079.html上一篇: SQL Most effective way to store every word in a document separately
下一篇: Share Folder (SMB) from EC2 Instance on AWS to remote machine