Postgres-使用3个以上带有to_tsvector的列创建全文搜索索引

时间:2019-02-07 04:19:22

标签: postgresql full-text-search database-indexes

Postgres全文搜索文档中的所有示例都显示了通过串联2列来创建索引的方法,但是我无法解决3+列如何做到这一点。来自Postgres文档的示例:

to_tsvector(title || ' ' || body)

例如,如果我有另一个应通过搜索的列称为description,则该语法似乎不符合我的期望:

to_tsvector(title || ' ' || body || ' ' || description)

当我尝试它时,会得到这样的索引:

to_tsvector('english'::regconfig, ((("CompanyName" || ' '::text) || "Title") || ' '::text) || "Description")

似乎有另外一组用括号括起来的CompanyNameTitle块。

关于语法应该在这里的任何想法吗?我无法找到有关在to_tsvector中使用更多列的任何相关文档。

1 个答案:

答案 0 :(得分:1)

您的索引非常好,只要您在查询中使用相同的表达式,便会使用它。

带索引的表达式不存储为文本,而是存储为已解析的树结构。这样,如果您例如重命名已使用的列,它不会破坏索引。

字符串连接运算符||保持关联状态,因此带括号的表达式与您最初编写的表达式相同(除了配置english之外,表达式{{1 }},但我想您只是忘记了这一点。