【发布时间】:2023-03-22 03:33:01
【问题描述】:
我正在尝试创建最快的方法来搜索 PostgreSQL(9.4 版)中的数百万(80+ mio)条记录,覆盖多个列。
我想尝试使用标准 PostgreSQL,而不是 Solr 等。
我目前正在测试关注https://blog.lateral.io/2015/05/full-text-search-in-milliseconds-with-postgresql/的全文搜索。
它有效,但我想要一些更灵活的搜索方式。
目前,如果我有一列包含 ex. "Volvo" 和一个包含 "Blue" .
全文搜索可以做到吗?
【问题讨论】:
-
FTS 具有前缀匹配功能,但一般而言,它的设计目的不是为了有效地做到这一点。 FTS 旨在寻找词位匹配(
blu与blue不匹配,但 f.ex.volvo、volvos和volvo's是)。 -- 如果你可以升级到 9.6,pg_trgm有一个很好的新特性:单词相似度,它可以处理你的用例。 -
9.6 还增加了对 FTS 中“短语搜索”(多个相邻单词)的支持。
-
或者,对于替代解决方案,您可以分两步进行搜索:第一,您需要搜索每个单词的拼写错误(
pg_trgm在其中特别好)。找到匹配项后,您可以为最终用户提供在第二步中搜索匹配项的可能性(类似于 f.ex. 谷歌在您拼错单词时的处理方式)。
标签: sql postgresql full-text-search