Postgresql Postgres全文搜索跨多列索引

Postgresql Postgres全文搜索跨多列索引,postgresql,full-text-search,Postgresql,Full Text Search,我对使用Postgres全文搜索在多个列之间应用索引进行查询很感兴趣 根据,我可以应用如下的多列索引: CREATE INDEX pgweb_idx ON pgweb USING GIN (to_tsvector('english', title || ' ' || body)); 但我不知道什么时候会真正使用这个索引。WHERE子句中使用的to_向量函数是否必须与索引中使用的格式完全相同 SELECT title FROM pgweb WHERE to_tsvector(title || '

我对使用Postgres全文搜索在多个列之间应用索引进行查询很感兴趣

根据,我可以应用如下的多列索引:

CREATE INDEX pgweb_idx ON pgweb USING GIN (to_tsvector('english', title || ' ' || body));
但我不知道什么时候会真正使用这个索引。WHERE子句中使用的to_向量函数是否必须与索引中使用的格式完全相同

SELECT title FROM pgweb WHERE to_tsvector(title || ' ' || body) @@ to_tsquery('something')
以下查询是否仍然使用索引

SELECT title FROM pgweb WHERE to_tsvector(coalesce(title,'') || ' ' || coalesce(body,'')) @@ to_tsquery('something')
WHERE子句中使用的to_向量函数是否必须与索引中使用的格式完全相同

SELECT title FROM pgweb WHERE to_tsvector(title || ' ' || body) @@ to_tsquery('something')
对。它将忽略诸如空格差异和多余的括号之类的内容。但除此之外,它们必须是相同的

以下查询是否仍然使用索引

SELECT title FROM pgweb WHERE to_tsvector(coalesce(title,'') || ' ' || coalesce(body,'')) @@ to_tsquery('something')
没有

请注意,这里的是表达式索引,其中表达式引用多个列。它与多列索引不同