Версия PostgreSQL: 9,6.
Таблица events
имеет столбец visitors
JSONB:
CREATE TABLE events (name VARCHAR(256), visitors JSONB);
Столбец visitors
содержит "плоский" массив JSON:
["John Doe","Frédéric Martin","Daniel Smith",...]
.
Таблица events
содержит 10 миллионов строк, в каждой строке от 1 до 20 посетителей.
Можно ли индексировать значения массива для эффективного поиска по шаблону:
- оставлено на якоре : выбрать события, посетители которых соответствуют 'John%'
- привязка справа : выберите события, посетители которых соответствуют '% Doe'
- без акцента : выберите события, посетители которых соответствуют 'Frederic%'
- без учета регистра : выберите события, посетители которых соответствуют 'john%'
Мне известно о существовании расширения триграмм Postgres gin_trgm_ops
, позволяющего создавать индексы для нечувствительного к регистру и привязанного к правой части поиска, но я не могу понять, как создавать индексы триграмм для содержимого "flat" Массивы JSON.
Я прочитал Сопоставление с образцом по ключу / значению jsonb и Индекс для поиска элемента в массиве JSON , но представленные решения, похоже, не применимы к моему варианту использования.