【发布时间】:2012-01-08 11:31:55
【问题描述】:
我正在研究存储大量数据的语义搜索系统。数据实际上是文档及其索引。主要问题是如何使用本体索引文档以及如何存储它们。
我的问题是关于第二个问题。起初,我在 RDBMS 中实现了存储。它的工作非常缓慢。我考虑为此目的使用一些 NoSQL 数据库,但有一些疑问。
请注意,使用 Lucene 进行简单的文本搜索并不是我在当前领域所需要的。
让我简化商店结构。请注意,仅存储倒排索引。在 RDBMS 中,我们有表:
1) Word - 某些字典中的单词
2) 文档 - 包含元数据及其内容的文档
3) Hit - 单词在文档中的命中(所有命中由 '|' 分隔)
为了获得结果,系统会分析请求中的单词并根据单词的命中信息计算文档相关性。我省略了一些关于语义分析的部分,暂时不重要。
您如何看待单词存储的这种结构?
{
"word": "some_word",
...
“字典中的一些其他元数据”
...
“命中”:[
“doc1”:[“hit_info1”、“hit_info2”...]
“doc2”:[“hit_info1”、“hit_info2”...]
]
}
提前致谢!
【问题讨论】:
-
您是否考虑将它们存储在您的文件系统中?文件系统实际上是一个非常优化的 NoSQL 系统。
-
有很多插入、更新和选择存储正在做,我认为文件系统不是最好的解决方案。
-
请提供有关您的数据以及如何查询此数据的其他信息。您是如何在 RDBMS 中实现这一点的?
-
我将简化结构以便更好地理解。在 RDBMS 中有表格:Word(来自某个 dict 的单词)、Hit(wordid、docid 以及此文档中所有单词的命中)、Document(文档本身)。
-
为什么不呢?文件系统是为插入、更新、按键选择而设计的。事实上,任何 DB、NoSQL 或 RDBMS,在某些时候都会归结为文件系统......