Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Sulle colonne XML è possibile creare un indice full-text che indicizza il contenuto dei valori XML, ma ignora i markup XML. I tag degli elementi vengono utilizzati come limiti dei token. Gli elementi riportati di seguito sono indicizzati:
Contenuto degli elementi XML.
Solo il contenuto degli attributi XML dell'elemento di livello principale, a meno che non si tratti di valori numerici.
In alcuni casi è possibile combinare la ricerca full-text con l'indicizzazione XML, procedendo nel modo descritto di seguito.
Filtrare innanzitutto i valori XML desiderati utilizzando la ricerca full-text SQL.
Eseguire quindi una query sui valori XML che utilizzano l'indice XML sulla colonna XML.
Esempio: combinazione di ricerca full-text con query XML
Dopo la creazione dell'indice full-text sulla colonna XML è possibile utilizzare la query seguente per verificare se un valore XML contiene la parola "custom" nel titolo di un libro:
SELECT *
FROM T
WHERE CONTAINS(xCol,'custom')
AND xCol.exist('/book/title/text()[contains(.,"custom")]') =1
Il metodo contains() utilizza l'indice full-text per selezionare i valori XML che contengono la parola "custom" ovunque nel documento. La clausola exist() garantisce che la parola "personalizzata" si verifichi nel titolo di un libro.
Una ricerca full-text che usa contains() e XQuery contains() ha una semantica diversa. Nel secondo caso si tratta di una corrispondenza tra sottostringhe, mentre nel primo si tratta di una corrispondenza tra token basata sullo stemming. Pertanto, se la ricerca è per la stringa che ha "run" nel titolo, le corrispondenze includeranno "run", "runs" e "running", perché sono soddisfatte sia la funzione full-text contains() che la funzione Xquery contains(). Tuttavia, la query non corrisponde alla parola "personalizzabile" nel titolo in cui il testo full-text contiene() ha esito negativo, ma la query Xquery contains() viene soddisfatta. In genere, per la corrispondenza di sottostringa pura, la clausola full-text contains() deve essere rimossa.
Inoltre, la ricerca full-text usa lo stemming delle parole, ma XQuery contains() è una corrispondenza letterale. Tale differenza è illustrata nell'esempio successivo.
Esempio: ricerca full-text su valori XML con stemming
Il controllo XQuery contains() eseguito nell'esempio precedente in genere non può essere eliminato. Considera la query seguente:
SELECT *
FROM T
WHERE CONTAINS(xCol,'run')
La parola "ran" nel documento soddisfa la condizione di ricerca a causa dello stemming. Inoltre, il contesto di ricerca non viene controllato tramite XQuery.
Quando XML viene scomposto in colonne relazionali tramite AXSD indicizzate full-text, le query XPath eseguite sulla vista XML non eseguono ricerche full-text sulle tabelle sottostanti.
Vedere anche
Indici XML (SQL Server)