我正在尝试创建一种在PostgreSQL(版本9.4)中通过多列搜索数百万(80+ mio)记录的最快方法。
我想尝试使用标准的PostgreSQL,而不是Solr等。
我目前正在测试全文搜索https://blog.lateral.io/2015/05/full-text-search-in-milliseconds-with-postgresql/。
它有效,但我想要一些更灵活的搜索方式。
目前,如果我有一个包含ex的列。 “沃尔沃”和一个包含“蓝色”的我能够找到带有搜索字符串“volvo blue”的记录,但我还想找到使用“volvo blu”的记录,好像我使用了LIKE和“%blu%”
全文搜索可以吗?
答案 0 :(得分:1)
这样的唯一选择是使用pg_trgm
contrib模块。
这使您可以创建一个GIN或GiST索引,该索引为三个字符的所有序列编制索引,这些序列可用于使用相似性运算符%
进行搜索。
两个注释:
使用%
运算符可能会返回“误报”结果,因此请务必添加第二个条件(例如使用LIKE
)来消除这些结果。
三元搜索适用于较长的搜索字符串,但由于存在许多误报结果,因此使用短搜索字符串表现不佳。
如果这对您的目的不够好,您将不得不诉诸第三方解决方案。