2016-12-26 90 views
1

我試圖在Web應用程序上實現搜索,我可以在表中的多個字段上進行全文搜索,同時也支持部分或略偏離查詢匹配。postgres中的模糊全文搜索

我的計劃是創建一個物化視圖,然後爲模糊(trigram)搜索創建一個索引。但我不太確定這是否是正確的方法。

這是我到目前爲止。我很確定這個SQL是不正確的,但我不知道如何糾正它。我對它還是一種新鮮感。第一次在ORM之外工作。

我使用的是postgres 9.5.5。

CREATE MATERIALIZED VIEW search AS 
SELECT word FROM ts_stat(
    'SELECT (
     setweight(to_tsvector(''simple'', location.name), ''A'') 
     || setweight(to_tsvector(''simple'',locations.street), ''B'') 
     || setweight(to_tsvector(''simple'',locations.state), ''C'') 
     || setweight(to_tsvector(''simple'',locations.city), ''C'') 
     || setweight(to_tsvector(''simple'',locations.zip,), ''B'') AS document, 
    ) 
    FROM locations 
    GROUP BY locations.id 
    ' 
); 

表位置

街道
狀態
城市
拉鍊
地理位置

+0

* 「模糊搜索」 *可能是相當多的東西。請正確解釋*您想要達到的目標。並添加您的表格定義,基數,Postgres版本。 –

+0

更新的問題,我希望這更清晰。感謝您的提示! – user3791980

+0

表定義包括數據類型和約束。示例:http://stackoverflow.com/a/9790225/939860 –

回答

2

物化在這個問題的觀點定義似乎沒有任何意義可言。 ts_stat()用於調試文本搜索設置。

Full text searchLIKE或正則表達式(使用三元組索引)的模式匹配完全不同。

多列模糊模式匹配的「稍微偏離」模式根本不是微不足道的。該設置需要考慮您的確切要求以獲得「正確」結果並排除「錯誤」結果,同時保持性能不錯。

爲了讓你開始: