......这是我应该做的事情吗?
根据我的简短测试,制作三元组索引并使用搜索
where name like '%query%'
比
where name ilike '%query%'
所以看起来我应该这样做,但我很惊讶我无法找出如何去做。
(我的测试数据相当同质 - 150 万行由 16 个重复的条目组成。我可以想象这可能会影响结果。)
这就是我期望它的工作方式(注意lower(name)
):
create extension pg_trgm;
create table users(name text);
insert into users values('Barry');
create index "idx" on users using gin (lower(name) gin_trgm_ops);
select count(*) from users where (name like '%bar%');
但这会返回0
。
任何一个
select count(*) from users where (name like '%Bar%');
或者
select count(*) from users where (name ilike '%bar%');
工作,这让我相信索引中的三元组不是lower()
'd。我是否误解了这在引擎盖下是如何工作的?那里不能打电话lower
吗?
我注意到这
select show_trgm('Barry')
返回小写三元组:
{" b"," ba",arr,bar,rry,"ry "}
所以我很困惑。