我有一个论坛帖子表,并希望改进基本的搜索功能,因为我们收到了来自世界各地的非英语母语人士,并且在拼写错误时难以找到结果。目前的论坛搜索是准确的。
哪些设计表现最佳?假设数据库有500,000条记录,并且经常使用搜索。理想情况下,我希望它能够搜索每条记录。
设计一个
在每个论坛帖子旁边,我存储soundex_post,其中包含所有soundex数据。运行搜索时,它会对所有搜索项进行索引,并对soundex字段执行LIKE操作。
设计二
我将其标准化。每个soundex代码都存储在一个新表tblSoundexCodes中。然后有一个表tblForumPostSoundexCodes:
ID | Post_ID | SoundexCode_ID |计数
然后当搜索soundex时,我只需拔出所有Post_IDs,其中SoundexCode_ID = n
我是否更正,方法二会快得多,但维护起来要困难得多(IE,当人们编辑帖子时)。
答案 0 :(得分:1)
设计二更好。
设计二不会更快。数据存储将更加紧凑,您必须更新或插入行到tblForumPostSoundexCodes,以及在有人写或更新帖子时在tblSoundexCodes中插入一行。
您必须验证对帖子的每次更改(创建,更新,删除)都会发生此soundex事务处理。
答案 1 :(得分:1)
我对你的想法有些怀疑。
让我们自己回答其中一条评论:
“@Frank是MSSQL,可能只是快递版本,我用soundex作为例子,我可能会实现更新的算法”
这个简单的评论有15个单词(我丢弃了短于4个字符的单词)。 因此,您可能会有15条不同的记录,其中的值为“1”。
如果我(非英语母语人士)决定搜索(“esample”和“dait”),该怎么办?你能提供搜索多个单词的能力吗?和 - ?要么-?不 - ?
按原样运行搜索并提供“也许你正在寻找'示例和日期'不是更好吗?”像谷歌或维基百科吗?