Differenze tra le versioni di "Ricerche Full Text"

Da wiki.maggioli.it.
Jump to navigation Jump to search
imported>Fparise
m (Fparise ha spostato la pagina ProFRMParametri/fulltext a Ricerche Full Text)
imported>Fparise
 
(12 versioni intermedie di uno stesso utente non sono mostrate)
Riga 1: Riga 1:
Le ricerche per contenuto su campi di testo vengono normalmente fatte inserendo nelle query delle clausole del tipo <code>campo LIKE '%testo%'</code>.  
Le <u>ricerche per contenuto</u> su campi di testo vengono normalmente fatte inserendo nelle query delle clausole del tipo <code>campo LIKE '%testo%'</code>.  


Tali clausole producono query particolarmente pesanti perché costringono il DBMS ad effettuare un full table scan. Le query che contengono una clausola campo LIKE '%testo%' risultano particolarmente pesanti in quanto costringono il DBMS ad esaminare tutte le righe della tabella e verificare se soddisfano al criterio specificato. Per questo motivo non vengono utilizzati gli indici.  
Tali clausole producono query particolarmente pesanti perché costringono il DBMS ad effettuare dei full table scan per restituire i risultati. Le query che contengono una clausola <code>campo LIKE '%testo%'</code> risultano infatti particolarmente pesanti in quanto costringono il DBMS ad esaminare tutte le righe della tabella e verificare se soddisfano al criterio specificato. Per questo motivo non vengono utilizzati gli indici.  


Per ovviare a questo problema è stato introdotto il supporto alle ricerche full text su alcuni campi di testo del protocollo, come  soluzione ai lunghi tempi di risposta delle query con clausole LIKE % particolarmente problematici su database di grosse dimensioni.  
'''Esempio'''
 
Nel caso in cui voglio cercare tutte le occorrenze in cui in un campo di testo è presente una parola, ad es. cerco tutti i protocolli che contengono la parola 'ORDINANZA' nell'oggetto, questo normalmente viene fatto con una clausola del tipo <code>oggetto LIKE '%ORDINANZA%'</code>.


'''Esempio'''
'''Esempio'''


Nei casi in cui voglio cercare tutte le occorrenze in cui in un campo di testo è presente una parola (ad es. cerco tutti i protocolli che contengono la parola 'ORDINANZA' nell'oggetto -> questo normalmente viene fatto con una clausola LIKE '%ORDINANZA%').
Se si vole fare una ricerca per contenuto dove vi sono più parole da cercare contemporaneamente, qualsiasi sia il loro ordine (ad esempio: MARIO ROSSI, ma anche ROSSI MARIO) la query diventa molto più complessa:
 
ad esempio: <code>oggetto like '%MARIO%ROSSI%' or oggetto like '%ROSSI%MARIO%'</code>


== Soluzione ==
=== Soluzione ===
Alcuni DBMS danno la possibilità di creare degli indici specifici (indici full text) che permettono di indicizzare il contenuto di campi di testo, dando la possibilità di sfruttare tali indici nel piano di esecuzione delle query e renderle perciò molto più performanti. Per sfruttare questi indici è necessario utilizzare una apposita sintassi nelle query di interrogazione, specifica per il DBMS utilizzato.
Alcuni DBMS danno la possibilità di creare degli indici specifici (indici full text) che permettono di indicizzare il contenuto di campi di testo, dando la possibilità di sfruttare tali indici nel piano di esecuzione delle query e renderle perciò molto più performanti. Per sfruttare questi indici è necessario utilizzare una apposita sintassi nelle query di interrogazione, specifica per il DBMS utilizzato.


La seguente implementazione è basata su Oracle Text (riguarda perciò solo i clienti che usano dbms Oracle ed hanno installato l'opzione Oracle Text); si tratta della fascia dei clienti di grosse dimensioni in cui il problema è particolarmente evidente.
Una query Full Text permette di risolvere in maniera semplice e performante il problema presentato.


== Configurazione ==
La seguente implementazione è basata su Oracle Text (riguarda perciò solo i clienti che usano dbms Oracle ed hanno installato l'opzione Oracle Text).
Aprire la configurazione dei Parametri Globali > 'Ricerche'; si vedrà una nuova sezione relativa all'indicizzazione full text.
 
Si tratta della fascia dei clienti di grosse dimensioni in cui il problema è particolarmente evidente.
 
==== Configurazione ====
Aprire la configurazione dei <code>Parametri Globali</code> > <code>Ricerche</code>; si vedrà una nuova sezione relativa all'indicizzazione Full Text.


Da qui è possibile abilitare la ricerca full text sui campi prescelti, che sarà possibile solamente se viene rilevata la presenza dell'indice full text associato al campo selezionato.
Da qui è possibile abilitare la ricerca full text sui campi prescelti, che sarà possibile solamente se viene rilevata la presenza dell'indice full text associato al campo selezionato.


==== Ricerca ====
Una volta abilitata, andando in Gestione/Consultazione Protocollo ed eseguendo una ricerca di alcune parole nei campi indicizzati verrà eseguita una query full text in grado di ricavare tutti i protocolli in cui risultano occorrenze delle parole indicate; in qualsiasi ordine queste vengano scritte.
Una volta abilitata, andando in Gestione/Consultazione Protocollo ed eseguendo una ricerca di alcune parole nei campi indicizzati verrà eseguita una query full text in grado di ricavare tutti i protocolli in cui risultano occorrenze delle parole indicate; in qualsiasi ordine queste vengano scritte.
La ricerca full text è disponibile anche nella Ricerca Documenti della Gestione Documentale.
=== Documentazione ===
==== Oracle Text ====
[http://viralpatel.net/blogs/oracle-index-usage-like-operator-domain-indexes/ Index usage with LIKE operator in Oracle & Domain Indexes]
[https://blog.toadworld.com/oracle-text-index-at-a-glance Oracle Text Index at a glance]
[http://www.dbartisans.com/oracle/docs/HiddenGemsOracleText.pdf UNLOCKING HIDDEN GEMS IN ORACLE TEXT]
[https://docs.oracle.com/cd/B28359_01/text.111/b28304/cdatadic.htm#CCREF1901 Oracle Text Reference - Oracle Text Indexing Elements]
[https://docs.oracle.com/cd/B28359_01/text.111/b28304/cqoper.htm#CCREF0300 Oracle Text CONTAINS Query Operators]
[https://docs.oracle.com/cd/B28359_01/text.111/b28303/ind.htm#i1006887 Creating Oracle Text Indexes]
[http://www.oracle.com/technetwork/testcontent/index-maintenance-089308.html Setting up an Index Maintenance Regime for Oracle Text]

Versione attuale delle 09:33, 6 mar 2019

Le ricerche per contenuto su campi di testo vengono normalmente fatte inserendo nelle query delle clausole del tipo campo LIKE '%testo%'.

Tali clausole producono query particolarmente pesanti perché costringono il DBMS ad effettuare dei full table scan per restituire i risultati. Le query che contengono una clausola campo LIKE '%testo%' risultano infatti particolarmente pesanti in quanto costringono il DBMS ad esaminare tutte le righe della tabella e verificare se soddisfano al criterio specificato. Per questo motivo non vengono utilizzati gli indici.

Esempio

Nel caso in cui voglio cercare tutte le occorrenze in cui in un campo di testo è presente una parola, ad es. cerco tutti i protocolli che contengono la parola 'ORDINANZA' nell'oggetto, questo normalmente viene fatto con una clausola del tipo oggetto LIKE '%ORDINANZA%'.

Esempio

Se si vole fare una ricerca per contenuto dove vi sono più parole da cercare contemporaneamente, qualsiasi sia il loro ordine (ad esempio: MARIO ROSSI, ma anche ROSSI MARIO) la query diventa molto più complessa:

ad esempio: oggetto like '%MARIO%ROSSI%' or oggetto like '%ROSSI%MARIO%'

Soluzione

Alcuni DBMS danno la possibilità di creare degli indici specifici (indici full text) che permettono di indicizzare il contenuto di campi di testo, dando la possibilità di sfruttare tali indici nel piano di esecuzione delle query e renderle perciò molto più performanti. Per sfruttare questi indici è necessario utilizzare una apposita sintassi nelle query di interrogazione, specifica per il DBMS utilizzato.

Una query Full Text permette di risolvere in maniera semplice e performante il problema presentato.

La seguente implementazione è basata su Oracle Text (riguarda perciò solo i clienti che usano dbms Oracle ed hanno installato l'opzione Oracle Text).

Si tratta della fascia dei clienti di grosse dimensioni in cui il problema è particolarmente evidente.

Configurazione

Aprire la configurazione dei Parametri Globali > Ricerche; si vedrà una nuova sezione relativa all'indicizzazione Full Text.

Da qui è possibile abilitare la ricerca full text sui campi prescelti, che sarà possibile solamente se viene rilevata la presenza dell'indice full text associato al campo selezionato.

Ricerca

Una volta abilitata, andando in Gestione/Consultazione Protocollo ed eseguendo una ricerca di alcune parole nei campi indicizzati verrà eseguita una query full text in grado di ricavare tutti i protocolli in cui risultano occorrenze delle parole indicate; in qualsiasi ordine queste vengano scritte.

La ricerca full text è disponibile anche nella Ricerca Documenti della Gestione Documentale.

Documentazione

Oracle Text

Index usage with LIKE operator in Oracle & Domain Indexes

Oracle Text Index at a glance

UNLOCKING HIDDEN GEMS IN ORACLE TEXT

Oracle Text Reference - Oracle Text Indexing Elements

Oracle Text CONTAINS Query Operators

Creating Oracle Text Indexes

Setting up an Index Maintenance Regime for Oracle Text