语法错误,在 postgresql 中为全文搜索创建 tsvectors 的物化视图时

Syntaxerror, when creating an MATERIALIZED VIEW of tsvectors for fulltextsearch in postgresql

提问人:DatenDenker 提问时间:1/14/2023 更新时间:1/14/2023 访问量:58

问:

我正在尝试实现全文搜索,同时考虑拼写错误。 因此,我尝试创建所有相关列的 tsvector。MATERIALIZED VIEW

CREATE MATERIALIZED VIEW unique_lexeme AS
SELECT word FROM ts_stat(
'SELECT to_tsvector('simple', cve.descriptions) || 
    to_tsvector('simple', cpeMatch.criteria) ||
    to_tsvector('simple', array_to_string(reference.tags, ' '))
FROM cve
JOIN cpeMatch ON cpeMatch.cve_id = cve.id
JOIN reference ON reference.cve_id = cve.id
GROUP BY cve.id');

但是当我运行这段代码时,我得到:

SQL-Fehler [42601]: FEHLER: Syntaxfehler bei »simple«
  Position: 92

说“simple”存在语法错误。 我不知道如何解决这个问题。 为了清楚起见,我安装了pg_trgm但没有进行任何配置更改。

PostgreSQL 语法错误 文搜索 materialized-views tsvector

评论


答:

3赞 JGH 1/14/2023 #1

您需要引用,但您已经在带引号的字符串中。最简单的方法是更改字符串分隔符:simple

CREATE MATERIALIZED VIEW unique_lexeme AS
SELECT word FROM ts_stat(
$$SELECT to_tsvector('simple', cve.descriptions) || 
    to_tsvector('simple', cpeMatch.criteria) ||
    to_tsvector('simple', array_to_string(reference.tags, ' '))
FROM cve
JOIN cpeMatch ON cpeMatch.cve_id = cve.id
JOIN reference ON reference.cve_id = cve.id
GROUP BY cve.id$$);