【问题标题】:Postgresql Fuzzy SearchPostgresql 模糊搜索
【发布时间】:2021-11-20 06:12:37
【问题描述】:

请原谅这个一般性问题。我在 PostgreSQL 中创建了一个巨大的模糊搜索函数,它使用相似度、Soundex、Metaphone、Levenshtein 和其他类型的逻辑比较。我已经为每个结果设置了加权值。该功能已经增长以改善结果,但它很慢而且仍然不是很好!我花了很多时间研究和搜索比我更聪明的人创建的模糊搜索!

有谁知道 PostgreSQL 的一个很棒的模糊搜索功能,它比较两个字符串并产生一个可以排序的分数?我希望有一些可以像这样工作的东西:

SELECT tbl_name_column, blur_function(tbl_name_column, '最像这个字符串') 作为分数 来自 tbl ORDER BY score desc

【问题讨论】:

标签: postgresql


【解决方案1】:

pg_trgm 扩展提供了 Trigram 评分,但还有 this answer 中提到的 fuzzystrmatch 扩展提供其他算法支持(当前的 PG 文档 [v14] 警告说除了 levenshtein() 函数之外的所有内容都没有与 UTF-8 等多字节编码配合良好,因此请注意)。

pg_trgm:

SELECT 
    tbl_name_column, 
    similarity(tbl_name_column, 'search string') AS score 
FROM tbl 
ORDER BY score DESC; -- Trigram score increases with similarity

模糊匹配:

SELECT 
    tbl_name_column, 
    levenshtein(tbl_name_column, 'search string') AS score 
FROM tbl 
ORDER BY score ASC; --levenshtein distance decreases with similarity

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-20
    • 2020-03-15
    • 2014-08-20
    • 2011-10-28
    • 2016-06-12
    • 2017-06-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多