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
中使用更多列的任何相关文档。
答案 0 :(得分:1)
您的索引非常好,只要您在查询中使用相同的表达式,便会使用它。
带索引的表达式不存储为文本,而是存储为已解析的树结构。这样,如果您例如重命名已使用的列,它不会破坏索引。
字符串连接运算符||
保持关联状态,因此带括号的表达式与您最初编写的表达式相同(除了配置english
之外,表达式{{1 }},但我想您只是忘记了这一点。