PostgreSQL

Příklady fulltextového vyhledávání PostgreSQL

Příklady fulltextového vyhledávání PostgreSQL
Každá databáze by měla mít efektivní a univerzální možnosti vyhledávání. Kdykoli se odkazuje na databáze, PostgreSQL je mistrem všech řemesel. Kombinuje všechny věci, které jste si na SQL oblíbili, s řadou databázových funkcí jiných než SQL. Kterékoli z těchto funkcí jiných než SQL, jako je například třídění informací JSONB, jsou fantastické a ani byste nemuseli zkoušet jinou databázi. Fulltextové vyhledávání patří mezi nejnovější funkce, které nejsou součástí SQL, zabudované do PostgreSQL. Je kompletní textové vyhledávání PostgreSQL zcela funkční, nebo byste chtěli odlišný index vyhledávání? Pokud můžete nějakým způsobem vyvinout kompletní textové vyhledávání zbavené přidání dalšího obalu kódu, byl by to fantastický nápad. S vyhledáváním vzorů v databázi MySQL jste již obeznámeni. Nejprve se na ně podívejme. Otevřete prostředí příkazového řádku PostgreSQL ve vašem počítačovém systému. Napište název serveru, název databáze, číslo portu, uživatelské jméno a heslo pro konkrétního uživatele, kromě výchozích možností. Pokud potřebujete slogovat s výchozími úvahami, nechejte všechny možnosti prázdné a stiskněte Enter each option. V tuto chvíli je prostředí příkazového řádku vybaveno pro práci.

Abyste pochopili koncept fulltextového vyhledávání, musíte si vybavit znalosti vyhledávání vzorů pomocí klíčového slova LIKE. Předpokládejme tedy tabulku „osoba“ v databázi „test“ s následujícími záznamy.

>> VYBRAT * OD osoby;

Předpokládejme, že chcete načíst záznamy této tabulky, kde sloupec „name“ má v každé ze svých hodnot znak „i“. Při použití klauzule LIKE v příkazovém prostředí vyzkoušejte níže uvedený dotaz SELECT. Z níže uvedeného výstupu vidíte, že pro tento konkrétní znak „i“ máme ve sloupci „name“ pouze 5 záznamů.

>> VYBRAT * OD osoby, KDE jméno jako '% i%';

Použití Tvsector:

Někdy není užitečné použít klíčové slovo LIKE k rychlému vyhledávání vzoru, i když to slovo tam je. Možná byste uvažovali o použití standardních výrazů, a přestože se jedná o proveditelnou alternativu, regulární výrazy jsou silné i pomalé. Mít procedurální vektor pro celá slova v textu, lidový popis těchto slov, je mnohem efektivnější způsob řešení tohoto problému. Abychom na něj mohli reagovat, byl vytvořen koncept kompletního textového vyhledávání a datového typu tsvector. V PostgreSQL existují dvě metody, které dělají přesně to, co chceme:

Příklad 01:

Začněme jednoduchým příkladem vytvoření vektoru. Předpokládejme, že chcete pro řetězec vytvořit vektor: „Někteří lidé mají kudrnaté hnědé vlasy správným kartáčováním.“. Takže musíte psát funkci to_tvsector () spolu s touto větou v závorkách dotazu SELECT, jak je uvedeno níže. Z níže uvedeného výstupu můžete vidět, že by přinesl vektor odkazů (pozic souborů) pro každý token a také tam, kde jsou úmyslně ignorovány výrazy s malým kontextem, jako jsou články () a spojky (a, nebo).

>> SELECT to_tsvector ('Někteří lidé mají kudrnaté hnědé vlasy správným kartáčováním');

Příklad 02:

Předpokládejme, že máte dva dokumenty s některými údaji v obou z nich. K uložení těchto dat nyní použijeme skutečný příklad generování tokenů. Předpokládejme, že jste vytvořili tabulku „Data“ ve své databázi „test“ s některými sloupci v ní pomocí níže uvedeného dotazu CREATE TABLE. Nezapomeňte v něm vytvořit sloupec typu TVSECTOR s názvem „token“. Z níže uvedeného výstupu se můžete podívat na vytvořenou tabulku.

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

Nyní je na nás, abychom přidali celková data obou dokumentů v této tabulce. Zkuste tedy níže uvedený příkaz INSERT v prostředí příkazového řádku. Nakonec byly záznamy z obou dokumentů úspěšně přidány do tabulky „Data“.

>> INSERT INTO Data (info) VALUES („Dvě křivdy nikdy nemohou napravit jednu.'), („Je to ten, kdo může hrát fotbal.'), (' Mohu v tom hrát roli?'), (' Bolest uvnitř jednoho nelze pochopit '), (' Přineste do svého života broskev);

Nyní musíte kolonizovat sloupec tokenů obou dokumentů s jejich konkrétním vektorem. Nakonec jednoduchý dotaz UPDATE vyplní sloupec tokenů odpovídajícím vektorem pro každý soubor. Chcete-li tak učinit, musíte v příkazovém shellu provést níže uvedený dotaz. Výstup ukazuje, že aktualizace byla konečně provedena.

>> UPDATE Data f1 SET token = to_tsvector (f1.info) FROM Data f2;

Nyní, když máme vše na svém místě, se vraťme k naší ilustraci „umíme“ skenováním. To_tsquery s operátorem AND, jak již bylo řečeno, nedělá žádný rozdíl mezi umístěním souborů v souborech, jak je ukázáno z výstupu uvedeného níže.

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

Příklad 04:

Abychom našli slova, která jsou „vedle sebe“, zkusíme stejný dotaz s '<->operátor. Změna se zobrazí na výstupu níže.

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

Zde je příklad bezprostředního slova vedle jiného.

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

Příklad 05:

Slova, která nejsou bezprostředně vedle sebe, najdeme pomocí čísla v operátoru vzdálenosti k referenční vzdálenosti. Blízkost mezi „přinést“ a „životem“ je od zobrazeného obrázku 4 slova.

>> SELECT * FROM Data WHERE token @@ to_tsquery ('bring <4> život');

Níže je přiložena kontrola blízkosti slov pro téměř 5 slov.

>> SELECT * FROM Data WHERE token @@ to_tsquery ('špatně <5> že jo');

Závěr:

Nakonec jste provedli všechny jednoduché a komplikované příklady fulltextového vyhledávání pomocí operátorů a funkcí To_tvsector a to_tsquery.

Kurzor při psaní v systému Windows 10 skáče nebo se pohybuje náhodně
Pokud zjistíte, že kurzor myši skáče nebo se pohybuje sám, automaticky, náhodně při psaní v notebooku nebo počítači se systémem Windows, pak vám někte...
Jak obrátit směr posouvání myši a touchpadu ve Windows 10
Myš a Touchpadnejenže usnadňují výpočet, ale jsou efektivnější a méně časově náročné. Nemůžeme si představit život bez těchto zařízení, ale přesto je ...
Jak změnit velikost, barvu a schéma kurzoru myši a kurzoru v systému Windows 10
Ukazatel myši a kurzor ve Windows 10 jsou velmi důležité aspekty operačního systému. To lze říci i pro jiné operační systémy, takže ve skutečnosti nej...