Przykłady wyszukiwania pełnotekstowego PostgreSQL

Przykłady wyszukiwania pełnotekstowego PostgreSQL
Każda baza danych powinna mieć skuteczną i wszechstronną możliwości wyszukiwania. Ilekroć odnosi się do baz danych, PostgreSQL jest mistrzem wszystkich rzemiosła. Łączy wszystkie rzeczy, które pokochałeś z SQL z mnóstwem funkcji bazy danych innych niż SQL. Każda z tych funkcji innych niż SQL, takich jak informacja JSONB, jest fantastyczna i nie będziesz musiał próbować innej bazy danych. Wyszukiwanie pełnotekstowe jest jednym z najnowszych funkcji innych niż SQL zawartych w PostgreSQL. Czy wyszukiwanie kompletnego tekstu Postgresql jest całkowicie funkcjonalne, czy też chciałbyś odrębny indeks wyszukiwania? Jeśli możesz w jakiś sposób opracować pełne wyszukiwanie tekstu pozbawione dodania jeszcze jednej okładki kodu, byłby to fantastyczny pomysł. Jesteś już zaznajomiony z wyszukiwaniem wzorów w bazie danych MySQL. Więc najpierw spójrzmy na nich. Otwórz powłokę linii polecenia PostgreSQL w systemie komputerowym. Napisz tytuł serwera, nazwę bazy danych, numer portu, nazwę użytkownika i hasło dla określonego użytkownika inne niż opcje domyślne. Jeśli chcesz przesyłać z domyślnymi rozważaniami, pozostaw wszystkich wyborów puste i naciśnij Wprowadź każdą opcję. W tej chwili twoja powłoka wiersza poleceń jest przygotowana do pracy.

Aby zrozumieć koncepcję wyszukiwania pełnotekstowego, musisz przypomnieć sobie wiedzę wyszukiwania wzorów za pomocą słowa kluczowego podobnego. Załóżmy więc tabelę „osobę” w bazie danych „Test” z następującymi zapisami.

>> Wybierz * od osoby;

Załóżmy, że chcesz pobrać rekordy tej tabeli, w której kolumna „nazwa” ma postać „i” w dowolnej jej wartości. Wypróbuj poniższe zapytanie Wybierz podczas korzystania z klauzuli podobnej w skorupce poleceń. Z wyników poniżej widać, że mamy tylko 5 rekordów dla tego konkretnego znaku „I” w kolumnie „Nazwa”.

>> Wybierz * Od osoby, w której nazwa „%i%”;

Korzystanie z TVSector:

Czasami nie ma sensu używać podobnego słowa kluczowego do szybkiego wyszukiwania wzorów, chociaż słowo tam jest. Może rozważałbyś użycie standardowych wyrażeń i chociaż jest to wykonalna alternatywa, wyrażenia regularne są zarówno silne, jak i powolne. Posiadanie wektora proceduralnego dla całych słów w tekście, w języku narodowym opisie tych słów, jest znacznie bardziej wydajnym sposobem rozwiązania tego problemu. Koncepcja pełnego wyszukiwania tekstu i TSVector typu danych został utworzony, aby na nie odpowiedzieć. Istnieją dwie metody w PostgreSQL, które robią dokładnie to, czego chcemy:

  • To_tvsector: Służy do tworzenia listy tokenów (TS oznacza „wyszukiwanie tekstu”).
  • To_tsQuery: Służy do wyszukiwania wektora pod kątem przypadków określonych terminów lub zwrotów.

Przykład 01:

Zacznijmy od prostej ilustracji tworzenia wektora. Załóżmy, że chcesz stworzyć wektor sznurka: „Niektórzy ludzie mają kręcone brązowe włosy dzięki odpowiedniemu szczotkowaniu.". Musisz więc napisać funkcję to_tvsector () wraz z tym zdaniem w nawiasach wybranego zapytania zgodnie z dodatkiem poniżej. Na podstawie wyników poniżej widać, że dałby wektor referencji (pozycje plików) dla każdego tokena, a także w przypadku niewielkiego kontekstu, podobnie jak artykuły () i koniunkcjonami (i lub), są celowo ignorowane.

>> Wybierz to_tsvector („Niektórzy ludzie mają kręcone brązowe włosy poprzez prawidłowe szczotkowanie”);

Przykład 02:

Załóżmy, że masz dwa dokumenty z pewnymi danymi w obu z nich. Aby przechowywać te dane, teraz będziemy używać prawdziwego przykładu generowania tokenów. Załóżmy, że utworzyłeś tabelę „Dane” w swojej bazie danych „Test” z niektórymi kolumnami za pomocą poniższego zapytania Tabela. Nie zapomnij utworzyć w nim kolumny typu TVSector o nazwie „Token”. Na podstawie wyjścia poniżej możesz spojrzeć na utworzoną tabelę.

>> Utwórz dane tabeli (ID szeregowy klucz podstawowy, tekst informacyjny, token tsvector);

Teraz zwraca się do nas, aby dodać ogólne dane obu dokumentów w tej tabeli. Więc wypróbuj poniższe polecenie wstaw w swojej powłoce wiersza polecenia, aby to zrobić. Wreszcie rekordy obu dokumentów zostały pomyślnie dodane do tabeli „Dane”.

>> Wstaw do wartości danych (Info) („Dwa krzywdy nigdy nie mogą zrobić jednego.') („On może grać w piłkę nożną.') („Czy mogę w tym zagrać rolę?„) („ Ból w jednym nie można zrozumieć ”), („ Przynieś brzoskwinię w swoim życiu);

Teraz musisz kolonizować kolumnę tokena obu dokumentów za pomocą ich konkretnego wektora. Ostatecznie proste zapytanie o aktualizację wypełni kolumnę tokenów przez odpowiedni wektor dla każdego pliku. Więc musisz wykonać podane poniżej zapytanie w skorupce poleceń, aby to zrobić. Dane wyjściowe pokazuje, że aktualizacja została ostatecznie dokonana.

>> Zaktualizuj dane F1 Ustaw token = to_tsvector (F1.informacje) z danych F2;

Teraz, gdy mamy wszystko na miejscu, wróćmy do naszej ilustracji „Can One” ze skanowaniem. Do to_tsquery z i operatorem, jak wcześniej powiedziano, nie ma znaczenia między lokalizacjami plików w plikach, jak pokazano na podstawie wyświetlanego poniżej.

>> Wybierz identyfikator, informacje z danych gdzie token @@ to_tsquery („can & one”);

Przykład 04:

Aby znaleźć słowa, które są „obok”, spróbujemy tego samego zapytania z operatorem „. Zmiana jest wyświetlana na poniższym wyjściu.

>> Wybierz identyfikator, informacje z danych, gdzie token @@ to_tsquery („can One”);

Oto przykład braku natychmiastowego słowa obok innego.

>> Wybierz identyfikator, informacje z danych gdzie token @@ to_tsquery („jeden ból”);

Przykład 05:

Znajdziemy słowa, które nie są bezpośrednio obok siebie, używając liczby w operatorze odległości do odległości odniesienia. Bliskość między „przyniesieniem” i „życie to 4 słowa oprócz wyświetlonego obrazu.

>> Wybierz * Z danych gdzie token @@ to_tsquery („przynieś życie”);

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

>> Wybierz * Z danych gdzie token @@ to_tsquery („niewłaściwe right”);

Wniosek:

Na koniec wykonałeś wszystkie proste i skomplikowane przykłady wyszukiwania w pełnym teście za pomocą operatorów i funkcji to_tvsector i.