我試圖創建最快的方式來搜索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