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:
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.