ALTER FULLTEXT INDEX (Transact-SQL)

Berlaku untuk:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

Mengubah properti indeks teks lengkap di SQL Server.

Konvensi sintaks transact-SQL

Sintaksis

ALTER FULLTEXT INDEX ON table_name
   { ENABLE
   | DISABLE
   | SET CHANGE_TRACKING [ = ] { MANUAL | AUTO | OFF }
   | ADD ( column_name
           [ TYPE COLUMN type_column_name ]
           [ LANGUAGE language_term ]
           [ STATISTICAL_SEMANTICS ]
           [ , ...n ]
         )
     [ WITH NO POPULATION ]
   | ALTER COLUMN column_name
     { ADD | DROP } STATISTICAL_SEMANTICS
     [ WITH NO POPULATION ]
   | DROP ( column_name [ , ...n ] )
     [ WITH NO POPULATION ]
   | START { FULL | INCREMENTAL | UPDATE } POPULATION
   | { STOP | PAUSE | RESUME } POPULATION
   | SET STOPLIST [ = ] { OFF | SYSTEM | stoplist_name }
     [ WITH NO POPULATION ]
   | SET SEARCH PROPERTY LIST [ = ] { OFF | property_list_name }
     [ WITH NO POPULATION ]
   }
[ ; ]

Catatan

Untuk melihat sintaks Transact-SQL untuk SQL Server 2014 (12.x) dan versi yang lebih lama, lihat Dokumentasi versi sebelumnya.

Argumen

table_name

Nama tabel atau tampilan terindeks yang berisi kolom atau kolom yang disertakan dalam indeks teks lengkap. Menentukan nama pemilik database dan tabel bersifat opsional.

AKTIFKAN | MENONAKTIFKAN

Memberi tahu SQL Server apakah akan mengumpulkan data indeks teks lengkap untuk table_name. AKTIFKAN mengaktifkan indeks teks lengkap; DISABLE menonaktifkan indeks teks lengkap. Tabel tidak akan mendukung kueri teks lengkap saat indeks dinonaktifkan.

Menonaktifkan indeks teks lengkap memungkinkan Anda menonaktifkan pelacakan perubahan tetapi mempertahankan indeks teks lengkap, yang dapat Anda aktifkan kembali kapan saja menggunakan ENABLE. Saat indeks teks lengkap dinonaktifkan, metadata indeks teks-penuh tetap berada dalam tabel sistem. Jika CHANGE_TRACKING dalam status diaktifkan (pembaruan otomatis atau manual) saat indeks teks lengkap dinonaktifkan, status indeks membeku, perayapan yang sedang berlangsung berhenti, dan perubahan baru pada data tabel tidak dilacak atau disebarkan ke indeks.

SET CHANGE_TRACKING { MANUAL | AUTO | NONAKTIF }

Menentukan apakah perubahan (pembaruan, penghapusan, atau penyisipan) yang dibuat pada kolom tabel yang dicakup oleh indeks teks lengkap akan disebarluaskan oleh SQL Server ke indeks teks lengkap. Perubahan data melalui WRITETEXT dan UPDATETEXT tidak tercermin dalam indeks teks lengkap, dan tidak diambil dengan pelacakan perubahan.

Catatan

Untuk informasi selengkapnya, lihat Interaksi Pelacakan Perubahan dan Parameter TANPA POPULASI.

  • MANUAL

    Menentukan bahwa perubahan terlacak disebarkan secara manual dengan memanggil ALTER FULLTEXT INDEX ... MULAI PERBARUI POPULASI pernyataan Transact-SQL (populasi manual). Anda dapat menggunakan SQL Server Agent untuk memanggil pernyataan Transact-SQL ini secara berkala.

  • AUTO

    Menentukan bahwa perubahan terlacak disebarkan secara otomatis saat data dimodifikasi dalam tabel dasar (populasi otomatis). Meskipun perubahan disebarluaskan secara otomatis, perubahan ini mungkin tidak langsung tercermin dalam indeks teks lengkap. AUTO adalah default.

  • TIDAK AKTIF

    Menentukan bahwa SQL Server tidak menyimpan daftar perubahan pada data terindeks.

TAMBAHKAN | drop column_name

Menentukan kolom yang akan ditambahkan atau dihapus dari indeks teks lengkap. Kolom atau kolom harus berjenis char, varchar, nchar, nvarchar, text, ntext, image, xml, varbinary, atau varbinary(max).

Gunakan klausa DROP hanya pada kolom yang telah diaktifkan sebelumnya untuk pengindeksan teks lengkap.

Gunakan TYPE COLUMN dan LANGUAGE dengan klausul ADD untuk mengatur properti ini pada column_name. Saat kolom ditambahkan, indeks teks lengkap pada tabel harus diisi ulang agar kueri teks lengkap terhadap kolom ini berfungsi.

Catatan

Apakah indeks teks lengkap diisi setelah kolom ditambahkan atau dihilangkan dari indeks teks lengkap bergantung pada apakah pelacakan perubahan diaktifkan dan apakah WITH NO POPULATION ditentukan. Untuk informasi selengkapnya, lihat Interaksi Pelacakan Perubahan dan Parameter TANPA POPULASI.

KETIK TYPE_COLUMN_NAME KOLOM

Menentukan nama kolom tabel, type_column_name, yang digunakan untuk menyimpan jenis dokumen untuk varbinary, varbinary(max), atau dokumen gambar . Kolom ini, yang dikenal sebagai kolom jenis, berisi ekstensi file yang disediakan pengguna (.doc, , .pdf.xls, dan sebagainya). Kolom jenis harus berjenis char, nchar, varchar, atau nvarchar.

Tentukan KOLOM TIPE type_column_name hanya jika column_name menentukan kolom varbinary, varbinary(max) atau gambar , di mana data disimpan sebagai data biner; jika tidak, SQL Server mengembalikan kesalahan.

Catatan

Pada waktu pengindeksan, Mesin Teks-Penuh menggunakan singkatan di kolom jenis setiap baris tabel untuk mengidentifikasi filter pencarian teks lengkap mana yang akan digunakan untuk dokumen dalam column_name. Filter memuat dokumen sebagai aliran biner, menghapus informasi pemformatan, dan mengirim teks dari dokumen ke komponen pemecah kata. Untuk informasi selengkapnya, lihat Mengonfigurasi dan Mengelola Filter untuk Pencarian.

LANGUAGE_TERM BAHASA

Bahasa data yang disimpan dalam column_name.

language_term bersifat opsional dan dapat ditentukan sebagai string, bilangan bulat, atau nilai heksadesimal yang sesuai dengan pengidentifikasi lokal (LCID) bahasa. Jika language_term ditentukan, bahasa yang diwakilinya diterapkan ke semua elemen kondisi pencarian. Jika tidak ada nilai yang ditentukan, bahasa teks lengkap default instans SQL Server digunakan.

Gunakan prosedur tersimpan sp_configure untuk mengakses informasi tentang bahasa teks lengkap default instans SQL Server.

Saat ditentukan sebagai string, language_term sesuai dengan alias nilai kolom dalam sys.syslanguages tabel sistem. String harus diapit dalam tanda kutip tunggal, seperti dalam 'language_term'. Ketika ditentukan sebagai bilangan bulat, language_term adalah LCID aktual yang mengidentifikasi bahasa. Ketika ditentukan sebagai nilai heksadesimal, language_term adalah 0x diikuti oleh nilai heksadesimal LCID. Nilai heks tidak boleh melebihi delapan digit, termasuk nol di depannya.

Jika nilai dalam format kumpulan karakter byte ganda (DBCS), SQL Server mengonversinya ke Unicode.

Sumber daya, seperti pemecah kata dan stemmer, harus diaktifkan untuk bahasa yang ditentukan sebagai language_term. Jika sumber daya tersebut tidak mendukung bahasa yang ditentukan, SQL Server mengembalikan kesalahan.

Untuk kolom non-BLOB dan non-XML yang berisi data teks dalam beberapa bahasa, atau untuk kasus ketika bahasa teks yang disimpan dalam kolom tidak diketahui, gunakan sumber daya bahasa netral (0x0). Untuk dokumen yang disimpan dalam kolom jenis XML atau BLOB, pengodean bahasa dalam dokumen digunakan pada waktu pengindeksan. Misalnya, di kolom XML, xml:lang atribut dalam dokumen XML mengidentifikasi bahasa tersebut. Pada waktu kueri, nilai yang sebelumnya ditentukan dalam language_term menjadi bahasa default yang digunakan untuk kueri teks lengkap kecuali language_term ditentukan sebagai bagian dari kueri teks lengkap.

STATISTICAL_SEMANTICS

Berlaku untuk: SQL Server 2012 (11.x) dan versi yang lebih baru.

Membuat frasa kunci tambahan dan indeks kesamaan dokumen yang merupakan bagian dari pengindeksan semantik statistik. Untuk informasi selengkapnya, lihat Pencarian Semantik (SQL Server).

[ , ... n ]

Menunjukkan bahwa beberapa kolom dapat ditentukan untuk klausa ADD, ALTER, atau DROP. Saat beberapa kolom ditentukan, pisahkan kolom ini dengan koma.

TANPA POPULASI

Menentukan bahwa indeks teks lengkap tidak akan diisi setelah operasi kolom ADD atau DROP atau operasi SET STOPLIST. Indeks hanya diisi jika pengguna menjalankan START... Perintah POPULATION.

Ketika TIDAK ADA POPULASI yang ditentukan, SQL Server tidak mengisi indeks. Indeks diisi hanya setelah pengguna memberikan ALTER FULLTEXT INDEX... Perintah START POPULATION. Ketika TIDAK ADA POPULASI tidak ditentukan, SQL Server mengisi indeks.

Jika CHANGE_TRACKING diaktifkan dan TANPA POPULASI ditentukan, SQL Server mengembalikan kesalahan. Jika CHANGE_TRACKING diaktifkan dan TANPA POPULASI tidak ditentukan, SQL Server melakukan populasi penuh pada indeks.

Catatan

Untuk informasi selengkapnya, lihat Interaksi Pelacakan Perubahan dan Parameter TANPA POPULASI.

{ADD | DROP } STATISTICAL_SEMANTICS

Berlaku untuk: SQL Server 2012 (11.x) dan versi yang lebih baru.

Mengaktifkan atau menonaktifkan pengindeksan semantik statistik untuk kolom yang ditentukan. Untuk informasi selengkapnya, lihat Pencarian Semantik (SQL Server).

MULAI { PENUH | INKREMENTAL | UPDATE } POPULASI

Memberi tahu SQL Server untuk memulai populasi indeks teks lengkap table_name. Jika populasi indeks teks lengkap sudah berlangsung, SQL Server mengembalikan peringatan dan tidak memulai populasi baru.

  • FULL

    Menentukan bahwa setiap baris tabel diambil untuk pengindeksan teks lengkap meskipun baris telah diindeks.

  • BERTAMBAH BERTAHAP

    Menentukan bahwa hanya baris yang dimodifikasi sejak populasi terakhir yang diambil untuk pengindeksan teks lengkap. INCREMENTAL dapat diterapkan hanya jika tabel memiliki kolom tanda waktu jenis. Jika tabel dalam katalog teks lengkap tidak berisi kolom tanda waktu jenis, tabel mengalami populasi PENUH.

  • UPDATE

    Menentukan pemrosesan semua penyisipan, pembaruan, atau penghapusan sejak terakhir kali indeks pelacakan perubahan diperbarui. Populasi pelacakan perubahan harus diaktifkan pada tabel, tetapi indeks pembaruan latar belakang atau pelacakan perubahan otomatis tidak boleh diaktifkan.

{BERHENTI | JEDA | RESUME } POPULASI

Menghentikan, atau menjeda populasi apa pun yang sedang berlangsung; atau menghentikan atau melanjutkan populasi yang dijeda.

STOP POPULATION tidak menghentikan pelacakan perubahan otomatis atau indeks pembaruan latar belakang. Untuk menghentikan pelacakan perubahan, gunakan SET CHANGE_TRACKING NONAKTIF.

JEDA POPULASI dan RESUME POPULASI hanya dapat digunakan untuk populasi penuh. Mereka tidak relevan dengan jenis populasi lain karena populasi lain melanjutkan perayapan dari tempat perayapan berhenti.

SET STOPLIST { OFF | SYSTEM | stoplist_name }

Mengubah daftar henti teks lengkap yang terkait dengan indeks, jika ada.

  • TIDAK AKTIF

    Menentukan bahwa tidak ada daftar henti yang terkait dengan indeks teks lengkap.

  • SISTEM

    Menentukan bahwa STOPLIST sistem teks lengkap default harus digunakan untuk indeks teks lengkap ini.

  • stoplist_name

    Menentukan nama daftar henti yang akan dikaitkan dengan indeks teks lengkap.

Untuk informasi selengkapnya, lihat Mengonfigurasi dan Mengelola Stopwords dan Stoplists untuk Pencarian Teks Lengkap.

ATUR DAFTAR PROPERTI PENCARIAN { NONAKTIF | property_list_name } [ TANPA POPULASI ]

Berlaku untuk: SQL Server 2012 (11.x) dan versi yang lebih baru.

Mengubah daftar properti pencarian yang terkait dengan indeks, jika ada.

  • TIDAK AKTIF

    Menentukan bahwa tidak ada daftar properti yang terkait dengan indeks teks lengkap. Saat Anda menonaktifkan daftar properti pencarian indeks teks lengkap (ALTER FULLTEXT INDEX ... SET SEARCH PROPERTY LIST OFF), pencarian properti pada tabel dasar tidak lagi dimungkinkan.

    Secara default, saat Anda menonaktifkan daftar properti pencarian yang ada, indeks teks lengkap secara otomatis diisi ulang. Jika Anda menentukan WITH NO POPULATION saat menonaktifkan daftar properti pencarian, repopulasi otomatis tidak terjadi. Namun, kami sarankan Anda akhirnya menjalankan populasi penuh pada indeks teks lengkap ini sesuai keinginan Anda. Mengisi ulang indeks teks lengkap menghapus metadata khusus properti dari setiap properti pencarian yang dihilangkan, membuat indeks teks lengkap lebih kecil dan lebih efisien.

  • property_list_name

    Menentukan nama daftar properti pencarian yang akan dikaitkan dengan indeks teks lengkap.

    Menambahkan daftar properti pencarian ke indeks teks lengkap memerlukan pengisian ulang indeks untuk mengindeks properti pencarian yang terdaftar untuk daftar properti pencarian terkait. Jika Anda menentukan WITH NO POPULATION saat menambahkan daftar properti pencarian, Anda perlu menjalankan populasi pada indeks, pada waktu yang tepat.

Penting

Jika indeks teks lengkap sebelumnya dikaitkan dengan pencarian yang berbeda, indeks harus dibangun ulang daftar properti untuk membawa indeks ke status konsisten. Indeks segera dipotong dan kosong sampai populasi penuh berjalan. Untuk informasi selengkapnya, lihat Mengubah Daftar Properti Pencarian Penyebab Pembangunan Ulang Indeks.

Catatan

Anda dapat mengaitkan daftar properti pencarian tertentu dengan lebih dari satu indeks teks lengkap dalam database yang sama.

Menemukan daftar properti pencarian pada database saat ini

Untuk informasi selengkapnya tentang daftar properti pencarian, lihat Properti Dokumen Pencarian dengan Daftar Properti Pencarian.

Keterangan

Pada kolom xml , Anda dapat membuat indeks teks lengkap yang mengindeks konten elemen XML, tetapi mengabaikan markup XML. Nilai atribut adalah teks lengkap yang diindeks kecuali nilai numerik. Tag elemen digunakan sebagai batas token. Dokumen XML atau HTML yang terbentuk dengan baik dan fragmen yang berisi beberapa bahasa didukung. Untuk informasi selengkapnya, lihat Menggunakan Pencarian Teks Lengkap dengan Kolom XML.

Kami menyarankan agar kolom kunci indeks adalah jenis data bilangan bulat. Ini menyediakan pengoptimalan pada waktu eksekusi kueri.

ALTER FULLTEXT INDEX tidak dapat ditempatkan di dalam transaksi pengguna. Pernyataan ini harus dijalankan dalam transaksi implisitnya sendiri.

Untuk informasi selengkapnya tentang indeks teks lengkap, lihat Membuat dan Mengelola Indeks Teks Lengkap.

Interaksi pelacakan perubahan dan parameter NO POPULATION

Apakah indeks teks lengkap diisi tergantung pada apakah pelacakan perubahan diaktifkan dan apakah WITH NO POPULATION ditentukan dalam pernyataan ALTER FULLTEXT INDEX. Tabel berikut ini meringkas hasil interaksi mereka.

Pelacakan perubahan TANPA POPULASI Hasil
Tidak diaktifkan Tidak ditentukan Populasi penuh dilakukan pada indeks.
Tidak diaktifkan Ditentukan Tidak ada populasi indeks yang terjadi sampai ALTER FULLTEXT INDEX... Pernyataan START POPULATION dikeluarkan.
Diaktifkan Ditentukan Kesalahan dimunculkan, dan indeks tidak diubah.
Diaktifkan Tidak ditentukan Populasi penuh dilakukan pada indeks.

Untuk informasi selengkapnya tentang mengisi indeks teks lengkap, lihat Mengisi Indeks Teks Lengkap.

Mengubah daftar properti pencarian menyebabkan pembangunan ulang indeks

Pertama kali indeks teks lengkap dikaitkan dengan daftar properti pencarian, indeks harus diisi ulang ke istilah pencarian khusus properti indeks. Data indeks yang ada tidak terpotong.

Namun, jika Anda mengaitkan indeks teks lengkap dengan daftar properti yang berbeda, indeks akan dibangun kembali. Membangun kembali segera memotong indeks teks lengkap, menghapus semua data yang ada, dan indeks harus diisi ulang. Sementara populasi berkembang, kueri teks lengkap pada pencarian tabel dasar hanya pada baris tabel yang telah diindeks oleh populasi. Data indeks yang diisi ulang mencakup metadata dari properti terdaftar dari daftar properti pencarian yang baru ditambahkan.

Skenario yang menyebabkan pembangunan kembali meliputi:

  • Beralih langsung ke daftar properti pencarian yang berbeda (lihat "Skenario A," nanti di bagian ini).

  • Nonaktifkan daftar properti pencarian, dan kemudian kaitkan indeks dengan daftar properti pencarian apa pun (lihat "Skenario B," nanti di bagian ini).

Catatan

Untuk informasi selengkapnya tentang cara kerja pencarian teks lengkap dengan daftar properti pencarian, lihat Cari Properti Dokumen dengan Daftar Properti Pencarian. Untuk informasi tentang populasi penuh, lihat Mengisi Indeks Teks Lengkap.

Skenario A: Beralih langsung ke daftar properti pencarian yang berbeda

  1. Indeks teks lengkap dibuat dengan table_1 daftar spl_1properti pencarian :

    CREATE FULLTEXT INDEX ON table_1 (column_name) KEY INDEX unique_key_index
        WITH SEARCH PROPERTY LIST=spl_1,
        CHANGE_TRACKING OFF, NO POPULATION;
    
  2. Populasi penuh dijalankan pada indeks teks lengkap:

    ALTER FULLTEXT INDEX ON table_1 START FULL POPULATION;
    
  3. Indeks teks lengkap kemudian dikaitkan dengan daftar properti pencarian yang berbeda, spl_2, menggunakan pernyataan berikut:

    ALTER FULLTEXT INDEX ON table_1 SET SEARCH PROPERTY LIST spl_2;
    

    Pernyataan ini menyebabkan populasi penuh, perilaku default. Namun, sebelum memulai populasi ini, Mesin Teks-Penuh secara otomatis memotong indeks.

Skenario B: Nonaktifkan daftar properti pencarian dan kemudian kaitkan indeks dengan daftar properti pencarian apa pun

  1. Indeks teks lengkap dibuat pada table_1 dengan daftar spl_1properti pencarian , diikuti oleh populasi penuh otomatis (perilaku default):

    CREATE FULLTEXT INDEX ON table_1 (column_name) KEY INDEX unique_key_index
        WITH SEARCH PROPERTY LIST=spl_1;
    
  2. Daftar properti pencarian dinonaktifkan, sebagai berikut:

    ALTER FULLTEXT INDEX ON table_1
        SET SEARCH PROPERTY LIST OFF WITH NO POPULATION;
    
  3. Indeks teks lengkap sekali lagi terkait daftar properti pencarian yang sama atau yang berbeda.

    Misalnya, pernyataan berikut mengaitkan kembali indeks teks lengkap dengan daftar properti pencarian asli, spl_1:

    ALTER FULLTEXT INDEX ON table_1 SET SEARCH PROPERTY LIST spl_1;
    

    Pernyataan ini memulai populasi penuh, perilaku default.

    Catatan

    Pembangunan ulang juga akan diperlukan untuk daftar properti pencarian yang berbeda, seperti spl_2.

Izin

Pengguna harus memiliki izin UBAH pada tabel atau tampilan terindeks, atau menjadi anggota peran server tetap sysadmin , atau peran database tetap db_ddladmin atau db_owner .

Jika SET STOPLIST ditentukan, pengguna harus memiliki izin REFERENSI pada daftar henti. Jika SET SEARCH PROPERTY LIST ditentukan, pengguna harus memiliki izin REFERENCES pada daftar properti pencarian. Pemilik daftar henti atau daftar properti pencarian yang ditentukan dapat memberikan izin REFERENCES, jika pemilik memiliki izin ALTER FULLTEXT CATALOG.

Catatan

Publik diberikan izin REFERENCES ke daftar henti default yang dikirim dengan SQL Server.

Contoh

J. Mengatur pelacakan perubahan manual

Contoh berikut mengatur pelacakan perubahan manual pada indeks teks lengkap pada JobCandidate tabel.

USE AdventureWorks2022;
GO
ALTER FULLTEXT INDEX ON HumanResources.JobCandidate
   SET CHANGE_TRACKING MANUAL;
GO

B. Mengaitkan daftar properti dengan indeks teks lengkap

Berlaku untuk: SQL Server 2012 (11.x) dan versi yang lebih baru.

Contoh berikut mengaitkan DocumentPropertyList daftar properti dengan indeks teks lengkap pada Production.Document tabel. Pernyataan ALTER FULLTEXT INDEX ini memulai populasi penuh, yang merupakan perilaku default dari klausul SET SEARCH PROPERTY LIST.

Catatan

Untuk contoh yang membuat DocumentPropertyList daftar properti, lihat MEMBUAT DAFTAR PROPERTI PENCARIAN (Transact-SQL).

USE AdventureWorks2022;
GO
ALTER FULLTEXT INDEX ON Production.Document
   SET SEARCH PROPERTY LIST DocumentPropertyList;
GO

C. Menghapus daftar properti pencarian

Berlaku untuk: SQL Server 2012 (11.x) dan versi yang lebih baru.

Contoh berikut menghapus DocumentPropertyList daftar properti dari indeks teks lengkap pada Production.Document. Dalam contoh ini, tidak ada terburu-buru untuk menghapus properti dari indeks, sehingga opsi WITH NO POPULATION ditentukan. Namun, pencarian tingkat properti lebih lama diizinkan terhadap indeks teks lengkap ini.

USE AdventureWorks2022;
GO
ALTER FULLTEXT INDEX ON Production.Document
   SET SEARCH PROPERTY LIST OFF WITH NO POPULATION;
GO

D. Memulai populasi penuh

Contoh berikut memulai populasi penuh pada indeks teks lengkap pada JobCandidate tabel.

USE AdventureWorks2022;
GO
ALTER FULLTEXT INDEX ON HumanResources.JobCandidate
   START FULL POPULATION;
GO

Baca juga