Mohammad Jawad Barati
Mohammad Jawad Barati
خواندن ۱ دقیقه·۴ سال پیش

تست full text search با دیتاست های دیجی کالا

قبلش پست های دیگه منو در مورد full text search و ایندکس گذاری در PostgreSQL بخونید.

قبل از همه از اینجا دیتاست محصولاتش (که اسم فایلش 5-awte8wbd هست) رو دانلود کنید. مرحله بعد ایجاد یه دیتابیس PostgreSQL ای توی داکر هست. حالا بیاید دیتابیس رو ایجاد بکنید و بعدش کوئری زیر رو اجرا کنید:

create table products ( id bigint primary key, product_title_fa varchar(255), product_title_en varchar(255), url_code varchar(255), title_alt varchar(255), category_title_fa varchar(255), category_keywords varchar(255), brand_name_fa varchar(255), brand_name_en varchar(255), product_attributes varchar(5500) );

بعدش با دستور docker cp فایل رو توی کانتینر بزارید و بعدش کوئری زیر رو اجرا کنید:

COPY products FROM '/tmp/5-awte8wbd.csv' WITH CSV HEADER;

مرحله بعد افزودن ستون جدید هست:

alter table products add column __search tsvector;

حالا میایم اون ستون رو مقدار دهی می کنیم:

update products p set __search = to_tsvector(p.product_title_fa);

بعدش ستون جدید رو ایندکس گذاری با متد GIN ایندکس گذاری می کنیم.

create index idx_products__search on products using GIN(__search);

حالا بیاید این دو تا کوئری رو با هم مقایسه بکنیم:

explain analyse select count (*) from products where __search @@ to_tsquery('سرمه');

نتیجه اینه:

کوئری دوم اینه:

explain analyse select count (*) from products where product_title_fa like '%سرمه%';

نتیجه اینه:

یه چیزی در حدود ۵۰ برابر سریعتر شد اجرای کوئری!


رفرنس ۱


node jspostgresqlindexingdigikaladataset
برنانه نویس، مدرس، محقق. عاشق انیمه هستم و دنبال چالش ها جدید.
شاید از این پست‌ها خوشتان بیاید