0

我在移动设备上有 ac# 应用程序,上面有 sqlce 数据库。

在数据库中有一张大表,我想在其中搜索城市或地址的名称。问题是,城市名称来自不同的来源,或者是由不同的人插入的,因此城市包含例如Saint XXX、St. YYYSt ZZZ

在我的搜索中,我搜索 fpr St XXX还是搜索Saint XXX都无关紧要。结果应该是一样的

当然这个问题不仅仅出现在圣徒这个词上,它只是一个例子。我还不知道多少,但会有很多不同的术语。

我有一些方法,比如更换

SELECT REPLACE(REPLACE(name,'St.','Saint'),'St','Saint') FROM cities WHERE name = REPLACE(REPLACE(@SearchTerm,'St.','Saint'),'St','Saint')

但是性能很差。

SoundEx没有真正给出我需要的结果,因为 Saint 和 St 听起来根本不相似。

城市名称来自外部数据源(通过合并复制),因此我无法在服务器上更新它们,也不想更新城市名称,而是使用它们,因为它们存储在数据库中。

我怎样才能进行搜索以满足我的需求?

4

1 回答 1

2

模糊搜索,每个数据库设计师的祸根……

我会将数据库中的每个名称拆分为空格和标点符号,然后将生成的子字符串输入到一个新表“city_alias”中,该表还包括原始城市表的外键。

因此,对于“Saint Petersburg”,将创建两个别名,“Saint”和“Petersburg”。别名“Saint”很可能是一个非常常见的别名,因此对于搜索查询应该忽略它。

当用户在搜索中输入“St.Petersburg”时,它会被分成“St”和“Petersburg”。“St”可能和“Saint”一样频繁,所以应该忽略它。因此在别名表中搜索“Petersburg”,这将返回“Saint Petersburg”(以及“Saint Petersburg-Kronstadt”或“Petersburg (Alaska)”)。

编辑:别名表也可以手动填充频繁的拼写错误 (Petersbourg)、昵称 (Piter)、过时的名称 (Leningrad) 或本地拼写 (Петербу́рг)。

于 2012-11-22T13:17:47.493 回答