【发布时间】:2015-09-20 19:02:59
【问题描述】:
我正在开发一个 postgreSQL 查询,以便在我正在开发的应用程序中搜索公司名称时允许模糊搜索功能。我发现并一直在使用 Postgres 的 Levenshtein 方法(fuzzystrmatch 模块的一部分),并且大部分情况下它都在工作。但是,它似乎只在公司名称是一个单词时才有效,例如:
使用 Apple(它作为简单的苹果存储在数据库中)我可以运行以下查询并让它几乎完美地工作(它返回 0 的 levenshtein 距离):
SELECT * FROM contents
WHERE levenshtein(company_name, 'apple') < 4;
但是,当我对 Sony(作为 Sony Electronics INC 存储在数据库中)采用相同的方法时,我无法获得任何有用的结果(输入 Sony 给出的 levenshtein 距离为 16)。
我试图通过将公司名称分解为单个单词并单独输入每个单词来解决此问题,结果如下:
user input => 'sony'
SELECT * FROM contents
WHERE levenshtein('Sony', 'sony') < 4
OR levenshtein('Electronics', 'sony') < 4
OR levenshtein('INC', 'sony') < 4;
所以我的问题是:有什么方法可以用我现在拥有的当前通用方法准确地实现多词模糊搜索,还是我找错了地方?
谢谢!
【问题讨论】:
标签: postgresql levenshtein-distance fuzzy-search