Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
platí pro: SQL Server
Azure SQL Database
Azure SQL Managed Instance
Tento článek popisuje změnu verze fulltextového indexu v SQL Server 2025 (17.x) a novějších verzích. Řeší změny chování, požadované kroky migrace a binární soubory nových komponent.
Změny verze fulltextového indexu v SQL Server 2025
SQL Server 2025 (17.x) odstraňuje z instalace SQL Server zastaralé binární soubory modulu word breaker, stemmeru a filtru. Tyto komponenty jsou znovu sestaveny pomocí moderní sady nástrojů a nabízejí rozšířenou podporu pro více jazyků a typů dokumentů. Komponenty nainstalované s SQL Server 2025 (17.x) se nazývají verze 2. Komponenty nainstalované s SQL Server 2022 (16.x) a staršími verzemi se nazývají verze 1.
Po upgradu na místě mají existující fulltextové indexy hodnotu index_version = 1 v sys.fulltext_indexes. Nově vytvořené indexy používají verzi 2 a nové komponenty, pokud neurčíte jinak pomocí konfigurace s oborem databáze FULLTEXT_INDEX_VERSION .
Změny součástí verze 2
Komponenty verze 2 přidávají podporu jazyka a typu dokumentu, používají nový model přizpůsobení a můžou vracet různé výsledky tokenizace než součásti verze 1.
Podpora pro nové jazyky
SQL Server 2025 (17.x) přidává podporu fulltextového indexování ve třech nových jazycích:
- Finština (LCID 1035)
- Maďarština (LCID 1038)
- Estonština (LCID 1061)
Podpora nových typů dokumentů
SQL Server 2025 (17.x) ve výchozím nastavení přidává podporu indexování následujících rozšíření dokumentů.
| Filtr | 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 |
Neočekávané výsledky
Nové komponenty v SQL Serveru 2025 (17.x) můžou vrátit do aplikací neočekávané výsledky. Představte si například dělení slov v angličtině (LCID 1033):
| Termín | Výsledky s předchozí děličkou slov | Výsledky s novým oddělovačem slov |
|---|---|---|
cat_dog |
cat_dog |
cat_dogcatdog |
$100 |
$100nn100usd |
\$100nn100\$ |
2026-01-09 |
2026-01-092026nn20260109 |
2026-01-09dd2026010920260109 |
Model přizpůsobení
Fulltextové indexy verze 2 už nečtou obslužné rutiny komponent z registru Windows. Přizpůsobení můžete řídit prostřednictvím souboru JSON specifického pro instanci. Další informace naleznete v tématu Přizpůsobení filtrů a dělení slov.
Možnosti upgradu a migrace
Vzhledem k tomu, že SQL Server 2025 (17.x) odebere všechny binární soubory verze 1, plně textové dotazy a populace, které používají indexy verze 1, selžou po místní upgradu. Další informace najdete v tématu Závažné změny funkcí databázového stroje v SQL Server 2025.
Po upgradu na SQL Server 2025 (17.x) nebo novějších verzích použijte jeden z následujících přístupů nebo při přípravě indexů verze 1 pro vyřazení Azure SQL Database a Azure SQL Managed Instance.
Vyhledání indexů verze 1
V každé databázi, která používá Full-Text Search, spusťte následující dotaz a vyhledejte indexy, které stále používají komponenty verze 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;
Opětovné sestavení existujících indexů s komponentami verze 2
Znovu sestavte existující fulltextové indexy tak, aby používaly součásti verze 2. Ověřte, že FULLTEXT_INDEX_VERSION je nastavena na 2, a potom znovu sestavte fulltextové katalogy.
SELECT *
FROM sys.database_scoped_configurations
WHERE [name] = 'FULLTEXT_INDEX_VERSION';
ALTER FULLTEXT CATALOG [FtCatalog] REBUILD;
Note
Operace opětovného sestavení katalogu znovu sestaví všechny fulltextové indexy. Pokud chcete řídit pořadí sestavení indexu nebo snížit požadavky na prostředky, odstraňte a znovu vytvořte fulltextové indexy jednotlivě.
Pokračujte v používání komponent verze 1
Tuto možnost použijte pouze pro SQL Server instance, ve kterých můžete spravovat soubory v instalaci SQL Server.
Important
Verze 1 je pro SQL Server v Linuxu zastaralá. V SYSTÉMU SQL Server 2025 (17.x) a novějších verzích mssql-server-fts balíček neobsahuje binární soubory verze 1. Pokus o instalaci neslučitelných verzí mssql-server-fts a mssql-server balíčků není podporován a výsledkem jsou celkové chyby.
Pokud potřebujete zůstat ve verzi 1 kvůli kompatibilitě aplikací, nastavte FULLTEXT_INDEX_VERSION = 1 , aby se při opětovném sestavení zabránilo neúmyslnému upgradu na verzi 2.
ALTER DATABASE SCOPED CONFIGURATION
SET FULLTEXT_INDEX_VERSION = 1;
V dalším kroku zkopírujte starší binární soubory modulu pro dělení slov, stemmeru a filtru ze složky starší instance Binn do složky cílové instance Binn. Přehled toho, které soubory DLL a závislé knihovny je třeba zkopírovat pro jednotlivé jazyky nebo typy dokumentů, najdete v tématech Binární soubory fulltextového filtru a Binární soubory fulltextového děliče slov a stemmeru.
Chcete-li hromadně zkopírovat úplnou sadu binárních souborů verze 1, zkopírujte následující skript do souboru s názvem 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)."
Spusťte skript v okně PowerShellu pro správce, kde SourceBinn je cesta ke složce SQL Server 2022 (16.x) nebo starší instance obsahující binární soubory verze 1 a Binn je cesta ke TargetBinnBinn složce SQL Server 2025 (17.x) nebo novější instance, která vyžaduje trvalou podporu verze 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'
Stav verze 1 a časová osa vyřazení podle prostředí
| Životní prostředí | Status | Vyžaduje se akce |
|---|---|---|
| SQL Server 2025 (17.x) a novější verze | Binární soubory verze 1 se odeberou z instalace SQL Server. Po upgradu na místě selhávají dotazy a populace verze 1. | Znovu sestavte nebo znovu vytvořte fulltextové indexy s komponentami verze 2. Pokud k zajištění kompatibility potřebujete verzi 1, použijte verzi 1, pouze pokud je podporovaná. |
| Azure SQL Managed Instance v rámci zásad aktualizací SQL Serveru 2025 | Ukončení podpory verze 1 probíhá postupně. Ovlivnění zákazníci dostanou pravidelné e-mailové připomenutí před vyřazením. | Znovu sestavte nebo znovu vytvořte fulltextové indexy s komponentami verze 2 dříve, než bude vaše instance ovlivněna. Pokud nemůžete provést upgrade okamžitě, obraťte se na podporu Microsoft. |
| Azure SQL Database a Azure SQL Managed Instance v rámci zásady aktualizací „Always-up-to-date“ | Indexy verze 1 jsou stále podporovány dnes, ale odebrání je plánováno. Nově vytvořené nebo znovu vytvořené indexy se začnou používat ve výchozím nastavení verze 2. | Předem vytvořte indexy inventáře verze 1 a naplánujte přebudování pomocí komponent verze 2, abyste minimalizovali prostoje. |
Harmonogram vyřazení Azure SQL
platí pro: Azure SQL Database a Azure SQL Managed Instance
Azure SQL Database a Azure SQL Managed Instance ještě neodeberou binární soubory verze 1. Tyto nabídky procházejí fázovaným vyřazením, aby bylo možné znovu sestavit existující indexy, počínaje Azure SQL Managed Instance v zásadách aktualizace SQL Server 2025. Ovlivnění zákazníci dostanou pravidelné e-mailové připomenutí před vyřazením.
Po ukončení podpory verze 1 dotazy na indexy verze 1 selžou s chybovým hlášením:
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.
A populace selžou s následujícími chybami v protokolu procházení:
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.