Прикладываю наработки по Food assistant’у.
Шаг 1: Создаем таблицу
CREATE UNLOGGED TABLE IF NOT EXISTS foods (
id SERIAL PRIMARY KEY,
title TEXT UNIQUE,
protein NUMERIC (5, 2) default NULL,
fat NUMERIC (5, 2) default NULL,
carbohydrate NUMERIC (5, 2) default NULL,
kcal NUMERIC (5) default NULL
);
-- Хранимая процедура поиска по title мультиязычно
CREATE OR REPLACE FUNCTION to_tsvector_multilang (title TEXT) RETURNS tsvector as $$
SELECT to_tsvector('russian', $1) ||
to_tsvector('english', $1) ||
to_tsvector('simple', $1)
$$ LANGUAGE SQL IMMUTABLE;
-- Полнотекстовый поиск по тайтлу
CREATE INDEX idx_gin_foods ON foods USING GIN (to_tsvector_multilang(title));
Шаг 2: Импортируем CSV файл
Шаг 3: Выполняем запрос
SELECT id, title, protein, fat, carbohydrate, kcal FROM foods
WHERE to_tsvector('russian', title) @@ plainto_tsquery('russian', 'Вермут');
БД содержит 522 элемента. Получить все необходимые данные можно здесь.