Postgresql -将文本转换为ts_vector

ztyzrc3y  于 2023-06-29  发布在  PostgreSQL
关注(0)|答案(1)|浏览(207)

抱歉问了个基本问题。
我有一个包含以下列的表。

Column |  Type   | Modifiers 
     --------+---------+-----------
      id     | integer | 
      doc_id | bigint  | 
      text   | text    |
  • 我正在尝试对“文本”(第3列)进行文本匹配
  • 尝试在文本列上进行文本匹配时收到错误消息。表示字符串对于ts_vector来说太长。

我只想要包含“其他事件”字样的观察

SELECT * FROM eightks\d
    WHERE to_tsvector(text) @@ to_tsquery('other_events')

我知道ts_vector的长度有限制。
错误信息

ERROR:  string is too long for tsvector (2368732 bytes, max 1048575 bytes)

如何将文本列转换为ts_vector,这是否可以解决大小限制问题?或者,如何排除超过最大大小的观测?
Postgres版本9.3.5.0
下面是对限制limit的引用
谢谢

n3schb8v

n3schb8v1#

处理ts_vector大小限制的一种方法是将text列中的文档分割成更小的块进行搜索,然后合并这些段。拆分列后,您可以将块存储到单独的行或列中。
解决ts_vector大小限制的另一种方法是使用截断的文本值调用to_tsvector()。这可以通过创建一个触发器函数来实现,该函数将ts_vector列设置为截断的文本值。

CREATE FUNCTION tsv_trigger_fn() RETURNS 
trigger AS $$
begin
  new.tsv_text := to_tsvector('english', left(new.text, 1*1024*1024));
  return new;
end
$$ LANGUAGE plpgsql;

CREATE TRIGGER tsv_trigger BEFORE INSERT OR UPDATE
  ON <your_table> FOR EACH ROW EXECUTE FUNCTION tsv_trigger_fn();

相关问题