我试图创建最快的方式来搜索PostgreSQL(版本9.4)中的数百万(80+ mio)记录,通过多列。PostgreSQL使用子字符串的全文搜索
我想尝试使用标准的PostgreSQL,而不是Solr的等
目前我测试全文搜索,随后https://blog.lateral.io/2015/05/full-text-search-in-milliseconds-with-postgresql/。
它的作品,但我想一些更灵活的方式来搜索。
目前,如果我有一列包含前。 “沃尔沃”和一个包含“蓝色”我能找到与搜索字符串“沃尔沃蓝色”的记录,但我也想找到使用“沃尔沃蓝光”的记录,就好像我使用LIKE和“%蓝光%” 。
这是可能的全文搜索?
FTS具有前缀匹配功能,但总的来说,它并非旨在有效地执行此操作。 FTS的设计是围绕寻找词位匹配(而'蓝'与'蓝'不是匹配,但f.ex.'volvo','volvos'和'volvo's')。 - 如果你可以升级到9.6,'pg_trgm'有一个很好的新特性:字相似性,它可以处理你的用例。 – pozs
9.6也增加了对FTS中“词组搜索”(多个相邻词)的支持。 –
或者,对于其他解决方案,您可以分两步进行搜索:第一,您需要搜索每个单词的拼写错误(“pg_trgm”尤其擅长)。找到匹配后,您可以为最终用户提供在第二步搜索这些内容的可能性(类似f.ex.如果拼写错误的话,Google会如何处理)。 – pozs