postgresql全文搜索功能语法

时间:2013-07-25 09:48:46

标签: postgresql indexing full-text-search

在postgres数据库中,我们有一个表table1和列column1,其类型是文本。 我们为该列创建了一个索引     CREATE INDEX idx_column1 ON table1使用gin(to_tsvector('english',column1));

问题是,为什么我们执行此查询

SELECT *
FROM table1
where to_tsvector('english', column1) @@ to_tsquery('searchedText')

使用了索引,但是未使用此查询索引

SELECT *
FROM table1
where ts_match_vq(to_tsvector('english', column1),to_tsquery('searchedText'))

1 个答案:

答案 0 :(得分:2)

疯狂猜测:

vector @@ query定义为

CREATE OPERATOR @@(
  PROCEDURE = ts_match_vq,
  LEFTARG = tsvector,
  RIGHTARG = tsquery,
  COMMUTATOR = @@,
  RESTRICT = tsmatchsel,
  JOIN = tsmatchjoinsel);

tsmatchjoinsel有很多事情发生(不要问我是什么,这种C超出我的范围......)但如果你经历了不同的功能,那就有一些计算涉及。直接使用ts_match_vq时,可以绕过这些计算。这就是为什么ts_match_vq永远不会在文档中提及,你应该总是使用@@,因为它负责调用正确的函数以及随之而来的所有东西。