Postgresql Fuzzy Search

Postgresql Fuzzy Search
Rozmyte słowo prowadzi do częściowego lub niejasnego. To wyszukiwanie dotyczy wyniku, który nie widzi dokładnego lub doskonałego wyszukiwania. Rozmyte wyszukiwanie danych w PostgreSQL zawiera różne podejścia. Albo poprzez rozszerzenia lub algorytmy. Ale zjawisko jest stosowane na oba sposoby. Ten artykuł będzie zawierał wszystkie możliwe metody zademonstrowania pracy i wdrażania rozmytego wyszukiwania w danych PostgreSQL.

Wdrożenie rozmytego wyszukiwania

Aby zrozumieć koncepcję rozmytego wyszukiwania, musimy utworzyć tabelę. Tutaj tworzono tabelę o imieniu malarz z kolumnami id, imieniem, narodowością, płcią i narodzinami. Każda kolumna zawiera odpowiednio swoje typy danych:

>> Utwórz malarz tabeli (Id int, Name Varchar, Nationality Varchar, płeć Varchar, Birth_year int);

Po utworzeniu tabeli nadszedł czas, aby przekazać dane w rzędach relacji, aby uczynić je w stanie funkcjonalnym. Instrukcja Wstaw służy do dodania wartości w tabeli:

>> Wstaw do malarza (id, imię, narodowość, płeć, narodziny_year) wartości (1, „John”, „American”, „Male”, „2002”), (2, „Robert”, „British”, „Male” „,„ 1990 ”), (3,„ Rosee ”,„ American ”,„ Kobieta ”,„ 2000 ”), (4,„ Shomia ”,„ niemiecki ”,„ żeńska, „1982”);

Wszystkie dane zostaną wprowadzone, jak pokazano w komunikacie, że 4 wiersze są wprowadzane w tabeli.

Wprowadzone dane można wyświetlić za pomocą instrukcji SELECT używanej do pobrania wszystkich wierszy i kolumn odpowiedniej tabeli:

>> Wybierz * od malarza;

Wszystkie dane zostały wyświetlone. Jak wiecie, rozmyte wyszukiwanie jest tym, które powoduje częściowe dopasowanie i zapewnia wynik najbliższy. Więc spróbujemy każdego przykładu rozmytego wyszukiwania.

Przykład 1: Przeszukiwanie filtra wieloznacznego

W tym przykładzie będziemy pobierać rekord z tabeli, stosując warunek na kolumnie nazwy. Na każde kolumnę może mieć wpływ rozmyte wyszukiwanie. Ta sytuacja może wystąpić, gdy znasz początek nazwy, ale nie jesteś pewien zakończenia, więc używamy tego operatora „%” na końcu nazwy. To nazywa się filtrem wieloznacznym. Ten symbol może być dla dowolnej postaci. Dlatego odfiltrujemy wyniki, w których nazwa powinna zacząć od „Rob”. Zapytanie zawiera instrukcję SELECT, aby pobrać pasujący wiersz nazwy. Przede wszystkim przy zastosowaniu dowolnego warunku po klauzuli Where, używamy równego symbolu „=”. Ale, ponieważ nie jesteśmy pewni wyników, użyjemy „Like” zamiast tego „=„ Symbol:

>> Wybierz * od malarza, gdzie nazwa „Rob%”;

Wynikowa wartość pokazuje, że otrzymano pojedynczy wiersz. To pasuje do nazwy. Podobnie użyjemy operatora „%” na obu końcach. Tak więc filtr będzie szukał nazwy malarza, którego nazwa może rozpocząć się lub zakończyć z dowolną kombinacją znaków:

>> Wybierz * od malarza, gdzie nazwa „%h%”;

To polecenie ma dwa rzędy posiadające alfabet „H” w centrum. W ten sposób widać, że dopasowanie rozmytego ciągów działa w PostgreSQL.

Przykład 2:

Korzystając z tej samej koncepcji, jeśli słowo używaliśmy jako wejścia „ro”, „B”, zostanie usunięte, zobaczysz, że te wiersze zostaną pobrane, których nazwa zaczyna się od RO:

>> Wybierz * od malarza, gdzie nazwa „ro%”;

Dlatego widać, że wybrane są dwa wiersze. Aby ponownie odfiltrować wyniki, możemy użyć tego operatora na dwa sposoby, stosując go w dwóch kolumnach. Na przykład nazwa, która zaczyna się od tego samego słowa „ro%”, zostanie przeszukana, ale kolumna narodowości zostanie zastosowana z filtrem wiersza, zaczynając od nazwy narodowości „A%”.

>> Wybierz * od malarza, gdzie nazwa „ro%” i narodowość jak „A%”;

Zatem pojedynczy wiersz zostanie wybrany według stanu.

Przykład 3: Wyszukiwanie za pomocą trygramów

PostgreSQL ma pomocne rozszerzenie, które służy do włączenia rozszerzenia PG_TRGM. To rozszerzenie służy do wprowadzenia niektórych funkcji rozmytego wyszukiwania ciągów. Trigramy powstają, gdy ciąg jest podzielony na grupę trzech liter kolejno. Najpierw musimy zainstalować rozszerzenie w PostgreSQL. Ponieważ bez włączania rozszerzenia nie możemy zastosować rozmytego wyszukiwania na różne sposoby:

>> Utwórz rozszerzenie PG_TRGM;

Rozszerzenie jest dodawane do bazy danych. Teraz zastosujemy niektóre polecenia używane zgodnie z zainstalowanymi rozszerzeniami. W tego rodzaju wyszukiwaniu używamy słowa kluczowego „podobieństwa” do wyszukiwania najbliższego możliwego dopasowania, zapewniając prawdopodobieństwo zakresu, który pokazuje, jak podobne są ciągi w skali między 0 a 1. W poniższym przykładzie przeszukamy z tabeli, stosując klauzulę o podobieństwie, takim jak „Johr”, więc czwarta litera w słowie jest zmieniona. Wyszukiwanie będzie zgodnie z błędnymi literami:

>> Wybierz * od malarza, gdzie podobieństwo (nazwa, „johr”)> 0.4;

Wynik będzie zawierał wiersz z nazwą kolumny podobną do Johna, który jest John.

Teraz zastosujemy koncepcję podobieństwa do kolumny narodowości w wierszach zawierających „i” w ciągu obecnych w danych PostgreSQL. Wynik będzie ograniczony do 2 wierszy:

>> Wybierz * Z porządku malarza według podobieństwa (narodowość, „i”) limit 2;

Wynikowy będzie zawierał tylko dwa wiersze, ponieważ zastosowaliśmy limit. Więc te rzędy posiadające narodowość zawierania w nich „i” zostaną wyświetlone.

Przykład 4: Wyszukiwanie przez algorytmy fonetyczne

Innym sposobem wyszukiwania jest użycie algorytmów fonetycznych. Algorytmy te używają reguł używanych do reprezentowania ciągu za pomocą skrótu. W tym celu PostgreSQL używa rozszerzenia do zainstalowania, abyśmy mogli włączyć działanie wyszukiwania. To rozszerzenie jest rozmytym mecherem sznurkowym:

>> Utwórz rozszerzenie FuzzYstRMatch;

Po zainstalowaniu rozszerzenia użyjemy dowolnej funkcji rozszerzenia. Na przykład użyjemy funkcji znanej jako metafone.

Metafone: Ten algorytm służy do zwracania kodu o różnych długościach. To jest jak prosta funkcja, której używamy w PostgreSQL. Podobnie możemy przekazać argumenty do tej funkcji. Na przykład określono długość, która zwraca wartość do tej długości.

W przykładzie wybierzemy identyfikator i nazwę i nową kolumnę z metafonem, która skróci nazwę malarza, aby utworzyć skrót. Klauzula będzie zawierać warunek poszukiwania narodowości równego Amerykanowi:

>> Wybierz identyfikator, nazwa, metafon (nazwa, 10) od malarza, w którym narodowość = „amerykański” limit 2;

Widać, że podczas wykonania metafone kolumny będzie zawierać skrócone formy nazw malarza.

Wniosek

Ten artykuł rzuca światło na częściowe wyszukiwanie danych, stosując dopasowanie rozmytych ciągów. Jeśli użytkownik nie jest świadomy pełnych nazw lub częściowej nazwy, może łatwo uzyskać informacje o rekordzie za pomocą tego typu wyszukiwania. Zastosowaliśmy podstawowe przykłady dotyczące zarówno algorytmów, jak i rozszerzeń w PostgreSQL. Mamy nadzieję, że ten artykuł jest pomocny. Sprawdź inne artykuły w Linux, aby uzyskać więcej wskazówek i informacji.