不知何故,我欺骗自己在数据库上编写全文搜索实现。我有一个表示数据库中所有实体的表,一个表示所有标签的表,以及一个表示标签与实体的多对多关系的表。
我编写了一个查询,它将给定实体的所有标签名称分组并将它们连接成一个字符串,然后我将其转换为一个 ts_vector。该查询如下所示:
SELECT e.id, to_tsvector(c.publicname || ' ' || string_agg(cv.name, ' '))
FROM categoryvalue cv, entitycategoryvalue ecv, entity e
WHERE ccv.categoryvalueid = cv.id AND e.id = ecv.entityid
GROUP BY e.id;
查询在此架构中返回结果:
id | to_tsvector
1 | tag_a, tag_b, tag_c
2 | tag_b, tag_d, tag_e
这正是我想要匹配 ts_query 的内容。不过,我是 SQL 的菜鸟,我想知道是否有一种方法可以创建一个可以根据我编写的查询结果不断更新的表?
编辑:我在这篇博客文章http://tech.pro/tutorial/1142/building-faceted-search-with-postgresql中记录了我的最终解决方案和系统