postgresql 全文搜索函数语法

标签 postgresql indexing full-text-search

在 postgres 数据库中,我们有一个表 table1 和列 column1,类型是文本。 我们为该列创建了一个索引 使用 gin (to_tsvector('english', column1)) 在 table1 上创建索引 idx_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'))

最佳答案

大胆的猜测:

向量@@查询定义为

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

查看tsmatchjoinsel发生了很多事情(不要问我什么,这种 C 语言远远超出了我的范围......)但是如果你遍历不同的函数,就会涉及一些计算。当直接使用 ts_match_vq 时,您可以绕过这些计算。这就是文档中从未提及 ts_match_vq 的原因,您应该始终使用 @@,因为它负责调用正确的函数以及随之而来的所有内容。

关于postgresql 全文搜索函数语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17854556/

相关文章:

sql - 关于 having 子句的 Postgresql 奇怪结果

java - Postgresql - 如何在 Java 中将 bytea 转换为文本或字符串

sql - 在 postgresql 中解释(缓冲区、分析)

indexing - 为什么向我的 Clickhouse 表添加 tokenbf_v2 索引没有任何效果

mysql - 复合索引中列的顺序会影响查找速度吗?

MySQL 全文搜索 1 个字符仅适用于 MyISAM?

postgresql - VB 脚本 PostgreSQL pg_dump

sql-server - SQL Server 优化顾问的替代方案?

mysql 左连接全文搜索很慢

php - 对全文性能进行基准测试——如何进行