在mysq中存储反向索引

2024-06-27 22:25:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在创建一个非常大的反向索引项。你建议什么方法?在

首先

termId - > docId
  a        doc2[locations],doc5[locations],doc12[locations] 
  b        doc5[locations],doc7[locations],doc4[locations] 

^{pr2}$

p.sLucene不是一个选择


Tags: 方法建议docidlocationspr2doc2doc4doc5
1条回答
网友
1楼 · 发布于 2024-06-27 22:25:19

正确的表设计取决于您计划如何使用数据。如果您计划按原样使用"doc2[locations],doc5[locations],doc12[locations]"这样的字符串而不进行任何进一步的后处理,那么您的First设计就可以了。在

但是,如果正如你的问题所暗示的那样,你有时可能想把doc2[locations]doc5[locations]等视为独立的实体,那么你绝对应该使用你的Second设计。在

下面是一些用例,它们说明了Second设计为什么更好:

  • 如果使用First并要求使用termID = a的所有文档,则 拿回来一根绳子 doc2[locations],doc5[locations],doc12[locations]那你呢 必须分开。在

    如果使用Second,则将每个doc作为一个单独的行。不许分裂!在

    Second结构更方便。

  • 或者,假设在某个时刻doc5[locations]发生了变化,您需要 更新您的表。如果使用First设计,则必须使用 一些相对复杂的MySQL string function来查找和替换包含它的所有行中的子字符串。(请注意,MySQL没有内置regex substitution。)

    如果使用Second设计,则更新很容易:

    UPDATE table SET docId = "newdoc5[locations]" where docId = "doc5[locations]"
    

相关问题 更多 >