Postgresql 全文检索中的模糊检索

Postgresql 全文检索中的模糊检索,postgresql,full-text-search,fuzzy-search,trigram,misspelling,Postgresql,Full Text Search,Fuzzy Search,Trigram,Misspelling,我正在使用postgresql进行全文搜索,我发现如果出现拼写错误,用户将不会收到结果。我希望同时使用模糊搜索和全文搜索。例如,我无法将三元索引和全文搜索结合起来 在Postgres全文搜索中,处理拼错单词的最佳方法是什么?要使用模糊搜索,您需要确保扩展名存在 CREATE EXTENSION IF NOT EXISTS fuzzystrmatch; 检查文档,但应用类似的搜索 SELECT levenshtein('GUMBO', 'GAMBOL'); 你可以把结果放在一列中,也许按顺序排

我正在使用postgresql进行全文搜索,我发现如果出现拼写错误,用户将不会收到结果。我希望同时使用模糊搜索和全文搜索。例如,我无法将三元索引和全文搜索结合起来


在Postgres全文搜索中,处理拼错单词的最佳方法是什么?

要使用模糊搜索,您需要确保扩展名存在

CREATE EXTENSION IF NOT EXISTS fuzzystrmatch;
检查文档,但应用类似的搜索

SELECT levenshtein('GUMBO', 'GAMBOL');

你可以把结果放在一列中,也许按顺序排列?您还应该调查“regexp_replace”以修复一些已知的拼写错误

我建议您使用全文搜索或三角图相似性匹配,但不要尝试混合使用它们

基于这个需求,我认为三元图相似性匹配是更好的匹配

如果使用相似性运算符
%
无法得到结果,则有两种选择:

  • 降低相似性阈值
    pg\u trgm.相似性阈值

  • 以不同的方式进行查询,以便获得最佳匹配,无论它们之间的距离有多遥远:

    SELECT * FROM product ORDER BY katadi <-> ' pen' LIMIT 10;
    
    按katadi‘笔’限制从产品订单中选择*10;
    
    我认为这是更好的解决办法


  • 如果三元索引起作用,为什么要使用全文搜索?我有产品表,我想搜索“personel pen”。当我写'prsonel pen'或'persnel pn'时,我想找到'personal pen'产品。你可以使用三角索引而不使用全文搜索,对吗?是的,我只能使用三角索引,但如果我这样做,我就是找不到钢笔。为什么不呢?你能更详细地解释一下吗?我能用这个搜索多个表吗?例如,在Different Table中的katadi和product_quality,您可以使用两条语句或使用
    UNION
    将两个查询合并为一个结果。