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