Postgres - 使用 3 + 列 to_tsvector 创建用于全文搜索的索引
Postgres - Create index for full text search using 3 + columns with to_tsvector
Postgres 全文搜索文档中的所有示例都显示通过连接 2 列创建索引,但我无法解决如何使用 3+ 列执行此操作。来自 Postgres 文档的示例:
to_tsvector(title || ' ' || body)
例如,如果我有另一个应该搜索的名为 description
的列,那么这个语法似乎并不像我预期的那样工作:
to_tsvector(title || ' ' || body || ' ' || description)
当我尝试时它会产生这样的索引:
to_tsvector('english'::regconfig, ((("CompanyName" || ' '::text) || "Title") || ' '::text) || "Description")
似乎有一组额外的括号包裹着 CompanyName
和 Title
块。
关于这里的语法有什么想法吗?我无法找到有关使用 to_tsvector
.
更多列的任何相关文档
您的索引非常好,只要您在查询中使用相同的表达式,就会使用它。
索引表达式不存储为文本,而是存储为解析的树结构。这样,如果您重命名一个使用过的列,它就不会破坏索引。
字符串连接运算符 ||
是左结合的,因此括号内的表达式与您最初编写的表达式相同(除了使表达式 english
所需的配置 english
=12=],但我想你只是忘记了)。
Postgres 全文搜索文档中的所有示例都显示通过连接 2 列创建索引,但我无法解决如何使用 3+ 列执行此操作。来自 Postgres 文档的示例:
to_tsvector(title || ' ' || body)
例如,如果我有另一个应该搜索的名为 description
的列,那么这个语法似乎并不像我预期的那样工作:
to_tsvector(title || ' ' || body || ' ' || description)
当我尝试时它会产生这样的索引:
to_tsvector('english'::regconfig, ((("CompanyName" || ' '::text) || "Title") || ' '::text) || "Description")
似乎有一组额外的括号包裹着 CompanyName
和 Title
块。
关于这里的语法有什么想法吗?我无法找到有关使用 to_tsvector
.
您的索引非常好,只要您在查询中使用相同的表达式,就会使用它。
索引表达式不存储为文本,而是存储为解析的树结构。这样,如果您重命名一个使用过的列,它就不会破坏索引。
字符串连接运算符 ||
是左结合的,因此括号内的表达式与您最初编写的表达式相同(除了使表达式 english
所需的配置 english
=12=],但我想你只是忘记了)。