Mise à niveau de la version d’index de recherche en texte intégral

S’applique à :SQL ServerBase de données Azure SQLAzure SQL Managed Instance

Cet article décrit la modification de la version de l’index de recherche en texte intégral dans SQL Server 2025 (17.x) et les versions ultérieures. Il couvre les modifications de comportement, les étapes de migration requises et les nouveaux fichiers binaires de composants.

Modifications apportées à la version d’index de recherche en texte intégral dans SQL Server 2025

SQL Server 2025 (17.x) supprime les anciens binaires des séparateurs de mots, des racinisateurs et des filtres de l'installation de SQL Server. Ces composants sont reconstruits avec un ensemble d’outils moderne et offrent une prise en charge étendue pour d’autres langages et types de documents. Les composants installés avec SQL Server 2025 (17.x) sont appelés version 2. Les composants installés avec SQL Server 2022 (16.x) et les versions antérieures sont appelés version 1.

Après une mise à niveau sur place, les index de texte intégral existants ont index_version = 1 dans sys.fulltext_indexes. Les index nouvellement créés utilisent la version 2 et les nouveaux composants, sauf si vous le spécifiez autrement à l’aide de la configuration étendue de la base de données FULLTEXT_INDEX_VERSION.

Modifications du composant version 2

Les composants version 2 ajoutent la prise en charge du langage et du type de document, utilisent un nouveau modèle de personnalisation et peuvent retourner des résultats de tokenisation différents de ceux des composants de version 1.

Prise en charge des nouvelles langues

SQL Server 2025 (17.x) prend en charge l’indexation de texte intégral dans trois nouvelles langues :

  • Finnois (LCID 1035)
  • Hongrois (LCID 1038)
  • Estonien (LCID 1061)

Prise en charge des nouveaux types de documents

SQL Server 2025 (17.x) ajoute la prise en charge de l’indexation des extensions de document suivantes par défaut.

Filtrer Extension
msgfilt02.dll .msg
odffilt02.dll .odp, .ods, .odt
offfilt02.dll .doc, .dot, .obd, .obt, .pot, .pps, .ppt, .xlb, .xlc, .xls, .xlt
offfiltx02.dll .docm, .docx, .dotx, .pptm, .pptx, .xlsb, .xlsm, .xlsx, .zip
onfilter02.dll .one

Résultats inattendus

Les nouveaux composants de SQL Server 2025 (17.x) peuvent retourner des résultats inattendus aux applications. Par exemple, considérez le segmentateur de mots anglais (LCID 1033) :

Terme Résultats avec l’analyseur de mots précédent Résultats avec un nouvel analyseur de mots
cat_dog cat_dog cat_dog
cat
dog
$100 $100
nn100usd
\$100
nn100\$
2026-01-09 2026-01-09
2026
nn2026
01
09
2026-01-09
dd20260109
2026
01
09

Modèle de personnalisation

Les index de texte intégral de la version 2 ne lisent plus les gestionnaires de composant dans le registre Windows. Vous contrôlez la personnalisation via un fichier JSON spécifique à une instance. Pour plus d’informations, consultez Personnaliser les filtres et les analyseurs de mots.

Options de mise à niveau et de migration

Étant donné que SQL Server 2025 (17.x) supprime tous les fichiers binaires de la version 1, les requêtes de texte intégral et les populations qui utilisent les index de version 1 échouent après une mise à niveau sur place. Pour plus d’informations, consultez Modifications importantes des fonctionnalités du moteur de base de données dans SQL Server 2025.

Utilisez l’une des approches suivantes après la mise à niveau vers SQL Server 2025 (17.x) ou versions ultérieures, ou lors de la préparation des index de version 1 pour la dépréciation dans Azure SQL Database et Azure SQL Managed Instance.

Rechercher des index de version 1

Exécutez la requête suivante dans chaque base de données qui utilise Full-Text Recherche pour rechercher des index qui utilisent toujours les composants de la version 1 :

SELECT fc.[name] AS catalog_name,
       OBJECT_SCHEMA_NAME(fi.object_id) AS schema_name,
       OBJECT_NAME(fi.object_id) AS table_name,
       fi.object_id,
       fi.*
FROM sys.fulltext_indexes AS fi
     INNER JOIN sys.fulltext_catalogs AS fc
         ON fi.fulltext_catalog_id = fc.fulltext_catalog_id
WHERE fi.index_version = 1;

Reconstruire des index existants avec des composants version 2

Régénérez les index de recherche en texte intégral existants pour utiliser les composants de la version 2. Vérifiez que FULLTEXT_INDEX_VERSION est défini sur 2, puis régénérez les catalogues de recherche en texte intégral.

SELECT *
FROM sys.database_scoped_configurations
WHERE [name] = 'FULLTEXT_INDEX_VERSION';
ALTER FULLTEXT CATALOG [FtCatalog] REBUILD;

Note

Une opération de reconstruction de catalogue reconstruit tous les index de recherche en texte intégral. Si vous souhaitez contrôler l’ordre de la construction des index ou réduire les besoins en ressources, supprimez et recréez les index de recherche en texte intégral séparément.

Continuer à utiliser les composants de la version 1

Utilisez cette option uniquement pour les instances SQL Server où vous pouvez gérer les fichiers dans l’installation de SQL Server.

Important

La version 1 est déconseillée pour SQL Server sur Linux. Dans SQL Server 2025 (17.x) et versions ultérieures, le mssql-server-fts package n’inclut pas de fichiers binaires de version 1. Tenter d'installer des versions incompatibles des packages mssql-server-fts et mssql-server n'est pas pris en charge et entraîne des échecs complets.

Si vous devez rester sur la version 1 pour la compatibilité des applications, définissez FULLTEXT_INDEX_VERSION = 1 pour éviter une mise à niveau involontaire vers la version 2 pendant la reconstruction.

ALTER DATABASE SCOPED CONFIGURATION
    SET FULLTEXT_INDEX_VERSION = 1;

Ensuite, copiez les anciens binaires des séparateurs de mots, des racinisateurs et des filtres depuis le dossier Binn de l'ancienne instance vers le dossier Binn de l'instance cible. Pour savoir quelles DLL et bibliothèques dépendantes vous devez copier pour chaque langue ou type de document, consultez Fichiers binaires des filtres de texte intégral et Fichiers binaires du séparateur de mots et du radicaliseur de texte intégral.

Pour copier en bloc l’ensemble complet de fichiers binaires de version 1, copiez le script suivant dans un fichier nommé Copy-FulltextV1Components.ps1.

<#
.SYNOPSIS
    Copies the Full-Text V1 components from one SQL install's Binn folder to another.
    Existing files are never overwritten; each file reports OK, SKIP or FAIL.

.EXAMPLE
    .\Copy-FulltextV1Components.ps1 `
        -SourceBinn 'C:\Program Files\Microsoft SQL Server\MSSQL16.INST1\MSSQL\Binn' `
        -TargetBinn 'C:\Program Files\Microsoft SQL Server\MSSQL17.INST2\MSSQL\Binn'
#>
param(
    [Parameter(Mandatory)] [string] $SourceBinn,
    [Parameter(Mandatory)] [string] $TargetBinn
)

$components = @(
    'infosoft.dll',
    'LangWrbk.dll',
    'korwbrkr.dll',
    'korwbrkr.lex',
    'msfte.dll',
    'xmlfilt.dll',
    'MsWb7.dll',
    'MsWb70011.dll',
    'MsWb7001e.dll',
    'MsWb70404.dll',
    'MsWb70804.dll',
    'NaturalLanguage6.dll',
    'NL7Data0011.dll',
    'NL7Data001e.dll',
    'NL7Data0404.dll',
    'NL7Data0804.dll',
    'NL7Lexicons0011.dll',
    'NL7Lexicons001e.dll',
    'NL7Lexicons0404.dll',
    'NL7Lexicons0804.dll',
    'NL7Models0011.dll',
    'NL7Models001e.dll',
    'NL7Models0404.dll',
    'NL7Models0804.dll',
    'nlhtml.dll',
    'nls400.dll',
    'NlsData0000.dll',
    'NlsData0002.dll',
    'NlsData0003.dll',
    'NlsData000a.dll',
    'NlsData000c.dll',
    'NlsData000d.dll',
    'NlsData000f.dll',
    'NlsData0010.dll',
    'NlsData0018.dll',
    'NlsData001a.dll',
    'NlsData001b.dll',
    'NlsData001D.dll',
    'NlsData0020.dll',
    'NlsData0021.dll',
    'NlsData0022.dll',
    'NlsData0024.dll',
    'NlsData0026.dll',
    'NlsData0027.dll',
    'NlsData002a.dll',
    'NlsData0039.dll',
    'NlsData003e.dll',
    'NlsData0045.dll',
    'NlsData0046.dll',
    'NlsData0047.dll',
    'NlsData0049.dll',
    'NlsData004a.dll',
    'NlsData004b.dll',
    'NlsData004c.dll',
    'NlsData004e.dll',
    'NlsData0414.dll',
    'NlsData0416.dll',
    'NlsData0816.dll',
    'NlsData081a.dll',
    'NlsData0c1a.dll',
    'Nlsdl.dll',
    'NlsLexicons0002.dll',
    'NlsLexicons0003.dll',
    'NlsLexicons000a.dll',
    'NlsLexicons000c.dll',
    'NlsLexicons000d.dll',
    'NlsLexicons000f.dll',
    'NlsLexicons0010.dll',
    'NlsLexicons0018.dll',
    'NlsLexicons001a.dll',
    'NlsLexicons001b.dll',
    'NlsLexicons001D.dll',
    'NlsLexicons0020.dll',
    'NlsLexicons0021.dll',
    'NlsLexicons0022.dll',
    'NlsLexicons0024.dll',
    'NlsLexicons0026.dll',
    'NlsLexicons0027.dll',
    'NlsLexicons002a.dll',
    'NlsLexicons0039.dll',
    'NlsLexicons003e.dll',
    'NlsLexicons0045.dll',
    'NlsLexicons0046.dll',
    'NlsLexicons0047.dll',
    'NlsLexicons0049.dll',
    'NlsLexicons004a.dll',
    'NlsLexicons004b.dll',
    'NlsLexicons004c.dll',
    'NlsLexicons004e.dll',
    'NlsLexicons0414.dll',
    'NlsLexicons0416.dll',
    'NlsLexicons0816.dll',
    'NlsLexicons081a.dll',
    'NlsLexicons0c1a.dll',
    'Prm0001.bin',
    'Prm0005.bin',
    'Prm0006.bin',
    'Prm0007.bin',
    'Prm0008.bin',
    'Prm0009.bin',
    'Prm0013.bin',
    'Prm0015.bin',
    'Prm0019.bin',
    'Prm001f.bin'
)

if (-not (Test-Path -LiteralPath $SourceBinn -PathType Container)) { throw "Source Binn folder not found: $SourceBinn" }
if (-not (Test-Path -LiteralPath $TargetBinn -PathType Container)) { throw "Target Binn folder not found: $TargetBinn" }

if ((Split-Path -Leaf $SourceBinn) -ne 'Binn') { throw "Source path must be a Binn folder: $SourceBinn" }
if ((Split-Path -Leaf $TargetBinn) -ne 'Binn') { throw "Target path must be a Binn folder: $TargetBinn" }

$ok = 0; $skip = 0; $fail = 0
foreach ($name in $components) {
    $srcFile = Join-Path $SourceBinn $name
    $dstFile = Join-Path $TargetBinn $name

    if (-not (Test-Path -LiteralPath $srcFile)) {
        Write-Host "[FAIL] $name (source not found)" -ForegroundColor Red
        $fail++
    }
    elseif (Test-Path -LiteralPath $dstFile) {
        Write-Warning "[SKIP] $name already exists in target; not overwritten"
        $skip++
    }
    else {
        try {
            Copy-Item -LiteralPath $srcFile -Destination $dstFile -ErrorAction Stop
            Write-Host "[ OK ] $name" -ForegroundColor Green
            $ok++
        }
        catch {
            Write-Host "[FAIL] $name ($($_.Exception.Message))" -ForegroundColor Red
            $fail++
        }
    }
}

Write-Host ""
Write-Host "Copied $ok, skipped $skip, failed $fail of $($components.Count)."

Exécutez le script dans une fenêtre PowerShell d’administration, où SourceBinn est le Binn chemin d’accès au dossier d’une instance SQL Server 2022 (16.x) ou antérieure contenant des fichiers binaires version 1, et TargetBinn est le Binn chemin d’accès au dossier d’un SQL Server 2025 (17.x) ou une instance ultérieure qui a besoin d’une prise en charge continue de la version 1.

.\Copy-FulltextV1Components.ps1 `
    -SourceBinn 'C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\Binn' `
    -TargetBinn 'C:\Program Files\Microsoft SQL Server\MSSQL17.MSSQLSERVER\MSSQL\Binn'

Chronologie de l’état et de la dépréciation de la version 1 par environnement

Environnement État Action requise
SQL Server 2025 (17.x) et versions ultérieures Les fichiers binaires de la version 1 sont supprimés de l’installation de SQL Server. Les requêtes et les populations de version 1 échouent après une mise à niveau sur place. Regénérer ou recréer des index de recherche en texte intégral avec les composants de la version 2. Si vous avez besoin de la version 1 pour la compatibilité, utilisez la version 1 uniquement lorsqu’elle est prise en charge.
Azure SQL Managed Instance avec la stratégie de mise à jour de SQL Server 2025 L'abandon de la version 1 est déployé progressivement. Les clients concernés reçoivent périodiquement des rappels par e-mail avant la dépréciation. Regénérer ou recréer des index de recherche en texte intégral avec les composants de la version 2 avant que votre instance ne soit affectée. Si vous ne pouvez pas effectuer de mise à niveau immédiatement, contactez Microsoft support technique.
Azure SQL Database et Azure SQL Managed Instance sur la stratégie de mise à jour « Always-up-to-date » Les index de version 1 sont toujours pris en charge aujourd’hui, mais la suppression est planifiée. Les index nouvellement créés ou reconstruits commencent par défaut à utiliser la version 2. La version 1 de l’inventaire indexe et planifie à l’avance des reconstructions à l’aide de composants de la version 2 afin de minimiser les temps d’arrêt.

Calendrier d’abandon d’Azure SQL

S’applique à : Azure SQL Database et Azure SQL Managed Instance

Azure SQL Database et Azure SQL Managed Instance ne supprimez pas encore les fichiers binaires de la version 1. Ces offres font l’objet d’un abandon progressif afin de laisser le temps de reconstruire les index existants, à commencer par Azure SQL Managed Instance avec la stratégie de mise à jour de SQL Server 2025. Les clients concernés reçoivent régulièrement des rappels par e-mail avant l'abandon.

Une fois la version 1 dépréciée, les requêtes sur les index de version 1 échouent avec le message d’erreur :

Msg 30011, Level 16, State 1, Line 37
Full-text index version 1 is not supported by this instance configuration. Rebuild or recreate the index with database scoped configuration FULLTEXT_INDEX_VERSION = 2. For more information, see https://aka.ms/fts-version-upgrade. If unable to upgrade, contact support for assistance.

Les populations échouent également avec les erreurs suivantes dans le journal d'analyse :

Error: 30011, Severity: 16, State: 1.
Full-text index version 1 is not supported by this instance configuration. Rebuild or recreate the index with database scoped configuration FULLTEXT_INDEX_VERSION = 2. For more information, see https://aka.ms/fts-version-upgrade. If unable to upgrade, contact support for assistance.

Error: 30059, Severity: 16, State: 1.
A fatal error occurred during a full-text population and caused the population to be cancelled. Population type is: <population_type>; database name is <database_name> (id: <database_id>); catalog name is <catalog_name> (id: <catalog_id>); table name <table_name> (id: <table_id>). Fix the errors that are logged in the full-text crawl log. Then, resume the population. The basic Transact-SQL syntax for this is: ALTER FULLTEXT INDEX ON table_name RESUME POPULATION.