Postgres 喜欢全文搜索
Postgres Like to Full Text Search
我正在尝试创建查询以在我的 sql 数据库中查找名称 other
。我有一个基本的搜索,如下所示,我想改用全文搜索。
赞查询
SELECT g.*, COUNT(*) OVER() AS total
FROM group AS g
WHERE UPPER(g.name) LIKE UPPER('oth%')
全文查询
SELECT g.*, COUNT(*) OVER() AS total
FROM group AS g
WHERE to_tsvector(g.name) @@ to_tsquery('oth:*')
看来我的全文 returns 0 与我的点赞搜索不同。为什么会这样,因为两个查询似乎都在进行类似的搜索
看起来 'other' 在英语的默认停用词列表中。
我已经在 Linux 级别使用 PostgreSQL 12 进行了测试:
$ grep other /usr/pgsql-12/share/tsearch_data/english.stop
other
在数据库中:
postgres=# select to_tsvector('french','other');
to_tsvector
-------------
'other':1
(1 row)
postgres=# select to_tsvector('english','other');
to_tsvector
-------------
(1 row)
postgres=# select to_tsvector('english','others');
to_tsvector
-------------
'other':1
(1 row)
postgres=# select to_tsvector('english','another');
to_tsvector
-------------
'anoth':1
(1 row)
尝试'another'。
我正在尝试创建查询以在我的 sql 数据库中查找名称 other
。我有一个基本的搜索,如下所示,我想改用全文搜索。
赞查询
SELECT g.*, COUNT(*) OVER() AS total
FROM group AS g
WHERE UPPER(g.name) LIKE UPPER('oth%')
全文查询
SELECT g.*, COUNT(*) OVER() AS total
FROM group AS g
WHERE to_tsvector(g.name) @@ to_tsquery('oth:*')
看来我的全文 returns 0 与我的点赞搜索不同。为什么会这样,因为两个查询似乎都在进行类似的搜索
看起来 'other' 在英语的默认停用词列表中。 我已经在 Linux 级别使用 PostgreSQL 12 进行了测试:
$ grep other /usr/pgsql-12/share/tsearch_data/english.stop
other
在数据库中:
postgres=# select to_tsvector('french','other');
to_tsvector
-------------
'other':1
(1 row)
postgres=# select to_tsvector('english','other');
to_tsvector
-------------
(1 row)
postgres=# select to_tsvector('english','others');
to_tsvector
-------------
'other':1
(1 row)
postgres=# select to_tsvector('english','another');
to_tsvector
-------------
'anoth':1
(1 row)
尝试'another'。