PostgreSQL

Przykłady wyszukiwania pełnotekstowego w PostgreSQL

Przykłady wyszukiwania pełnotekstowego w PostgreSQL
Każda baza danych powinna mieć efektywne i wszechstronne możliwości wyszukiwania. Kiedykolwiek odnosi się do baz danych, PostgreSQL jest mistrzem wszystkich rzemiosł. Łączy w sobie wszystkie rzeczy, które pokochałeś w SQL z mnóstwem funkcji baz danych innych niż SQL. Każda z tych funkcji innych niż SQL, takich jak sortowanie informacji JSONB, jest fantastyczna i nie trzeba nawet próbować innej bazy danych. Wyszukiwanie pełnotekstowe jest jedną z najnowszych funkcji innych niż SQL wbudowanych w PostgreSQL. Czy wyszukiwanie pełnotekstowe PostgreSQL jest w pełni funkcjonalne, czy też potrzebujesz odrębnego indeksu wyszukiwania?? Gdybyś mógł w jakiś sposób opracować kompletne wyszukiwanie tekstowe bez dodawania jeszcze jednej okładki kodu, byłby to fantastyczny pomysł. Znasz już wyszukiwanie wzorców w bazie danych MySQL. Przyjrzyjmy się więc najpierw im. Otwórz powłokę wiersza poleceń PostgreSQL w swoim systemie komputerowym. Wpisz tytuł serwera, nazwę bazy danych, numer portu, nazwę użytkownika i hasło dla konkretnego użytkownika inne niż opcje domyślne default. Jeśli chcesz przejść z domyślnymi rozważaniami, pozostaw wszystkie opcje puste i naciśnij Enter dla każdej opcji. W tej chwili Twoja powłoka wiersza poleceń jest przygotowana do pracy.

Aby zrozumieć pojęcie wyszukiwania pełnotekstowego, musisz przypomnieć sobie wiedzę o wyszukiwaniu wzorców za pomocą słowa kluczowego LIKE. Załóżmy więc, że w bazie danych „test” znajduje się tabela „osoba” z następującymi rekordami.

>> WYBIERZ * OD osoby;

Załóżmy, że chcesz pobrać rekordy tej tabeli, w której kolumna 'nazwa' ma w dowolnej wartości znak 'i'. Wypróbuj poniższe zapytanie SELECT, używając klauzuli LIKE w powłoce poleceń. Z poniższego wyniku widać, że mamy tylko 5 rekordów dla tego konkretnego znaku' i' w kolumnie 'name'.

>> SELECT * FROM osoba GDZIE nazwa LIKE '%i%';

Korzystanie z Tvsector:

Czasami nie ma sensu używać słowa kluczowego LIKE do szybkiego wyszukiwania wzorców, chociaż to słowo istnieje. Być może rozważysz użycie wyrażeń standardowych i chociaż jest to realna alternatywa, wyrażenia regularne są zarówno silne, jak i powolne. Posiadanie wektora proceduralnego dla całych słów w tekście, opis tych słów w języku narodowym, jest znacznie skuteczniejszym sposobem rozwiązania tego problemu. Koncepcja wyszukiwania pełnotekstowego i typu danych tsvector została stworzona, aby na nią odpowiedzieć. W PostgreSQL są dwie metody, które robią dokładnie to, czego chcemy:

Przykład 01:

Zacznijmy od prostej ilustracji tworzenia wektora. Załóżmy, że chcesz stworzyć wektor dla łańcucha: „Niektórzy ludzie mają kręcone brązowe włosy po odpowiednim szczotkowaniu.”. Musisz więc napisać funkcję to_tvsector() wraz z tym zdaniem w nawiasach zapytania SELECT, jak dołączono poniżej. Z poniższych danych wyjściowych widać, że dałoby to wektor odniesień (pozycje w pliku) dla każdego tokena, a także w przypadku, gdy terminy bez kontekstu, takie jak przedimki (the) i spójniki (i, lub) są celowo ignorowane.

>> SELECT to_tsvector('Niektórzy ludzie mają kręcone brązowe włosy dzięki właściwemu szczotkowaniu');

Przykład 02:

Załóżmy, że masz dwa dokumenty z pewnymi danymi w obu. Do przechowywania tych danych posłużymy się teraz prawdziwym przykładem generowania tokenów. Załóżmy, że utworzyłeś tabelę „Dane” w bazie danych „test” z kilkoma kolumnami za pomocą poniższego zapytania CREATE TABLE. Nie zapomnij utworzyć w niej kolumny typu TVSECTOR o nazwie 'token'. Z poniższych danych wyjściowych możesz spojrzeć na utworzoną tabelę.

>> CREATE TABLE Dane (Id SERIAL PRIMARY KEY, info TEXT, token TSVECTOR);

Teraz okazuje się, że dodamy ogólne dane obu dokumentów w tej tabeli. Więc wypróbuj poniższe polecenie INSERT w powłoce wiersza poleceń, aby to zrobić. Ostatecznie rekordy z obu dokumentów zostały pomyślnie dodane do tabeli „Dane”.

>> INSERT INTO Data (info) VALUES ('Dwa zło nigdy nie naprawią jednego dobrego).'), ('To ten, który może grać w piłkę nożną.'), ('Czy mogę wziąć w tym udział??'), ('Bólu wewnętrznego nie można zrozumieć'), ('Przynieś brzoskwinię do swojego życia);

Teraz musisz skolonizować kolumnę tokenów obu dokumentów z ich określonym wektorem. Ostatecznie proste zapytanie UPDATE wypełni kolumnę tokenów odpowiadającym im wektorem dla każdego pliku. Aby to zrobić, musisz wykonać poniższe zapytanie w powłoce poleceń. Dane wyjściowe pokazują, że aktualizacja została w końcu wykonana.

>> AKTUALIZUJ dane f1 SET token = to_tsvector(f1.info) Z Dane f2;

Teraz, gdy już wszystko mamy na miejscu, wróćmy do naszej ilustracji „puszki” ze skanem. To_tsquery z operatorem AND, jak wspomniano wcześniej, nie ma różnicy między lokalizacjami plików w plikach, jak pokazano na podstawie danych wyjściowych podanych poniżej.

>> SELECT Id, info FROM Data WHERE token @@ to_tsquery('może i jeden');

Przykład 04:

Aby znaleźć słowa, które są „obok” siebie, wypróbujemy to samo zapytanie z '<->„operator”. Zmiana jest wyświetlana na poniższym wyjściu.

>> SELECT Id, info FROM Data WHERE token @@ to_tsquery('can <-> jeden');

Oto przykład braku bezpośredniego słowa obok drugiego.

>> SELECT Id, info FROM Data WHERE token @@ to_tsquery('jeden <-> ból');

Przykład 05:

Znajdziemy słowa, które nie znajdują się bezpośrednio obok siebie, używając liczby w operatorze odległości do odniesienia odległości. Bliskość między „przynieść” a „życie to 4 słowa poza wyświetlanym obrazem”.

>> SELECT * FROM Data WHERE token @@ to_tsquery('przynieś <4> życie');

Aby sprawdzić bliskość między słowami dla prawie 5 słów, dołączono poniżej.

>> SELECT * FROM Data WHERE token @@ to_tsquery('zły <5> dobrze');

Wniosek:

Na koniec wykonałeś wszystkie proste i skomplikowane przykłady wyszukiwania pełnotekstowego przy użyciu operatorów i funkcji To_tvsector i to_tsquery.

AppyMouse On-screen Trackpad and Mouse Pointer for Windows Tablets
Tablet users often miss the mouse pointer, especially when they are habitual to using the laptops. The touchscreen Smartphones and tablets come with m...
Middle mouse button not working in Windows 10
The middle mouse button helps you scroll through long webpages and screens with a lot of data. If that stops, well you will end up using the keyboard ...
How to change Left & Right mouse buttons on Windows 10 PC
It's quite a norm that all computer mouse devices are ergonomically designed for right-handed users. But there are mouse devices available which are s...