Postgresql 模糊搜索
Posted
技术标签:
【中文标题】Postgresql 模糊搜索【英文标题】:Postgresql Fuzzy Search 【发布时间】: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
【问题讨论】:
这能回答你的问题吗? How to create simple fuzzy search with PostgreSQL only? 【参考方案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
【讨论】:
以上是关于Postgresql 模糊搜索的主要内容,如果未能解决你的问题,请参考以下文章