PostgreSQL

Примеры полнотекстового поиска PostgreSQL

Примеры полнотекстового поиска PostgreSQL
Любая база данных должна иметь эффективные и универсальные возможности поиска. Когда речь идет о базах данных, PostgreSQL - мастер на все руки. Он сочетает в себе все, что вам полюбилось в SQL, с множеством функций баз данных, отличных от SQL. Любая из этих функций, отличных от SQL, например сортировка информации JSONB, великолепна, и вам даже не придется пробовать другую базу данных. Полнотекстовый поиск - одна из новейших функций, отличных от SQL, включенных в PostgreSQL. Полностью ли функционален полнотекстовый поиск PostgreSQL или вам нужен отдельный поисковый индекс?? Если бы вы могли как-то разработать полный текстовый поиск без добавления еще одной оболочки кода, это было бы фантастической идеей. Вы уже знакомы с поиском по шаблону в базе данных MySQL. Итак, давайте сначала посмотрим на них. Откройте оболочку командной строки PostgreSQL в своей компьютерной системе. Напишите название сервера, имя базы данных, номер порта, имя пользователя и пароль для конкретного пользователя, кроме параметров по умолчанию. Если вам нужно усердно работать с соображениями по умолчанию, оставьте все варианты пустыми и нажмите Enter each option. На данный момент ваша оболочка командной строки оснащена для работы с.

Чтобы понять концепцию полнотекстового поиска, вы должны вспомнить информацию о поиске по шаблону с помощью ключевого слова LIKE. Итак, давайте предположим, что таблица 'person' в базе данных 'test' со следующими записями в ней.

>> ВЫБРАТЬ * ОТ человека;

Предположим, вы хотите получить записи этой таблицы, где имя столбца имеет символ i в любом из его значений. Попробуйте выполнить приведенный ниже запрос SELECT при использовании предложения LIKE в командной оболочке. Из вывода ниже видно, что у нас есть только 5 записей для этого конкретного символа «i» в столбце «имя».

>> ВЫБРАТЬ * ОТ человека, ГДЕ имя LIKE '% i%';

Использование ТВсектора:

Иногда бесполезно использовать ключевое слово LIKE для быстрого поиска по шаблону, хотя слово есть. Возможно, вы подумаете об использовании стандартных выражений, и хотя это возможная альтернатива, регулярные выражения одновременно сильны и медлительны. Наличие процедурного вектора для целых слов в тексте, просторечного описания этих слов - гораздо более эффективный способ решения этой проблемы. Концепция полного текстового поиска и тип данных tsvector были созданы для ответа на него. В PostgreSQL есть два метода, которые делают то, что мы хотим:

Пример 01:

Начнем с простой иллюстрации создания вектора. Предположим, вы хотите создать вектор для нити: «У некоторых людей вьющиеся каштановые волосы благодаря правильной расчесывании.”. Таким образом, вы должны написать функцию to_tvsector () вместе с этим предложением в скобках запроса SELECT, как показано ниже. Из выходных данных ниже вы можете видеть, что он даст вектор ссылок (позиции файлов) для каждого токена, а также где термины с небольшим контекстом, такие как статьи (the) и союзы (и, или), намеренно игнорируются.

>> SELECT to_tsvector ('У некоторых людей вьющиеся каштановые волосы благодаря правильной расчесыванию');

Пример 02:

Предположим, у вас есть два документа с некоторыми данными в каждом из них. Для хранения этих данных мы будем использовать реальный пример генерации токенов. Предположим, вы создали таблицу «Данные» в своей базе данных «test» с некоторыми столбцами в ней, используя приведенный ниже запрос CREATE TABLE. Не забудьте создать в нем столбец типа TVSECTOR с именем 'token'. Из вывода ниже вы можете взглянуть на созданную таблицу.

>> СОЗДАТЬ ТАБЛИЧНЫЕ данные (Id SERIAL PRIMARY KEY, info TEXT, token TSVECTOR);

Теперь нам нужно добавить общие данные обоих документов в эту таблицу. Поэтому попробуйте следующую команду INSERT в оболочке командной строки, чтобы сделать это. Наконец, записи из обоих документов были успешно добавлены в таблицу «Данные».

>> INSERT INTO Data (info) VALUES ('Две ошибки никогда не сделают одну правильную.'), (' Он тот, кто может играть в футбол.'), (' Могу я сыграть роль в этом?'), («Невозможно понять боль внутри человека»), («Принеси персик в свою жизнь»;

Теперь вам нужно заполнить столбец токенов обоих документов их конкретным вектором. В конечном итоге простой запрос UPDATE заполнит столбец токенов их соответствующим вектором для каждого файла. Итак, для этого вам необходимо выполнить указанный ниже запрос в командной оболочке. Вывод показывает, что обновление наконец выполнено.

>> Данные ОБНОВЛЕНИЯ f1 SET token = to_tsvector (f1.info) FROM Data f2;

Теперь, когда у нас есть все на месте, давайте вернемся к нашей иллюстрации «можно ли с помощью сканирования». To_tsquery с оператором AND, как было сказано ранее, не делает разницы между местоположениями файлов в файлах, как показано в выходных данных, указанных ниже.

>> SELECT Id, info FROM Data WHERE token @@ to_tsquery ('can & one');

Пример 04:

Чтобы найти слова, которые находятся «рядом» друг с другом, мы попробуем тот же запрос с '<->оператор. Изменение отображается в выводе ниже.

>> SELECT Id, info FROM Data WHERE token @@ to_tsquery ('может <-> один');

Вот пример, когда рядом с другим словом нет.

>> SELECT Id, info FROM Data WHERE token @@ to_tsquery ('one <-> боль');

Пример 05:

Мы найдем слова, которые не находятся рядом друг с другом, используя число в операторе расстояния, чтобы указать расстояние. Близость между "принести" и "жизнь" находится на 4 слова от отображаемого изображения.

>> SELECT * FROM Data WHERE token @@ to_tsquery ('привести <4> жизнь');

Чтобы проверить близость между словами для почти 5 слов, добавлено ниже.

>> SELECT * FROM Data WHERE token @@ to_tsquery ('неверно <5> верно');

Заключение:

Наконец, вы выполнили все простые и сложные примеры полнотекстового поиска с использованием операторов и функций To_tvsector и to_tsquery.

SuperTuxKart для Linux
SuperTuxKart - отличная игра, созданная для того, чтобы бесплатно познакомить вас с Mario Kart в вашей системе Linux. Играть в нее довольно сложно и в...
Учебник Battle for Wesnoth
Битва за Веснот - одна из самых популярных стратегических игр с открытым исходным кодом, в которую вы можете играть сейчас. Эта игра не только очень д...
0 А.D. Руководство
Из множества существующих стратегических игр 0 A.D. удается выделиться как всеобъемлющее название и очень глубокая тактическая игра, несмотря на то, ч...