PostgreSQL надає можливість використовувати повнотекстовий пошук для ефективного пошуку текстової інформації у базі даних. Використовуючи повнотекстовий пошук, ви можете шукати не лише за точними співпадіннями слів, але і знаходити близькі слова, враховуючи їхню схожість.
Ось кілька етапів, як використовувати повнотекстовий пошук в PostgreSQL:
Перед використанням повнотекстового пошуку слід створити спеціальний індекс. Це можна зробити за допомогою команди CREATE INDEX
зі спеціальним типом індексу tsvector
:
CREATE INDEX idx_name ON your_table USING gin(to_tsvector(’english’, your_text_column));
Замініть your_table
і your_text_column
на відповідні значення.Тепер ви можете використовувати функцію to_tsvector
для перетворення текстового поля у відповідний формат та функцію tsquery
для пошуку:
SELECT * FROM your_table WHERE to_tsvector(’english’, your_text_column) @@ to_tsquery(’english’, ’search_query’);
Замініть your_table
, your_text_column
і 'search_query'
на відповідні значення. У цьому запиті @@
- це оператор повнотекстового пошуку.
PostgreSQL також надає деякі вбудовані функції для спрощення повнотекстового пошуку. Наприклад, ви можете використовувати tsquery
напряму без використання to_tsvector
:
SELECT * FROM your_table WHERE your_text_column @@ to_tsquery(’english’, ’search_query’);
Це простіший синтаксис, але використовується за підтримки індексу, який ви створили.
Це базовий приклад використання повнотекстового пошуку в PostgreSQL. Залежно від ваших потреб, ви можете докладніше налаштувати повнотекстовий пошук, додавши, наприклад, розширення для роботи із синонімами, іншими мовами тощо.
Для використання повнотекстового пошуку для української мови в PostgreSQL, ви повинні скористатися відповідними налаштуваннями та словниками. Ось кілька етапів для налаштування повнотекстового пошуку для української мови:
Встановіть розширення unaccent
для підтримки акцентів в українському тексті:
CREATE EXTENSION IF NOT EXISTS unaccent;
Створіть словник для української мови:
CREATE TEXT SEARCH DICTIONARY ukrainian_ispell (
TEMPLATE = ispell,
DictFile = uk_UA,
AffFile = uk_UA,
StopWords = uk_UA
);
Зверніть увагу на те, що в прикладі використовуються словники uk_UA
, які містять слова для стемінгу та інших мовних опцій.
Створіть конфігурацію, яка включає словник для української мови:
CREATE TEXT SEARCH CONFIGURATION ukrainian (COPY = pg_catalog.simple);
ALTER TEXT SEARCH CONFIGURATION ukrainian
ALTER MAPPING FOR hword, hword_part, word
WITH ukrainian_ispell, english_stem;
Тут english_stem
використовується як додатковий словник для підтримки стемінгу англійських слів.
Створіть індекс, використовуючи раніше створені налаштування:
CREATE INDEX idx_name ON your_table USING gin(to_tsvector(’ukrainian’, your_text_column));
Знову, замініть your_table
і your_text_column
на ваші власні значення.
Використовуйте повнотекстовий пошук у своїх запитах:
SELECT * FROM your_table WHERE to_tsvector(’ukrainian’, your_text_column) @@ to_tsquery(’ukrainian’, ’пошуковий_запит’);
Або без використання to_tsvector
:
SELECT * FROM your_table WHERE your_text_column @@ to_tsquery(’ukrainian’, ’пошуковий_запит’);
Застосовуючи ці налаштування, ви можете використовувати повнотекстовий пошук для української мови у своїх PostgreSQL запитах.
Автор: Рудюк С.А. 2023. K2 Cloud ERP.