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.
Si applica a:SQL Server,
Database SQL di Azure e
Istanza gestita di SQL di Azure.
Quando crei un indice a testo completo, specifica un linguaggio a livello di colonna per la colonna indicizzata. Le query full-text sulla colonna utilizzano il separatore di parole e gli stemmer per la lingua specificata. Considera come il motore Full-Text tokenizza e poi indicizza il tuo testo quando scegli il linguaggio delle colonne.
Nota
Per specificare una lingua a livello di colonna per una colonna di indice full-text, utilizzare la LANGUAGE <language_term> clausola quando si specifica la colonna. Per altre informazioni, vedere CREATE FULLTEXT INDEX e ALTER FULLTEXT INDEX.
Supporto per la lingua nella ricerca di Full-Text
Questa sezione fornisce un'introduzione ai word breaker e agli stemmer e illustra come Full-Text Ricerca usa l'identificatore del codice di lingua (LCID) del linguaggio a livello di colonna.
Introduzione ai word breaker e agli stemmer
Il motore di database di SQL Server include separatori di parole e lemmatizzatori per molte lingue, abilitati per impostazione predefinita. Microsoft Natural Language Group (NLG) implementa e supporta questi componenti linguistici. Per un elenco delle lingue supportate, vedi sys.fulltext_languages.
I componenti esterni, come i suddivisori di parole e i filtri, dovrebbero essere firmati per migliorare la sicurezza. Per verificare la firma, esegui la seguente dichiarazione:
EXECUTE sp_fulltext_service 'verify_signature';
Come Full-Text Ricerca usa il nome della lingua a livello di colonna
Quando crei un indice a testo completo, specifica un nome di lingua valido per ogni colonna. Se un nome linguistico è valido ma la vista del catalogo sys.fulltext_languages non lo restituisce, Full-Text Ricerca torna al nome linguistico più vicino disponibile della stessa famiglia linguistica, se presente. In caso contrario, la ricerca full-text torna a utilizzare il separatore di parole Neutral. Per evitare questo comportamento di fallback, specifica un nome di lingua valido e disponibile.
Nota
L'identificatore LCID viene usato per tutti i tipi di dati considerati idonei per l'indicizzazione full-text, ad esempio char o nchar. Se l'ordinamento di una colonna di tipo char, varcharo text è impostato su una lingua diversa da quella identificata dall'LCID, quest'ultimo verrà usato comunque durante l'indicizzazione full-text e le query di quelle colonne.
Spezzatura delle parole
Un word breaker ha la funzione di suddividere in token il testo da indicizzare in base ai delimitatori delle parole specifici della lingua. Pertanto, il comportamento della separazione delle parole differisce tra le diverse lingue. Se si usa una lingua, x, per indicizzare più lingue {x, ye z}, alcuni dei comportamenti potrebbero causare risultati imprevisti. Ad esempio, un trattino (-) o una virgola (,) potrebbero essere un elemento di interruzione di parole che viene eliminato in una lingua ma non in un'altra. Raramente, può verificarsi un comportamento di stemming inatteso perché una determinata parola può essere sottoposta a stemming in modo diverso in lingue diverse. Nella lingua inglese, ad esempio, i delimitatori delle parole sono dati in genere da spazi o da elementi di punteggiatura. In altre lingue, come il tedesco, parole o caratteri possono essere combinati. Di conseguenza, il linguaggio a livello di colonna scelto deve rappresentare la lingua che si prevede di archiviare in righe di tale colonna.
Lingue occidentali
Per la famiglia di lingue occidentali, se non si è certi delle lingue che verranno archiviate in una colonna o si prevede che più lingue vengano archiviate, una soluzione alternativa generale consiste nell'usare il word breaker per il linguaggio più complesso che potrebbe essere archiviato nella colonna.
Ad esempio, potrebbe essere necessario archiviare il contenuto inglese, spagnolo e tedesco in una singola colonna. Queste tre lingue occidentali possiedono modelli di word break simili, con i modelli tedeschi più complessi. Pertanto, in questo caso, una buona scelta è usare il word breaker tedesco, che può elaborare correttamente testi in inglese e spagnolo. Il word breaker inglese potrebbe invece non essere in grado di elaborare perfettamente il testo in tedesco per la presenza delle parole composte.
L'uso del word breaker della lingua più complessa in una famiglia di lingue non garantisce l'indicizzazione perfetta di ogni lingua della famiglia. Potrebbero esistere casi limite in cui anche il segmentatore di parole più sofisticato potrebbe non gestire correttamente un testo scritto in un'altra lingua.
Lingue non occidentali
Per le lingue non occidentali (come cinese, giapponese, hindi e così via), la soluzione precedente non funziona necessariamente, per ragioni linguistiche. Per le lingue non occidentali, considera una delle seguenti soluzioni alternative:
Per lingue di famiglie diverse
Se una colonna dovesse contenere testo in lingue radicalmente diverse, ad esempio spagnolo e giapponese, valutare la possibilità di archiviare tale contenuto in colonne diverse. Questa separazione consente di usare il segmentatore di parole specifico della lingua per ogni colonna. Se si sceglie questa soluzione e non si conosce la lingua da utilizzare in fase di query, potrebbe essere necessario eseguire la query in entrambe le colonne per essere sicuri che la query trovi la riga o il documento corretto.
Per contenuti binari (come documenti Microsoft Word)
Quando il contenuto indicizzato è di tipo binario , il filtro Full-Text Search che elabora il contenuto testuale prima di inviarlo al word breaker potrebbe onorare specifici tag linguistici all'interno del file binario. In questo caso, in fase di indicizzazione, il filtro genera l'LCID corretto per un documento o una sezione di un documento. Il motore full-text richiama quindi il word breaker per la lingua associata a tale LCID. Tuttavia, dopo aver indicizzato i contenuti multilingue, verifica che il contenuto sia stato correttamente indicizzato.
Per contenuti di testo normale
Se il contenuto è testo normale, è possibile convertirlo nel tipo di dati xml e aggiungere tag che indichino la lingua corrispondente a ogni documento o sezione di documento specifica. Affinché questa soluzione funzioni, tuttavia, è necessario conoscere la lingua prima di procedere all'indicizzazione full-text.
Stemming
Un'altra considerazione quando si sceglie la lingua a livello di colonna è lo stemming. Lo stemming nelle query full-text è il processo con cui si cercano tutte le forme flesse (flessive) di una parola in una determinata lingua. Quando si utilizza un word breaker generico per elaborare più lingue, il processo di stemming funziona solo per la lingua specificata per la colonna, non per le altre lingue presenti nella colonna. Ad esempio, gli stemmer tedeschi non funzionano con l’inglese o lo spagnolo (e così via). Questo comportamento potrebbe influenzare il ricordo a seconda della lingua scelta al momento della richiesta.
Effetto del tipo di colonna nella ricerca Full-Text
Un'altra considerazione relativa alla scelta della lingua riguarda la modalità di rappresentazione dei dati. Per i dati non archiviati in una colonna varbinary(max), non viene eseguito alcun filtro speciale. Piuttosto, il testo viene generalmente passato così com’è al componente di suddivisione delle parole.
I word breaker, inoltre, vengono progettati soprattutto per elaborare il testo scritto. Se il tuo testo contiene markup (come HTML), l'accuratezza linguistica durante l'indicizzazione e la ricerca potrebbe essere ridotta. In tal caso, hai due opzioni: il metodo preferito è memorizzare i dati di testo in una colonna varbinary(max ) e indicare il tipo di documento affinché possa essere filtrato. Se questo approccio non è praticabile, considera l'uso del word breaker neutro e, se possibile, l'aggiunta di dati di markup (come 'br' in HTML) agli elenchi di parole non significative.
Nota
Lo stemming basato sulla lingua non si applica quando si specifica il linguaggio neutro.
Specificare un linguaggio a livello di colonna non predefinito in una query full-text
Per impostazione di default, nel motore di database, Full-Text Search analizza i termini di query utilizzando il linguaggio specificato per ogni colonna nella clausola di testo integrale. Per modificare questo comportamento, specificare una lingua non predefinita in fase di query. Per le lingue supportate le cui risorse sono installate, è possibile usare la clausola LANGUAGE <language_term> di una query CONTAINS, CONTAINSTABLE, FREETEXT o FREETEXTTABLE per specificare la lingua usata per la segmentazione delle parole, lo stemming, il thesaurus e l'elaborazione delle parole non significative dei termini della query.