postgresql - 将来自多行的 tsvectors 合并为一个

标签 postgresql full-text-search

我有一个带有文本字段的表和一个包含该字段的搜索索引的 tsvector:

CREATE TABLE test (pk bigint, value text, tsv tsvector);

如何创建一个 tsvector,它是满足某些条件的所有行的向量组合?

SELECT value FROM test
WHERE combine_my_vectors(SELECT tsv FROM test WHERE pk IN (some list))
      @@ to_tsquery('search me');

我知道 tsvector 可以与 || 结合使用,但在这里似乎不可能。我对 combine_my_vectors 使用什么?

我宁愿避免必须先组合我的 value 文本字段,然后再从中创建一个 tsvector

最佳答案

PostgreSQL 的优点在于它的可扩展性。

您可以简单地为此定义自己的聚合:

CREATE AGGREGATE tsvector_agg(tsvector) (
   STYPE = pg_catalog.tsvector,
   SFUNC = pg_catalog.tsvector_concat,
   INITCOND = ''
);

你可以这样使用它:

SELECT tsvector_agg(tsv) FROM test;

当然你不能为此使用全文搜索索引,因为匹配的值不属于单个行。

关于postgresql - 将来自多行的 tsvectors 合并为一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54292440/

相关文章:

postgresql - 是否可以将 Postgres 配置为在交互模式下将字符串值显示为带引号的字符串?

postgresql - PL/pgSQL EXECUTE语句中没有参数$1

postgresql - 使 PostgreSQL 时间戳即使为零也显示毫秒

sql-server-2008 - 在 SQL Server 2008 中使用 CONTAINS 创建存储过程

MySQL 错误 1032 "Can' t 在表中找不到记录”

javascript - Mongodb - 嵌入文档的全文搜索

postgresql - 如何启动 pgAdmin 数据库设计器?

sql - Ruby 数组作为普通 SQL 查询的参数

search - Cassandra全文搜索喜欢

asp.net - 在 Azure 中实现全文搜索有哪些可能的解决方案?