我正在努力创建一个非常大的倒排索引术语。你会建议什么方法?
第一
termId - > docId
a doc2[locations],doc5[locations],doc12[locations]
b doc5[locations],doc7[locations],doc4[locations]
第二
termId - > docId
a doc2[locations]
a doc5[locations]
a doc12[locations]
b doc5[locations]
b doc7[locations]
b doc4[locations]
p.s Lucene不是一个选项
答案 0 :(得分:1)
正确的表格设计取决于您计划如何使用数据。如果您计划使用"doc2[locations],doc5[locations],doc12[locations]"
之类的字符串而不进行任何进一步的后处理,那么您的First
设计就可以了。
但如果 - 正如您的问题默认建议 - 您有时可能会将doc2[locations]
,doc5[locations]
等视为单独的实体,那么您一定要使用{{1}设计。
以下是一些用例,说明Second
设计更好的原因:
如果您使用Second
并要求所有文档First
,那么您
得到一个字符串
你那么termID = a
不得不拆分。
如果使用Second,则将每个doc作为单独的行。没有分裂!
doc2[locations],doc5[locations],doc12[locations]
结构更方便。
或者,假设某些时候Second
发生了变化,您需要这样做
更新你的表。如果您使用doc5[locations]
设计,则必须使用
一些相对复杂的MySQL string function来查找和替换包含它的所有行中的子字符串。 (请注意,MySQL没有内置regex substitution。)
如果您使用First
设计,则更新很简单:
Second