我有一个像the cat sat on the mat
这样的句子存储为单个sql字段。我想定期搜索不在停止列表中的关键字,在这种情况下cat sat mat
将它们存储在SQL表中以便快速搜索的最佳方法是什么?
据我所见,我看到以下选项
哪种是最佳做法,哪种搜索字匹配最快?我在python中使用sqlite,如果这有所不同。
答案 0 :(得分:1)
我建议给你的句子一个关键,可能是IDENTITY。然后我会创建一个链接到你的句子表的第二个表,每个有趣的单词都有一行。
如果您想搜索以ca开头的单词,如果您将这些单词存储在逗号分隔中,则必须使用通配符开头和结尾,而如果它们各自位于单独的行中,则可以绕过开头的通配符。
另外,假设您找到一个匹配项,在逗号分隔的列表中,您必须解析出哪个单词实际上是一个匹配。使用第二个表,您只需返回单词本身。更不用说在一个字段中存储多个值是关系数据库中的主要禁忌。
答案 1 :(得分:1)
您最好的选择可能是进行全文搜索。
这些问题FULL-TEXT Search in SQLite和SQLite full text search catalog有望让您朝着正确的方向前进。
答案 2 :(得分:1)
我也和SQLite做类似的事情。根据我的经验,在这种情况下它并不像其他数据库那么快,因此让你的模式尽可能简单是值得的。
如果您希望使用LIKE
进行缩放和匹配,则在4个选项中,2)和4)可能太慢。尽管如此,使用全文匹配更快,因此值得研究。 1)看起来是糟糕的数据库设计,如果有更多的单词而不是列?如果没有那么多,那只是浪费空间。 3)是最好的IMO,如果你把单词作为自己表中的主键,搜索速度应该是可接受的快。