【发布时间】:2014-06-06 00:27:37
【问题描述】:
我有大约 300,000 个企业的列表,这是一个小型关系 rdbms(ComponentAce 的 AbsoluteDB)中的 varchar 字段用户需要能够搜索企业名称,但用户可能没有确切的名称.
例如,名称是堪萨斯国家银行
理想情况下,用户可以开始输入 National 并让它找到所有包含 National 的字符串(注意它不是第一个单词) 我希望有一种方法可以让用户输入“国家银行”(而不是国家银行),并且仍然可以找到正确的数据。
在试图解决这个问题时,我认为文本检索系统比我所寻找的要多得多。我的整个数据文件大约 15 MB。全文检索系统的开销超出了我的需要。模糊搜索,使用某种类型的字符串相似性算法是我想要的方式吗?例如,像 DamerauLevenshtein 这样的东西?
【问题讨论】:
-
你最好的办法是在谷歌上搜索“全文搜索 Delphi”,你会得到很多结果。这个问题可能是题外话,因为它可能会导致一些意见和产品建议。另一种选择是查看 soundex。有许多数据库包含 soundex 查询功能。例如,docs.oracle.com/cd/B19306_01/server.102/b14200/functions148.htm 用于 Oracle,msdn.microsoft.com/en-us/library/ms187384.aspx 用于 SQL 服务器。这最终取决于您在寻找什么。
-
“我有一个列表”非常模糊。该“列表”在哪个容器中?它是在文本文件、数据库还是其他东西中?定位信息的方式因信息的存储方式而异。如果不清楚为什么要这样做,请致电最近的汽车维修店,询问他们更换汽车发动机的费用,看看他们是否会给您“一刀切”的估计;根据您驾驶的是普通轿车还是法拉利,费用会有很大不同。请具体说明您在这里问的是什么。
-
感谢您的编辑。 :-) 我不使用 Absolute DB,但 AFAIK 它支持 SQL,这意味着它应该支持带有通配符的
LIKE运算符。这在它的 SQL 语法中可用吗? -
你基本上有4个选项。 LIKE、SOUNDEX(AbsoluteDB 似乎不支持)、像 Rubicon 这样的全文搜索引擎,或者将整个集合加载到内存中并自己进行 soundex/搜索。
-
@Graymatter:或者
LIKE '%National%',当然不会使用索引,可能会慢一些。
标签: string delphi search fuzzy-search