设计基于soundex的搜索的最佳方式

时间:2011-04-12 11:16:26

标签: database-design soundex

我有一个论坛帖子表,并希望改进基本的搜索功能,因为我们收到了来自世界各地的非英语母语人士,并且在拼写错误时难以找到结果。目前的论坛搜索是准确的。

哪些设计表现最佳?假设数据库有500,000条记录,并且经常使用搜索。理想情况下,我希望它能够搜索每条记录。

设计一个

在每个论坛帖子旁边,我存储soundex_post,其中包含所有soundex数据。运行搜索时,它会对所有搜索项进行索引,并对soundex字段执行LIKE操作。

设计二

我将其标准化。每个soundex代码都存储在一个新表tblSoundexCodes中。然后有一个表tblForumPostSoundexCodes:

ID | Post_ID | SoundexCode_ID |计数

然后当搜索soundex时,我只需拔出所有Post_IDs,其中SoundexCode_ID = n

我是否更正,方法二会快得多,但维护起来要困难得多(IE,当人们编辑帖子时)。

2 个答案:

答案 0 :(得分:1)

设计二更好。

设计二不会更快。数据存储将更加紧凑,您必须更新或插入行到tblForumPostSoundexCodes,以及在有人写或更新帖子时在tblSoundexCodes中插入一行。

您必须验证对帖子的每次更改(创建,更新,删除)都会发生此soundex事务处理。

答案 1 :(得分:1)

我对你的想法有些怀疑。

让我们自己回答其中一条评论:

“@Frank是MSSQL,可能只是快递版本,我用soundex作为例子,我可能会实现更新的算法”

这个简单的评论有15个单词(我丢弃了短于4个字符的单词)。 因此,您可能会有15条不同的记录,其中的值为“1”。

如果我(非英语母语人士)决定搜索(“esample”“dait”),该怎么办?你能提供搜索多个单词的能力吗?和 - ?要么-?不 - ?

按原样运行搜索并提供“也许你正在寻找'示例和日期'不是更好吗?”像谷歌或维基百科吗?