Полнотекстовый поиск - это метод поиска отдельного документа или коллекции в полнотекстовой базе данных. Полнотекстовый поиск отличается от поиска, основанного на метаданных или на частях оригинальных текстов, представленных в базах данных (таких как заголовки, аннотации, выбранные разделы или библиографические ссылки) .

Введение

Рассмотрим базу данных, которая состоит из набора документов, содержащих статью, абзац (текстовые данные). Для поиска определенного документа в такой базе данных можно использовать оператор LIKE для поиска по слову. Но в таких случаях запрос не возвращает документ, содержащий другие формы того же слова.

Пример: запрос, который ищет документы, содержащие слово "жареный". Если есть документы, которые содержат слово «жареный», запрос не сможет получить такие документы. Для такого сложного поиска используется полнотекстовый поиск PostgreSQL.

Полнотекстовый поиск PostgreSQL поможет вам реализовать функцию поиска в вашем приложении без установки или изучения какого-либо нового программного обеспечения. Текстовый поиск существует в базе данных много лет. В PostgreSQL есть операторы LIKE, ILIKE, ~ * ~ для сопоставления текстовых типов данных, но их недостаточно для современной информационной системы, потому что они не оптимальны для больших баз данных.

Давайте начнем учебник для полнотекстового поиска в PostgreSQL

  1. Создайте базу данных
CREATE TABLE book (
book_id SERIAL PRIMARY KEY,
title TEXT NOT NULL,
description TEXT NOT NULL,
author TEXT NOT NULL,
vector tsvector NOT NULL
)

tsvector

to_tsvector используется для создания списка токенов. ts - это тип данных в PostgreSQL, где ts означает текстовый поиск.

Пример.

SELECT to_tsvector(‘computer is an electronic device for storing and processing data, typically in binary form, according to instructions given to it in a variable program’);

Вывод.

“‘accord’:14 ‘binari’:12 ‘comput’:1 ‘data’:9 ‘devic’:4 ‘electron’:3 ‘form’:13 ‘given’:17 ‘instruct’:16 ‘process’:8 ‘program’:23 ‘store’:6 ‘typic’:10 ‘variabl’:22”

2. Вставить данные в базу данных

INSERT INTO book
(title, description, author, vector)
VALUES
(‘Percy Jackson and the Olympians’,
‘The Sea of Monsters is an American fantasy-adventure novel based on Greek mythology, Magical hidden world.’,
‘Rick Riordan’,
(to_tsvector(‘Percy Jackson and the Olympians’) || to_tsvector(‘The Sea of Monsters is an American fantasy-adventure novel based on Greek mythology, Magical hidden world.’) || to_tsvector(‘Rick Riordan’)));

После вставки нескольких записей

Повысьте эффективность поиска.

Чтобы повысить производительность поиска, мы можем добавить индекс в столбец, в котором хранятся векторы. Есть два способа создания индексов: GiST, который хранит данные быстро, но поиск идет медленно, тогда как GIN хранит данные относительно медленно, но поиск выполняется быстрее. GIN предпочтительнее в случае, когда данные требуют интенсивного чтения.

CREATE INDEX index_on_vector ON book USING gin(vector);

3. Поиск записей.

tsquery: -

Он используется для запроса вектора на наличие определенных слов или словосочетаний. Он принимает список слов, которые можно проверить, созданных с помощью tsvector.

Пример (1).

SELECT to_tsvector(‘computer is an electronic device for storing and processing data, typically in binary form, according to instructions given to it in a variable program’)@@ to_tsquery(programming);

Вывод.

?column?
— — — — —
True

Пример (2).

SELECT to_tsvector(‘computer is electronic device for storing and processing data, typically in binary form, according to instructions given to it in a variable program’)@@ to_tsquery(‘election’);

Вывод.

?column?
— — — — — —
false

Поиск «волшебного» ключевого слова в базе данных.

SELECT title,description,author FROM book WHERE vector @@ to_tsquery('magic');

Вот как мы можем использовать полнотекстовый поиск в PostgreSQL.

Полнотекстовый поиск в PostgreSQL - мощная функция. PostgreSQL определенно был бы простым способом реализовать решение для полнотекстового поиска и поиска по фразам для создания вашей следующей поисковой системы.

см. также