我正在编写一个PostgreSQL查询,以便在我正在开发的应用程序中搜索公司名称时具有模糊搜索功能。我已经找到并使用了Postgres的Levenshtein方法(属于fuzzystrmatch模块),在大多数情况下它是有效的。但是,只有当公司名称为一个单词时才能正常工作,例如:
对于苹果(在数据库中仅存储为apple),我可以运行以下查询,并且它几乎完美地工作(返回Levenshtein距离为0):
对于苹果(在数据库中仅存储为apple),我可以运行以下查询,并且它几乎完美地工作(返回Levenshtein距离为0):
SELECT * FROM contents
WHERE levenshtein(company_name, 'apple') < 4;
然而,当我用相同的方法处理索尼(在数据库中存储为Sony Electronics INC)时,无法得到任何有用的结果(输入“Sony”会得到一个16的莱文斯坦距离)。
我尝试通过将公司名称拆分为单独的单词,并逐个输入每个单词来解决此问题,得到了如下结果:
user input => 'sony'
SELECT * FROM contents
WHERE levenshtein('Sony', 'sony') < 4
OR levenshtein('Electronics', 'sony') < 4
OR levenshtein('INC', 'sony') < 4;
我的问题是:我现在的通用方法是否可以准确实现多词模糊搜索,或者我正在完全错误的地方寻找答案?
谢谢!