Новости‎ > ‎

Foods table

Отправлено 30 мая 2020 г., 06:25 пользователем Deni Baskovsky   [ обновлено 30 мая 2020 г., 06:26 ]
Прикладываю наработки по 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 элемента. Получить все необходимые данные можно на gist.
Comments