【问题标题】:How to use jsonb column in index update function for full text search?如何在索引更新功能中使用jsonb列进行全文搜索?
【发布时间】:2023-01-20 05:55:52
【问题描述】:

我有一个包含这些(相关)字段的 articles

CREATE TABLE
  IF NOT EXISTS articles (
    ...
    ...
    title TEXT NOT NULL,
    content JSONB NOT NULL,
    search_index TSVECTOR NOT NULL,
    ...
    ...
  );

索引在search_index

CREATE INDEX articles_search_index ON articles USING gin(search_index);

我希望能够在没有任何特定优先级的情况下同时搜索 titlecontent

我想要对待整个 content 数据作为文本块,而不实际改变其结构。

我希望会起作用:

CREATE TRIGGER articles_search_index_update BEFORE INSERT
OR
UPDATE
  ON articles FOR EACH ROW EXECUTE FUNCTION 
     tsvector_update_trigger
        (search_index,
         'pg_catalog.english', 
          title, 
          content
        );

错误 - column \"content\" is not of a character type 这是可以理解的,因为 tsvector_update_trigger 需要文本列。

是否可以在该功能中包含jsonb内容?

【问题讨论】:

  • 使用生成的列而不是基于触发器的解决方案怎么样?

标签: postgresql


【解决方案1】:

您可以通过在更新触发器中使用 content::text 而不是 content 将整个 json 转换为字符串,但是随后 json 的所有括号、键和逗号也会被抛出,这可能会出现问题。如果内容总是包含相同的简单属性,那么手动提取(相关)属性、在必要时将它们转换为文本并将它们连接在一起会更清晰。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-22
    • 2021-05-30
    • 2014-10-15
    • 1970-01-01
    • 1970-01-01
    • 2015-09-21
    • 2012-07-29
    • 1970-01-01
    相关资源
    最近更新 更多