【问题标题】:fuzzy search in full text search全文搜索中的模糊搜索
【发布时间】:2018-09-02 20:19:32
【问题描述】:

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

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

【问题讨论】:

  • 如果三元组索引可以解决问题,为什么还要使用全文搜索?
  • 我有产品表,我想搜索 'personel pen' 。当我写“prsonel pen”或“persnel pn”时,我想找到“personal pen”产品。
  • 您可以使用三元组索引而不使用全文搜索来做到这一点,对吧?
  • 是的,我只能使用三元索引,但如果我这样做,我就是找不到笔。
  • 为什么不呢?能详细解释一下吗?

标签: postgresql full-text-search fuzzy-search trigram misspelling


【解决方案1】:

我建议您使用全文搜索或三元相似度匹配,但不要尝试混合使用。

根据需求,我会说三元相似度匹配更合适。

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

  1. 降低相似度阈值pg_trgm.similarity_threshold

  2. 以不同的方式查询,以便获得最佳匹配,无论它们是“遥远的”:

    SELECT * FROM product ORDER BY katadi <-> ' pen' LIMIT 10;
    

    我认为这将是更好的解决方案。

【讨论】:

  • 我可以用它来搜索多个表吗?例如不同表中的 katadi 和 product_quality
  • 您可以使用两个语句或使用UNION 将两个查询合并为一个结果。
【解决方案2】:

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

CREATE EXTENSION IF NOT EXISTS fuzzystrmatch;

检查文档,但您可以像这样应用搜索;

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

您可以将结果放入列中进行排序吗?您还应该调查“regexp_replace”以修复一些已知的拼写错误

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-06
    • 1970-01-01
    • 2020-05-07
    • 2019-01-11
    • 1970-01-01
    • 2013-02-18
    • 2017-05-19
    • 2021-03-27
    相关资源
    最近更新 更多