2016-12-26 122 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或正则表达式(使用三元组索引)的模式匹配完全不同。

多列模糊模式匹配的“稍微偏离”模式根本不是微不足道的。该设置需要考虑您的确切要求以获得“正确”结果并排除“错误”结果,同时保持性能不错。

为了让你开始: