Сделайте 2 таблицы, что то вроде
create table core_keywords(
keyword_id serial primary key,
keyword varchar(100)
);
create unique index u_idx_keyword on core_keywords(lower(keyword));
create index t_idx_keywords on core_keywords using gin (lower(keyword) gin_trgm_ops);
create table core_keywords_entry(
keyword_id int not null references core_keywords,
created_at timestamp with time zone not null default CURRENT_TIMESTAMP,
primary key (keyword_id, created_at)
);
ну и будет все проще, что-то вроде
select
e.keyword_id,
count(*)
from core_keywords_entry as e
join core_keywords as k using(keyword_id)
where lower(k.keyword) like '%something%'
group by 1