0

我有一个论坛帖子表,并且想要改进基本的搜索功能,因为我们有来自世界各地的许多非英语母语用户,并且当他们拼写错误时很难找到结果。当前的论坛搜索是准确的。

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

设计一

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

设计二

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

身份证 | Post_ID | SoundexCode_ID | 数数

然后,当搜索 soundex 时,我只需提取 SoundexCode_ID = n的所有 Post_ID

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

4

2 回答 2

1

我对你的想法有些怀疑。

让我们对其中一条评论做出自己的回答:

“@Frank 是 MSSQL,可能只会是速成版,我以 soundex 为例,我可能会实现一个更新的算法”

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

如果我,一个非英语为母语的人,决定搜索(“esample”“dait”)怎么办?您会提供搜索多个单词的功能吗?和-?或者-?不是-?

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

于 2011-04-12T13:32:23.967 回答
1

设计二更好。

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

您必须验证此 soundex 事务处理是否针对帖子的每次更改(创建、更新、删除)进行。

于 2011-04-12T13:00:29.250 回答