首页 > 解决方案 > 未记录的 jsonb_to_tsvector 函数

问题描述

我正在使用 PstgreSQL v12,并且有一个本机函数\df jsonb_to_tsvector......但它没有在pg guide functions-json 和其他页面中描述。这是一个有趣的功能,我可以使用它,可靠吗?或者它是一种“迷失在命名空间”的错误

重要提示:即使谷歌找到它,我也将引用缺失(或“另见”部分缺失)视为 PG 指南错误。它是一个jsonb_*原生函数:所有必须在 pg guide functions-json 中引用。


笔记

这个 2018 年的旧页面上,我们可以找到如下内容:

CREATE TABLE test (id int, payload jsonb);
INSERT INTO test VALUES 
  (1,'{"glossary":{"title":"example glossary","GlossDiv":{"title":"S","GlossList":{"GlossEntry":{"ID":"SGML","Abbrev":"ISO 8879:1986","SortAs":"SGML","Acronym":"SGML","GlossDef":{"para":"A meta-markup language, used to create markup languages such as DocBook.","GlossSeeAlso":["GML","XML"]},"GlossSee":"markup","GlossTerm":"Standard Generalized Markup Language"}}}}}'::jsonb)
 ,(2,'{"menu":{"id":"file","popup":{"menuitem":[{"value":"New","onclick":"CreateNewDoc()"},{"value":"Open","onclick":"OpenDoc()"},{"value":"Close","onclick":"CloseDoc()"}]},"value":"File"}}'::jsonb)
 ,(3,'{"x":[1,2,3]}'::jsonb)
;
-- it is running and results are fine!
SELECT id, jsonb_to_tsvector('english', payload, '["all"]') FROM test;
SELECT id, jsonb_to_tsvector('english', payload, '["numeric","key"]') FROM test;

...而且它“失去了 2 年”。


(回答后编辑)

投票理想指南

在回答评论@a_horse_with_no_name 解释我的立场,“......按照你的逻辑,array_to_tsvector需要与数组函数一起列出......”,并且他的立场是相反的。

Stackoverflow 社区是民主的,我们可以使用高效的投票机制。我正在创建一个 Wiki 答案,供您在下面投票作为替代答案……让我们做一个实验。每个答案都是一个位置选择

是时候投票了postgresql.org/docs

我从来不明白为什么“我们的” PostgreSQL 指南postgresql.org/docs不提供“另见”部分

几乎所有 Wikipedia 文章都有“另见”部分,几乎所有流行的编程语言:PHP示例、PostGIS示例等或“另见”框,如Python 指南

在一门好的编程语言中,基于共享特征对本地函数组进行分类和定义并不困难。PostgreSQL 有一个很大的社区,因此也很容易检查关于定义相似原生函数组的共识......有时更容易:所有带前缀的函数array_都在“所有原生数组函数”的集合中,所有函数都带有前缀jsonb_位于“所有原生 JSONb 函数”的集合中。

这也是一种“指南完整性原则”:解释“G组所有功能”的指南页面需要解释或至少引用G组的所有功能。“JSON 函数”页面适用于所有原生 JSON 函数,“ARRAY 函数”页面适用于所有原生 JSON 函数。

PS:关于此上下文中的“本机功能”定义,扩展名被排除在外。例如 jsonb 函数和扩展的数组函数,如hstore不是原生的。

问题:是否有postgresql.org/docs像这里一样的民主投票机制?

标签: postgresql

解决方案


该功能记录在文本搜索功能中

将文档中由过滤器指定的每个值减少为 tsvector,然后按文档顺序连接这些值以生成单个 tsvector。


推荐阅读