MEMBUAT INDEKS FULLTEXT (Transact-SQL)

Berlaku untuk:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

Membuat indeks teks lengkap pada tabel atau tampilan terindeks dalam database di SQL Server. Hanya satu indeks teks lengkap yang diizinkan per tabel atau tampilan terindeks, dan setiap indeks teks lengkap berlaku untuk satu tabel atau tampilan terindeks. Indeks teks lengkap dapat berisi hingga 1024 kolom.

Konvensi sintaks transact-SQL

Sintaksis

CREATE FULLTEXT INDEX ON table_name
   [ ( { column_name
             [ TYPE COLUMN type_column_name ]
             [ LANGUAGE language_term ]
             [ STATISTICAL_SEMANTICS ]
        } [ , ...n ]
      ) ]
    KEY INDEX index_name
    [ ON <catalog_filegroup_option> ]
    [ WITH ( <with_option> [ , ...n ] ) ]
[;]

<catalog_filegroup_option>::=
 {
    fulltext_catalog_name
 | ( fulltext_catalog_name , FILEGROUP filegroup_name )
 | ( FILEGROUP filegroup_name , fulltext_catalog_name )
 | ( FILEGROUP filegroup_name )
 }

<with_option>::=
 {
   CHANGE_TRACKING [ = ] { MANUAL | AUTO | OFF [ , NO POPULATION ] }
 | STOPLIST [ = ] { OFF | SYSTEM | stoplist_name }
 | SEARCH PROPERTY LIST [ = ] property_list_name
 }

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.

column_name

Nama kolom yang disertakan dalam indeks teks lengkap. Hanya kolom tipe karakter, varchar, nchar, nvarchar, teks, ntext, gambar, xml, dan varbinary(maks) yang dapat diindeks untuk pencarian teks lengkap. Untuk menentukan beberapa kolom, ulangi klausa column_name sebagai berikut:

BUAT INDEKS FULLTEXT PADA table_name (column_name1 [...], column_name2 [...]) ...

KETIK TYPE_COLUMN_NAME KOLOM

Menentukan nama kolom tabel, type_column_name, yang digunakan untuk menyimpan jenis dokumen untuk dokumen varbinary(maks) atau 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(maks) 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 tidak ada nilai yang ditentukan, bahasa default instans SQL Server digunakan.

Jika language_term ditentukan, bahasa yang diwakilinya digunakan untuk mengindeks data yang disimpan dalam kolom karakter, nchar, varchar, nvarchar, teks, dan ntext . Bahasa ini adalah bahasa default yang digunakan pada waktu kueri jika language_term tidak ditentukan sebagai bagian dari predikat teks lengkap terhadap kolom.

Saat ditentukan sebagai string, language_term sesuai dengan nilai kolom alias 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_term0x 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.

Gunakan prosedur tersimpan sp_configure untuk mengakses informasi tentang bahasa teks lengkap default instans Microsoft SQL Server. Untuk informasi selengkapnya, lihat sp_configure (Transact-SQL).

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, mungkin sesuai bagi Anda untuk menggunakan sumber daya bahasa netral (0x0). Namun, pertama-tama Anda harus memahami kemungkinan konsekuensi penggunaan sumber daya bahasa netral (0x0). Untuk informasi tentang kemungkinan solusi dan konsekuensi penggunaan sumber daya bahasa netral (0x0), lihat Memilih Bahasa Saat Membuat Indeks Teks Lengkap.

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 (SQL Server 2012 (11.x) dan 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).

index_name INDEKS KUNCI

Nama indeks kunci unik pada table_name. INDEKS KUNCI harus berupa kolom unik, kunci tunggal, tidak dapat diubah ke null. Pilih indeks kunci unik terkecil untuk kunci unik teks lengkap. Untuk performa terbaik, kami merekomendasikan jenis data bilangan bulat untuk kunci teks lengkap.

fulltext_catalog_name

Katalog teks lengkap yang digunakan untuk indeks teks lengkap. Katalog harus sudah ada di database. Klausa ini opsional. Jika tidak ditentukan, katalog default akan digunakan. Jika tidak ada katalog default, SQL Server mengembalikan kesalahan.

filegroup_name FILEGROUP

Membuat indeks teks lengkap yang ditentukan pada grup file yang ditentukan. Grup file harus sudah ada. Jika klausul FILEGROUP tidak ditentukan, indeks teks lengkap ditempatkan dalam grup file yang sama dengan tabel dasar atau tampilan untuk tabel yang tidak dipartisi, atau di grup file utama untuk tabel yang dipartisi.

CHANGE_TRACKING [ = ] { MANUAL | AUTO | OFF [ , NO POPULATION ] }

Menentukan apakah perubahan (pembaruan, penghapusan, atau penyisipan) yang dibuat pada kolom tabel yang dicakup oleh indeks teks-penuh 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.

  • MANUAL

    Menentukan bahwa perubahan terlacak harus disebarluaskan 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.

OFF [ , TIDAK ADA POPULASI ]

Menentukan bahwa SQL Server tidak menyimpan daftar perubahan pada data terindeks. Ketika TIDAK ADA POPULASI yang tidak ditentukan, SQL Server mengisi indeks sepenuhnya setelah dibuat.

Opsi NO POPULATION hanya dapat digunakan saat CHANGE_TRACKING NONAKTIF. Ketika TIDAK ADA POPULASI yang ditentukan, SQL Server tidak mengisi indeks setelah dibuat. Indeks hanya diisi setelah pengguna menjalankan perintah ALTER FULLTEXT INDEX dengan klausul START FULL POPULATION atau START INCREMENTAL POPULATION.

STOPLIST [ = ] { OFF | SYSTEM | stoplist_name }

Mengaitkan daftar henti teks lengkap dengan indeks. Indeks tidak diisi dengan token apa pun yang merupakan bagian dari daftar henti yang ditentukan. Jika STOPLIST tidak ditentukan, SQL Server mengaitkan daftar henti teks lengkap sistem dengan indeks.

  • 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.

DAFTAR PROPERTI PENCARIAN [ = ] property_list_name

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

Mengaitkan daftar properti pencarian dengan indeks.

  • TIDAK AKTIF

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

  • property_list_name

    Menentukan nama daftar properti pencarian untuk dikaitkan dengan indeks teks lengkap.

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.

CREATE 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.

Izin

Pengguna harus memiliki REFERENCES izin pada katalog teks lengkap dan memiliki ALTER izin pada tabel atau tampilan terindeks, atau menjadi anggota sysadmin peran server tetap, atau db_owner, atau db_ddladmin peran database tetap.

Jika SET STOPLIST ditentukan, pengguna harus memiliki izin REFERENSI pada daftar henti yang ditentukan. Pemilik STOPLIST dapat memberikan izin ini.

Catatan

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

Contoh

J. Membuat indeks unik, katalog teks lengkap, dan indeks teks lengkap

Contoh berikut membuat indeks unik pada JobCandidateID kolom HumanResources.JobCandidate tabel database sampel AdventureWorks2022. Contoh kemudian membuat katalog teks lengkap default, ft. Terakhir, contoh membuat indeks teks lengkap pada Resume kolom, menggunakan ft katalog dan daftar henti sistem.

CREATE UNIQUE INDEX ui_ukJobCand ON HumanResources.JobCandidate(JobCandidateID);
CREATE FULLTEXT CATALOG ft AS DEFAULT;
CREATE FULLTEXT INDEX ON HumanResources.JobCandidate(Resume)
   KEY INDEX ui_ukJobCand
   WITH STOPLIST = SYSTEM;
GO

B. Membuat indeks teks lengkap pada beberapa kolom tabel

Contoh berikut membuat katalog teks lengkap, production_catalog, dalam AdventureWorks database sampel. Contoh kemudian membuat indeks teks lengkap yang menggunakan katalog baru ini. Indeks teks lengkap ada di ReviewerNamekolom , EmailAddress, dan Comments dari Production.ProductReview. Untuk setiap kolom, contoh menentukan LCID bahasa Inggris, 1033, yang merupakan bahasa data dalam kolom. Indeks teks lengkap ini menggunakan indeks kunci unik yang ada, PK_ProductReview_ProductReviewID. Seperti yang disarankan, kunci indeks ini ada di kolom bilangan bulat, ProductReviewID.

CREATE FULLTEXT CATALOG production_catalog;
GO

CREATE FULLTEXT INDEX ON Production.ProductReview (
    ReviewerName LANGUAGE 1033,
    EmailAddress LANGUAGE 1033,
    Comments LANGUAGE 1033
) KEY INDEX PK_ProductReview_ProductReviewID ON production_catalog;
GO

C. Membuat indeks teks lengkap dengan daftar properti pencarian tanpa mengisinya

Contoh berikut membuat indeks teks lengkap pada Titlekolom Production.Document , DocumentSummary, dan Document tabel. Contoh menentukan LCID bahasa Inggris, 1033, yang merupakan bahasa data dalam kolom. Indeks teks lengkap ini menggunakan katalog teks lengkap default dan indeks kunci unik yang ada, PK_Document_DocumentID. Seperti yang disarankan, kunci indeks ini ada di kolom bilangan bulat, DocumentID.

Contoh menentukan daftar henti SISTEM. Ini juga menentukan daftar properti pencarian, DocumentPropertyList; untuk contoh yang membuat daftar properti ini, lihat MEMBUAT DAFTAR PROPERTI PENCARIAN (Transact-SQL).

Contoh menentukan bahwa pelacakan perubahan tidak aktif tanpa populasi. Kemudian, selama jam sibuk, contohnya menggunakan pernyataan ALTER FULLTEXT INDEX untuk memulai populasi penuh pada indeks baru dan mengaktifkan pelacakan perubahan otomatis.

CREATE FULLTEXT INDEX ON Production.Document (
    Title LANGUAGE 1033,
    DocumentSummary LANGUAGE 1033,
    Document TYPE COLUMN FileExtension LANGUAGE 1033
) KEY INDEX PK_Document_DocumentID
WITH STOPLIST = SYSTEM,
    SEARCH PROPERTY LIST = DocumentPropertyList,
    CHANGE_TRACKING OFF,
    NO POPULATION;
GO

Kemudian, pada waktu di luar puncak, indeks diisi:

ALTER FULLTEXT INDEX ON Production.Document SET CHANGE_TRACKING AUTO;
GO

Baca juga