Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Berlaku untuk:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Artikel ini menjelaskan perubahan versi indeks teks lengkap di SQL Server 2025 (17.x) dan versi yang lebih baru. Ini mencakup perubahan perilaku, langkah-langkah migrasi yang diperlukan, dan biner komponen baru.
Perubahan versi indeks teks lengkap di SQL Server 2025
SQL Server 2025 (17.x) menghapus file biner pemecah kata, stemmer, dan filter versi lama dari instalasi SQL Server. Komponen-komponen ini dibangun kembali dengan set alat modern dan menawarkan dukungan yang diperluas untuk lebih banyak bahasa dan jenis dokumen. Komponen yang diinstal dengan SQL Server 2025 (17.x) disebut versi 2. Komponen yang diinstal dengan SQL Server 2022 (16.x) dan versi yang lebih lama disebut versi 1.
Setelah peningkatan di tempat, indeks teks lengkap yang ada memiliki index_version = 1 di sys.fulltext_indexes. Indeks yang baru dibuat menggunakan versi 2 dan komponen baru, kecuali Anda menentukan sebaliknya dengan menggunakan konfigurasi cakupan database FULLTEXT_INDEX_VERSION .
Perubahan komponen versi 2
Komponen versi 2 menambahkan dukungan bahasa dan jenis dokumen, menggunakan model kustomisasi baru, dan dapat mengembalikan hasil tokenisasi yang berbeda dari komponen versi 1.
Dukungan untuk bahasa baru
SQL Server 2025 (17.x) menambahkan dukungan untuk pengindeksan teks lengkap dalam tiga bahasa baru:
- Finlandia (LCID 1035)
- Hongaria (LCID 1038)
- Estonia (LCID 1061)
Dukungan untuk jenis dokumen baru
SQL Server 2025 (17.x) menambahkan dukungan untuk mengindeks ekstensi dokumen berikut secara default.
| Filter | 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 |
Hasil tidak terduga
Komponen baru di SQL Server 2025 (17.x) mungkin mengembalikan hasil yang tidak terduga ke aplikasi. Misalnya, pertimbangkan pemecah kata bahasa Inggris (LCID 1033):
| Istilah | Hasil dengan pemecah kata sebelumnya | Hasil dengan pemecah kata baru |
|---|---|---|
cat_dog |
cat_dog |
cat_dogcatdog |
$100 |
$100nn100usd |
\$100nn100\$ |
2026-01-09 |
2026-01-092026nn20260109 |
2026-01-09dd2026010920260109 |
Model kustomisasi
Indeks teks lengkap versi 2 tidak lagi membaca handler komponen dari registri Windows. Anda mengontrol kustomisasi melalui file JSON khusus instans. Untuk informasi selengkapnya, lihat Mengkustomisasi filter dan pemecah kata.
Opsi peningkatan dan migrasi
Karena SQL Server 2025 (17.x) menghapus semua biner versi 1, kueri teks lengkap dan populasi yang menggunakan indeks versi 1 gagal setelah upgrade in-place. Untuk informasi selengkapnya, lihat Perubahan signifikan pada fitur Mesin Basis Data di SQL Server 2025.
Gunakan salah satu pendekatan berikut setelah meningkatkan ke SQL Server 2025 (17.x) atau versi yang lebih baru, atau saat menyiapkan indeks versi 1 untuk penghentian di Azure SQL Database dan Azure SQL Managed Instance.
Menemukan indeks versi 1
Jalankan kueri berikut di setiap database yang menggunakan pencarian Full-Text untuk menemukan indeks yang masih menggunakan komponen versi 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;
Membangun kembali indeks yang ada dengan komponen versi 2
Bangun kembali indeks teks lengkap yang ada untuk menggunakan komponen versi 2. Verifikasi bahwa FULLTEXT_INDEX_VERSION diatur ke 2, lalu bangun kembali katalog teks lengkap.
SELECT *
FROM sys.database_scoped_configurations
WHERE [name] = 'FULLTEXT_INDEX_VERSION';
ALTER FULLTEXT CATALOG [FtCatalog] REBUILD;
Note
Operasi pembangunan ulang katalog membangun kembali semua indeks teks lengkap. Jika Anda ingin mengontrol urutan build indeks, atau mengurangi persyaratan sumber daya, hilangkan dan buat ulang indeks teks lengkap satu per satu.
Tetap gunakan komponen versi 1
Gunakan opsi ini hanya untuk instans SQL Server tempat Anda dapat mengelola file dalam penginstalan SQL Server.
Important
Versi 1 tidak digunakan lagi untuk SQL Server di Linux. Di SQL Server 2025 (17.x) dan versi yang lebih baru, mssql-server-fts paket tidak menyertakan biner versi 1. Mencoba menginstal paket mssql-server-fts dan mssql-server dengan versi yang tidak cocok tidak didukung, dan akan menghasilkan kegagalan teks penuh.
Jika Anda harus tetap menggunakan versi 1 untuk kompatibilitas aplikasi, atur FULLTEXT_INDEX_VERSION = 1 untuk menghindari peningkatan yang tidak diinginkan ke versi 2 selama pembangunan ulang.
ALTER DATABASE SCOPED CONFIGURATION
SET FULLTEXT_INDEX_VERSION = 1;
Selanjutnya, salin biner pemecah kata, stemmer, dan filter versi lama dari folder Binn milik instans yang lebih lama ke folder Binn milik instans target. Untuk referensi DLL dan pustaka dependen mana yang perlu Anda salin per bahasa atau jenis dokumen, lihat Biner filter teks lengkap dan Pemecah kata teks lengkap dan biner stemmer.
Untuk menyalin kumpulan lengkap biner versi 1 secara massal, salin skrip berikut ke file bernama 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)."
Jalankan skrip di jendela Admin PowerShell, di mana SourceBinn adalah jalur ke Binn folder SQL Server 2022 (16.x) atau instans sebelumnya yang berisi biner versi 1, dan TargetBinn merupakan jalur ke Binn folder SQL Server 2025 (17.x) atau yang lebih baru yang memerlukan dukungan versi 1 berkelanjutan.
.\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'
Status versi 1 dan garis waktu penghentian menurut lingkungan
garis waktu penghentian Azure SQL
Berlaku untuk: Azure SQL Database dan Azure SQL Managed Instance
Azure SQL Database dan Azure SQL Managed Instance belum menghapus biner versi 1. Penawaran ini mengalami penghentian bertahap untuk memungkinkan waktu untuk membangun kembali indeks yang ada, dimulai dengan Azure SQL Managed Instance pada kebijakan pembaruan SQL Server 2025. Pelanggan yang terpengaruh menerima pengingat email berkala sebelum penghentian.
Setelah versi 1 tidak digunakan lagi, kueri pada indeks versi 1 gagal dengan pesan kesalahan:
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.
Dan populasi gagal dengan kesalahan berikut dalam log perayapan:
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.