Pre-loader

/ K2 Cloud ERP for Python / Адміністраторам / Підтримка баз даних. / Postgresql. / Повнотекстовий пошук в Postgresql

Повнотекстовий пошук в Postgresql

PostgreSQL надає можливість використовувати повнотекстовий пошук для ефективного пошуку текстової інформації у базі даних. Використовуючи повнотекстовий пошук, ви можете шукати не лише за точними співпадіннями слів, але і знаходити близькі слова, враховуючи їхню схожість.

Ось кілька етапів, як використовувати повнотекстовий пошук в PostgreSQL:

  1. Створення індексу:

    Перед використанням повнотекстового пошуку слід створити спеціальний індекс. Це можна зробити за допомогою команди CREATE INDEX зі спеціальним типом індексу tsvector:

    CREATE INDEX idx_name ON your_table USING gin(to_tsvector(’english’, your_text_column));
    
    Замініть your_table і your_text_column на відповідні значення.
     
  2. Використання повнотекстового пошуку:

    Тепер ви можете використовувати функцію 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' на відповідні значення. У цьому запиті @@ - це оператор повнотекстового пошуку.

  3. Використання вбудованих функцій:

    PostgreSQL також надає деякі вбудовані функції для спрощення повнотекстового пошуку. Наприклад, ви можете використовувати tsquery напряму без використання to_tsvector:

    SELECT * FROM your_table WHERE your_text_column @@ to_tsquery(’english’, ’search_query’);
    

Це простіший синтаксис, але використовується за підтримки індексу, який ви створили.

Це базовий приклад використання повнотекстового пошуку в PostgreSQL. Залежно від ваших потреб, ви можете докладніше налаштувати повнотекстовий пошук, додавши, наприклад, розширення для роботи із синонімами, іншими мовами тощо.

Повтонекстовий пошук в Postgresql для української мови

Для використання повнотекстового пошуку для української мови в PostgreSQL, ви повинні скористатися відповідними налаштуваннями та словниками. Ось кілька етапів для налаштування повнотекстового пошуку для української мови:

  1. Встановлення розширення:

    Встановіть розширення unaccent для підтримки акцентів в українському тексті:

    CREATE EXTENSION IF NOT EXISTS unaccent;
    

  2. Створення словника:

    Створіть словник для української мови:

    CREATE TEXT SEARCH DICTIONARY ukrainian_ispell (
        TEMPLATE = ispell,
        DictFile = uk_UA,
        AffFile = uk_UA,
        StopWords = uk_UA
    );
    

    Зверніть увагу на те, що в прикладі використовуються словники uk_UA, які містять слова для стемінгу та інших мовних опцій.
     

  3. Створення конфігурації повнотекстового пошуку:

    Створіть конфігурацію, яка включає словник для української мови:

    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 використовується як додатковий словник для підтримки стемінгу англійських слів.
     

  4. Створення індексу:

    Створіть індекс, використовуючи раніше створені налаштування:

    CREATE INDEX idx_name ON your_table USING gin(to_tsvector(’ukrainian’, your_text_column));
    

    Знову, замініть your_table і your_text_column на ваші власні значення.
     

  5. Використання повнотекстового пошуку:

    Використовуйте повнотекстовий пошук у своїх запитах:

    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.