PostgreSQL

Esempi di ricerca full-text PostgreSQL

Esempi di ricerca full-text PostgreSQL
Qualsiasi database dovrebbe avere una capacità di ricerca efficace e versatile. Ogni volta che si fa riferimento ai database, PostgreSQL è un maestro in tutti i mestieri. Combina tutte le cose che hai imparato ad amare con SQL con una serie di funzionalità di database non SQL. Ognuna di queste funzioni non SQL, come l'ordinamento delle informazioni JSONB, è fantastica e non dovresti nemmeno provare un database diverso. La ricerca full-text è tra le più recenti funzionalità non SQL incorporate in PostgreSQL. La ricerca del testo completo di PostgreSQL è completamente funzionale o vorresti un indice di ricerca distinto?? Se riesci in qualche modo a sviluppare una ricerca testuale completa senza aggiungere un'altra copertina di codice, sarebbe un'idea fantastica. Hai già familiarità con la ricerca di pattern nel database MySQL. Quindi, prima diamo un'occhiata a loro. Apri la shell della riga di comando di PostgreSQL nel tuo computer. Scrivi il titolo del server, il nome del database, il numero di porta, il nome utente e la password per l'utente specifico oltre alle opzioni predefinite. Se hai bisogno di fare lo slog con considerazioni predefinite, lascia tutte le scelte vuote e premi Inserisci ogni opzione. Al momento, la tua shell della riga di comando è attrezzata per lavorare.

Per comprendere il concetto di ricerca full-text, devi ricordare la conoscenza della ricerca di pattern tramite la parola chiave LIKE. Quindi, supponiamo una tabella 'person' nel database 'test' con i seguenti record al suo interno.

>> SELEZIONA * DA persona;

Supponiamo che tu voglia recuperare i record di questa tabella, dove il "nome" della colonna ha un carattere "i" in uno qualsiasi dei suoi valori. Prova la seguente query SELECT mentre usi la clausola LIKE nella shell dei comandi. Dall'output di seguito, puoi vedere che abbiamo solo 5 record per questo particolare personaggio 'i' nella colonna 'nome'.

>> SELECT * FROM persona WHERE nome LIKE '%i%';

Utilizzo del settore televisivo:

A volte è inutile usare la parola chiave LIKE per fare una rapida ricerca di pattern, anche se la parola è lì. Forse prenderesti in considerazione l'utilizzo di espressioni standard e, sebbene questa sia un'alternativa fattibile, le espressioni regolari sono sia forti che lente. Avere un vettore procedurale per intere parole in un testo, una descrizione vernacolare di quelle parole, è un modo molto più efficiente per affrontare questo problema. Il concetto di ricerca testuale completa e il tipo di dati tsvector è stato creato per rispondere ad esso. Ci sono due metodi in PostgreSQL che fanno proprio quello che vogliamo:

Esempio 01:

Iniziamo con una semplice illustrazione della creazione di un vettore. Supponiamo di voler creare un vettore per la stringa: "Alcune persone hanno i capelli castani ricci attraverso un'adeguata spazzolatura.". Quindi devi scrivere una funzione to_tvsector() insieme a questa frase tra parentesi di una query SELECT come allegato di seguito. Dall'output seguente, puoi vedere che produrrebbe un vettore di riferimenti (posizioni di file) per ciascun token e anche dove i termini con poco contesto, come articoli (the) e congiunzioni (e, o), vengono deliberatamente ignorati.

>> SELECT to_tsvector('Alcune persone hanno i capelli castani ricci se spazzolati adeguatamente');

Esempio 02:

Supponiamo di avere due documenti con alcuni dati in entrambi. Per memorizzare questi dati, ora utilizzeremo un esempio reale di generazione di token. Supponiamo di aver creato una tabella "Dati" nel "test" del database con alcune colonne utilizzando la query CREATE TABLE di seguito. Non dimenticare di creare una colonna di tipo TVSECTOR denominata "token" al suo interno. Dall'output qui sotto, puoi dare un'occhiata alla tabella che è stata creata.

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

Ora tocca a noi aggiungere i dati complessivi di entrambi i documenti in questa tabella. Quindi prova il comando INSERT di seguito nella shell della riga di comando per farlo. Infine, i record di entrambi i documenti sono stati aggiunti con successo nella tabella "Dati".

>> INSERT INTO Data (info) VALUES ('Due torti non possono mai farne uno giusto.'), ('Lui è quello che può giocare a calcio.'), ('Posso avere un ruolo in questo??'), ('Il dolore che si ha dentro non si può capire'), ('Porta pesca nella tua vita);

Ora devi colonizzare la colonna token di entrambi i documenti con il loro vettore specifico. Alla fine, una semplice query UPDATE riempirà la colonna dei token con il loro vettore corrispondente per ogni file. Quindi, per farlo, devi eseguire la query indicata di seguito nella shell dei comandi. L'output mostra che l'aggiornamento è stato finalmente effettuato.

>> AGGIORNA dati f1 SET token = to_tsvector(f1.info) DA Dati f2;

Ora che abbiamo tutto a posto torniamo alla nostra illustrazione di "si può" con una scansione. To_tsquery con l'operatore AND, come detto in precedenza, non fa differenza tra le posizioni dei file nei file come mostrato dall'output indicato di seguito.

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

Esempio 04:

Per trovare parole che sono "accanto a" l'un l'altro, proveremo la stessa query con il '<->'operatore. La modifica viene visualizzata nell'output di seguito.

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

Ecco un esempio di nessuna parola immediata accanto a un'altra.

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

Esempio 05:

Troveremo le parole che non sono immediatamente una accanto all'altra usando un numero nell'operatore distanza per fare riferimento alla distanza. La vicinanza tra "portare" e "vita" è di 4 parole a parte dall'immagine visualizzata.

>> SELECT * FROM dati WHERE token @@ to_tsquery('portare <4> vita');

Per verificare la vicinanza tra le parole per quasi 5 parole è allegato di seguito.

>> SELECT * FROM dati WHERE token @@ to_tsquery('sbagliato <5> giusto');

Conclusione:

Infine, hai eseguito tutti gli esempi semplici e complicati di ricerca full-text utilizzando gli operatori e le funzioni To_tvsector e to_tsquery.

Come mostrare il contatore FPS nei giochi Linux
I giochi Linux hanno avuto una grande spinta quando Valve ha annunciato il supporto Linux per il client Steam e i loro giochi nel 2012. Da allora, mol...
Come scaricare e giocare a Sid Meier's Civilization VI su Linux
Introduzione al gioco Civilization 6 è una versione moderna del concetto classico introdotto nella serie dei giochi Age of Empires. L'idea era abbasta...
Come installare e giocare a Doom su Linux
Introduzione a Doom La serie Doom è nata negli anni '90 dopo l'uscita dell'originale Doom. È stato un successo immediato e da quel momento in poi la s...