Esempi di ricerca a full-text di PostgreSQL

Esempi di ricerca a full-text di PostgreSQL
Qualsiasi database dovrebbe avere una capacità di ricerca efficace e versatile. Ogni volta che si riferisce ai database, PostgreSQL è un maestro di tutti i mestieri. Combina tutte le cose che hai imparato ad amare con SQL con una serie di funzionalità di database non SQL. Una 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 completa del testo di PostgreSQL è completamente funzionale o vorresti un indice di ricerca distinto? Se puoi in qualche modo sviluppare una ricerca completa di testo privata di aggiungere un'altra copertina di codice, sarebbe un'idea fantastica. Conosci già la ricerca di pattern nel database MySQL. Quindi, diamo prima un'occhiata. Apri la shell della riga di comando PostgreSQL nel sistema informatico. Scrivi il titolo del server, il nome del database, il numero di porta, il nome utente e la password per l'utente specifico diverso dalle opzioni predefinite. Se è necessario sbattere con considerazioni predefinite, lascia vuoti tutte le scelte e premi Inserisci ogni opzione. Al momento, la shell della riga di comando è attrezzata per lavorare.

Per comprendere il concetto di ricerca full-text, devi ricordare la conoscenza della ricerca del modello tramite la parola chiave simile. Quindi, supponiamo che una tabella "persona" nel database "test" con i seguenti record in esso.

>> seleziona * dalla persona;

Supponiamo che tu voglia recuperare i record di questa tabella, in cui il "nome" della colonna ha un personaggio "I" in uno qualsiasi dei suoi valori. Prova la query Seleziona seguente durante l'utilizzo della clausola simile nel shell di comando. Dall'output di seguito, puoi vedere che abbiamo solo 5 record per questo particolare personaggio "I" nella colonna "nome".

>> seleziona * da persona in cui il nome come '%i%';

Uso di TVsector:

A volte non serve a nulla usare la parola chiave simile per fare una rapida ricerca del modello, anche se la parola è lì. Forse considereresti di usare espressioni standard e sebbene questa sia un'alternativa fattibile, le espressioni regolari sono sia forti che letture. Avere un vettore procedurale per intere parole in un testo, una descrizione volgare di quelle parole, è un modo molto più efficiente per affrontare questo problema. Il concetto di ricerca completa di testo e il tipo di dati TSvector è stato creato per rispondere ad esso. Ci sono due metodi in PostgreSQL che fanno proprio quello che vogliamo:

  • To_tvsector: Utilizzato per fare un elenco di token (TS significa per la "ricerca di testo").
  • To_tsquery: Utilizzato per cercare al vettore per incidenze di termini o frasi specifici.

Esempio 01:

Cominciamo con una semplice illustrazione della creazione di un vettore. Supponiamo di voler creare un vettore per la corda: “Alcune persone hanno i capelli castani ricci attraverso una corretta spazzolatura.". Quindi devi scrivere una funzione to_tvsector () insieme a questa frase tra le staffe di una query selezionata come aggiunto di seguito. Dall'output di seguito, puoi vedere che produrrebbe un vettore di riferimenti (posizioni di file) per ciascun token e anche dove i termini con poco contesto, come gli articoli (i) e le congiunzioni (e, o), sono deliberatamente ignorati.

>> Seleziona To_tsvector ("Alcune persone hanno i peli castani ricci attraverso la spazzolatura corretta");

Esempio 02:

Supponiamo che tu abbia due documenti con alcuni dati in entrambi. Per archiviare questi dati, ora utilizzeremo un vero esempio di generazione di token. Supponiamo di aver creato una tabella "dati" nel tuo database "test" con alcune colonne in esso utilizzando la query di tabella crea seguente. Non dimenticare di creare una colonna di tipo TVsector denominata "token". Dall'output di seguito, puoi dare un'occhiata al tavolo che è stato creato.

>> Crea dati della tabella (ID chiave primaria seriale, testo informativo, token tsvector);

Ora, si gira per aggiungere i dati complessivi di entrambi i documenti in questa tabella. Quindi prova il comando insert seguente nella shell della riga di comando per farlo. Infine, i record di entrambi i documenti sono stati aggiunti correttamente nella tabella "dati".

>> INSERT IN VALORI DATI (INFO) ('Due errori non possono mai fare uno giusto.'), (' È lui che può giocare a calcio.'), (' Posso giocare una parte in questo?'), (' Il dolore all'interno di uno non può essere compreso '), (' 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 di aggiornamento riempirà la colonna token da parte del vettore corrispondente per ciascun file. Quindi, devi eseguire la query sotto indicata nella shell di comando per farlo. L'output mostra che l'aggiornamento è stato finalmente effettuato.

>> Aggiorna dati F1 set token = to_tsvector (F1.informazioni) dai dati F2;

Ora che abbiamo tutto in atto, torniamo alla nostra illustrazione di "Can One" con una scansione. TO_TSQUERY con e l'operatore, come detto in precedenza, non fa alcuna differenza tra le posizioni dei file nei file come mostrato dall'output indicato di seguito.

>> Seleziona ID, informazioni dai dati in cui token @@ to_tsquery ('can & one');

Esempio 04:

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

>> Seleziona ID, informazioni dai dati in cui token @@ to_tsquery ('can One');

Ecco un esempio di nessuna parola immediata accanto a un altro.

>> Seleziona ID, informazioni dai dati in cui token @@ to_tsquery ("un dolore");

Esempio 05:

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

>> Seleziona * Da dati dove Token @@ to_tsquery ('Bring Life');

Per verificare la vicinanza tra le parole per quasi 5 parole viene aggiunto di seguito.

>> seleziona * Da dati dove token @@ to_tsquery ('wrong diritto');

Conclusione:

Infine, hai fatto tutti gli esempi semplici e complicati di ricerca full-text utilizzando gli operatori e le funzioni TO_TVSector e TO_TSQUERY.