1

我有一个数据库,里面有很多客户。系统的用户希望能够通过姓名等方式查找客户的帐户。

我所做的是创建一个名为 CustomerFullText 的新表,它只有一个 CustomerId 和一个 nvarchar(max) 字段“CustomerFullText”。在“CustomerFullText”中,我将我为客户拥有的所有文本(例如名字、姓氏、地址等)连接在一起,并且我在该字段上有一个全文索引,以便用户只需输入一个搜索框并获得匹配的结果。

我发现这给出了更好的结果,尝试搜索存储在许多不同列中的数据,尽管我想我有兴趣听到这本身是否是一个糟糕的主意。

许多人的名字听起来相同,但拼写不同:Katherine、Catherine 和 Catharine,也许数据库中记录的人是 Katherine,但自称是 Kate。还有,麦当劳对麦克唐纳,丽兹对伊丽莎白,等等。

因此,我正在做的是,在正确存储原始名称的同时,在构建全文之前进行一系列替换。因此,所有的 Katherine 和 Catheine 等在全文字段中都替换为“KATE”。在查询数据库之前,我对搜索参数进行了相同的转换,因此在搜索框中键入“Catherine”的人实际上会针对数据库中的全文索引运行“KATE”查询,这将匹配 Catherine AND Katherine等等。

我的问题是:这是否复制了现有 SQL Server 全文功能的任何部分?我看过了,但我认为这与自定义词干分析器或分词器或类似内容不同。

4

1 回答 1

2

我不会尝试自己对数据进行语音规范化,而是使用双变音算法,本质上是对基本 SOUNDEX 想法的更好实现。

您可以在此处找到示例实现:http ://www.sqlteam.com/forums/topic.asp?TOPIC_ID=13574 ,更多内容列在上面的 Wikipedia 链接中。

它将生成您单词的两个规范化代码版本。然后,您可以将它们保留在另外两个列中,并将它们与您的搜索文本进行比较,您可以即时将其转换为 Double Metaphone。

于 2012-03-15T16:44:27.167 回答