SCRIPT-task-009-pglite-russian-snowball-stemming-probe-names-and-nouns.mjs
// Проба русского стемминга Snowball на временной базе PGLite в памяти (задача 009, 02.11.2026).
// Рабочую базу gbrain не открывает. Запуск: cd в папку с @electric-sql/pglite из пакета gbrain и: bun run <этот файл>.
import { PGlite } from '/Users/ws/.bun/install/global/node_modules/@electric-sql/pglite/dist/index.js';
const db = await PGlite.create(); // in-memory, ephemeral
const q = async (s) => { try { const r = await db.query(s); console.log(s, '=>', JSON.stringify(r.rows)); } catch (e) { console.log(s, 'ERR', e.message); } };
await q(`select cfgname from pg_ts_config order by 1`);
await q(`select to_tsvector('russian','Михаил Михаила Михаилу Михаилом') as v`);
await q(`select to_tsvector('russian','квартира квартиры квартиру квартирой агентство агентства агентству') as v`);
await q(`select to_tsvector('russian','переговоры переговорах договорились Грасия Эшампле') as v`);
await q(`select to_tsvector('english','Михаил Михаилу квартиру') as v`);
await q(`select to_tsvector('simple','Михаил Михаилу') as v`);
await q(`select ts_lexize('russian_stem','михаил'), ts_lexize('russian_stem','михаилу'), ts_lexize('russian_stem','ольга'), ts_lexize('russian_stem','ольге')`);
await q(`select websearch_to_tsquery('russian','Михаилу квартиру') @@ to_tsvector('russian','Михаил показал квартиры') as m`);
await q(`create extension if not exists unaccent`);
await q(`create text search dictionary ru_h (template=ispell, dictfile=russian, afffile=russian)`);
await q(`create text search configuration ru2 (copy = russian)`);
await db.close();