Bagikan melalui


Membuat dan Mengelola Indeks Teks Lengkap

Informasi dalam indeks teks lengkap digunakan oleh mesin Full-Text untuk mengkompilasi kueri teks lengkap yang dapat dengan cepat mencari tabel untuk kata atau kombinasi kata tertentu. Indeks teks lengkap menyimpan informasi tentang kata-kata penting dan lokasinya dalam satu atau beberapa kolom tabel database. Indeks teks lengkap adalah jenis khusus indeks fungsi berbasis token yang dibangun dan dikelola oleh Full-Text Engine untuk SQL Server. Proses membangun indeks teks lengkap berbeda dari membangun jenis indeks lainnya. Alih-alih membangun struktur pohon B berdasarkan nilai yang disimpan dalam baris tertentu, mesin Full-Text membangun struktur indeks terbalik, bertumpuk, dan terkompresi berdasarkan token individual dari teks yang diindeks. Ukuran indeks teks penuh hanya dibatasi oleh sumber daya memori komputer yang tersedia tempat instans SQL Server berjalan.

Mulai SQL Server 2008, indeks teks lengkap terintegrasi dengan Mesin Database, alih-alih berada di sistem file seperti pada versi SQL Server sebelumnya. Untuk database baru, katalog teks lengkap sekarang menjadi objek virtual yang bukan milik grup file apa pun; ini hanyalah konsep logis yang mengacu pada sekelompok indeks teks lengkap. Namun, perhatikan bahwa selama peningkatan database SQL Server 2005, katalog teks lengkap apa pun yang berisi file data, grup file baru dibuat; untuk informasi selengkapnya, lihat Meningkatkan Full-Text Pencarian.

Catatan

Pada SQL Server 2008 dan versi yang lebih baru, mesin Full-Text berada dalam proses SQL Server, bukan dalam layanan terpisah. Mengintegrasikan mesin Full-Text ke dalam Mesin Database meningkatkan pengelolaan teks lengkap, pengoptimalan kueri campuran, dan performa keseluruhan.

Hanya satu indeks teks lengkap yang diperbolehkan per tabel. Agar indeks teks lengkap dibuat pada tabel, tabel harus memiliki satu kolom nonnull yang unik. Anda dapat membuat indeks teks lengkap pada kolom jenis char, , , varcharnchar, nvarchar, ntexttext, image, xml, varbinary, dan varbinary(max) dapat diindeks untuk pencarian teks lengkap. Membuat indeks teks lengkap pada kolom yang jenis datanya adalah varbinary, , varbinary(max)image, atau xml mengharuskan Anda menentukan kolom jenis. Kolom jenis adalah kolom tabel tempat Anda menyimpan ekstensi file (.doc, .pdf, .xls, dan sebagainya) dokumen di setiap baris.

Proses pembuatan dan pemeliharaan indeks teks lengkap disebut populasi (juga dikenal sebagai perayapan). Ada tiga jenis populasi indeks teks lengkap: populasi penuh, populasi berbasis pelacakan perubahan, dan populasi berbasis tanda waktu bertambah bertahap. Untuk informasi selengkapnya, lihat Mengisi Indeks Full-Text.

Tugas umum

Untuk membuat indeks teks lengkap

Untuk mengubah indeks teks lengkap

Untuk menjatuhkan indeks teks lengkap

Dalam Topik Ini

Struktur Indeks Full-Text

Pemahaman yang baik tentang struktur indeks teks lengkap akan membantu Anda memahami cara kerja mesin Full-Text. Topik ini menggunakan kutipan tabel Dokumen berikut di Adventure Works sebagai tabel contoh. Kutipan ini hanya memperlihatkan dua kolom, kolom DocumentID dan kolom Judul , dan tiga baris dari tabel.

Untuk contoh ini, kita akan berasumsi bahwa indeks teks lengkap telah dibuat pada kolom Judul .

DocumentID Judul
1 Pemeliharaan Lengan dan Ban Crank
2 Kurung Siku Pantul Depan dan Rakitan Reflektor 3
3 Penginstalan Braket Front Reflector

Misalnya, tabel berikut, yang memperlihatkan Fragmen 1, menggambarkan konten indeks teks lengkap yang dibuat pada kolom Judul tabel Dokumen . Indeks teks-penuh berisi lebih banyak informasi daripada yang disajikan dalam tabel ini. Tabel adalah representasi logis dari indeks teks lengkap dan disediakan hanya untuk tujuan demonstrasi. Baris disimpan dalam format terkompresi untuk mengoptimalkan penggunaan disk.

Perhatikan bahwa data telah terbalik dari dokumen asli. Inversi terjadi karena kata kunci dipetakan ke ID dokumen. Untuk alasan ini, indeks teks lengkap sering disebut sebagai indeks terbalik.

Perhatikan juga bahwa kata kunci "dan" telah dihapus dari indeks teks lengkap. Ini dilakukan karena "dan" adalah kata henti, dan menghapus kata-kata berhenti dari indeks teks lengkap dapat menyebabkan penghematan besar dalam ruang disk sehingga meningkatkan performa kueri. Untuk informasi selengkapnya tentang stopword, lihat Mengonfigurasi dan Mengelola Stopwords dan Stoplist untuk Full-Text Search.

Fragmen 1

Kata kunci ColId DocId Terjadinya
Engkol 1 1 1
Lengan 1 1 2
Ban 1 1 4
Pemeliharaan 1 1 5
Front 1 2 1
Front 1 3 1
Reflektor 1 2 2
Reflektor 1 2 5
Reflektor 1 3 2
Bracket 1 2 3
Bracket 1 3 3
Rakitan 1 2 6
3 1 2 7
Penginstalan 1 3 4

Kolom Kata Kunci berisi representasi token tunggal yang diekstrak pada waktu pengindeksan. Word breaker menentukan apa yang membentuk token.

Kolom ColId berisi nilai yang sesuai dengan kolom tertentu yang diindeks teks lengkap.

Kolom DocId berisi nilai untuk bilangan bulat delapan byte yang memetakan ke nilai kunci teks lengkap tertentu dalam tabel terindeks teks lengkap. Pemetaan ini diperlukan ketika kunci teks lengkap bukan jenis data bilangan bulat. Dalam kasus seperti itu, pemetaan antara nilai kunci teks lengkap dan DocId nilai dipertahankan dalam tabel terpisah yang disebut tabel Pemetaan DocId. Untuk mengkueri pemetaan ini, gunakan prosedur tersimpan sistem sp_fulltext_keymappings . Untuk memenuhi kondisi pencarian, nilai DocId dari tabel di atas perlu digabungkan dengan tabel Pemetaan DocId untuk mengambil baris dari tabel dasar yang sedang dikueri. Jika nilai kunci teks lengkap dari tabel dasar adalah jenis bilangan bulat, nilai secara langsung berfungsi sebagai DocId dan tidak ada pemetaan yang diperlukan. Oleh karena itu, menggunakan nilai kunci teks lengkap bilangan bulat dapat membantu mengoptimalkan kueri teks lengkap.

Kolom Kemunculan berisi nilai bilangan bulat. Untuk setiap nilai DocId, ada daftar nilai kemunculan yang sesuai dengan offset kata relatif dari kata kunci tertentu dalam DocId tersebut. Nilai kemunculan berguna dalam menentukan frasa atau kecocokan kedekatan, misalnya, frasa memiliki nilai kemunculan yang berdekatan secara numerik. Mereka juga berguna dalam menghitung skor relevansi; misalnya, jumlah kemunculan kata kunci dalam DocId dapat digunakan dalam penilaian.

Dalam Topik Ini

Fragmen Indeks Full-Text

Indeks teks lengkap logis biasanya dibagi di beberapa tabel internal. Setiap tabel internal disebut fragmen indeks teks lengkap. Beberapa fragmen ini mungkin berisi data yang lebih baru daripada yang lain. Misalnya, jika pengguna memperbarui baris berikut yang DocId-nya adalah 3 dan tabel dilacak secara otomatis, fragmen baru akan dibuat.

DocumentID Judul
3 Reflektor Belakang

Dalam contoh berikut, yang menunjukkan Fragmen 2, fragmen berisi data yang lebih baru tentang DocId 3 dibandingkan dengan Fragmen 1. Oleh karena itu, ketika pengguna meminta "Reflektor Belakang" data dari Fragmen 2 digunakan untuk DocId 3. Setiap fragmen ditandai dengan tanda waktu pembuatan yang dapat dikueri dengan menggunakan tampilan katalog sys.fulltext_index_fragments .

Fragmen 2

Kata kunci ColId DocId Occ
Belakang 1 3 1
Reflektor 1 3 2

Seperti yang dapat dilihat dari Fragmen 2, kueri teks lengkap perlu mengkueri setiap fragmen secara internal dan membuang entri yang lebih lama. Oleh karena itu, terlalu banyak fragmen indeks teks lengkap dalam indeks teks lengkap dapat menyebabkan degradasi substansial dalam performa kueri. Untuk mengurangi jumlah fragmen, reorganisasi katalog teks lengkap dengan menggunakan opsi REORGANIZE dari pernyataan ALTER FULLTEXT CATALOGTransact-SQL. Pernyataan ini melakukan penggabungan master, yang menggabungkan fragmen ke dalam satu fragmen yang lebih besar dan menghapus semua entri usang dari indeks teks lengkap.

Setelah diatur ulang, indeks contoh akan berisi baris berikut:

Kata kunci ColId DocId Occ
Engkol 1 1 1
Lengan 1 1 2
Ban 1 1 4
Pemeliharaan 1 1 5
Front 1 2 1
Belakang 1 3 1
Reflektor 1 2 2
Reflektor 1 2 5
Reflektor 1 3 2
Bracket 1 2 3
Rakitan 1 2 6
3 1 2 7

Dalam Topik Ini