Таблица продуктов

1 минута чтения

Прикладываю наработки по 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 элемента. Получить все необходимые данные можно здесь.

Добавить комментарий