Mengaktifkan pencarian semantik pada tabel dan kolom

Berlaku untuk:SQL Server

Menjelaskan cara mengaktifkan atau menonaktifkan pengindeksan semantik statistik pada kolom terpilih yang berisi dokumen atau teks.

Pencarian semantik statistik menggunakan indeks yang dibuat oleh Pencarian Teks Penuh, dan membuat indeks tambahan. Sebagai hasil dari dependensi ini pada pencarian teks lengkap, Anda membuat indeks semantik baru saat Anda menentukan indeks teks lengkap baru, atau saat Anda mengubah indeks teks lengkap yang ada. Anda dapat membuat indeks semantik baru dengan menggunakan pernyataan Transact-SQL, atau dengan menggunakan Panduan Pengindeksan Teks Lengkap dan kotak dialog lainnya di SQL Server Management Studio, seperti yang dijelaskan dalam artikel ini.

Membuat indeks semantik

Persyaratan dan batasan untuk membuat indeks semantik

  • Anda dapat membuat indeks pada salah satu objek database yang didukung untuk pengindeksan teks lengkap, termasuk tabel dan tampilan terindeks.

  • Sebelum Anda dapat mengaktifkan pengindeksan semantik untuk kolom tertentu, prasyarat berikut harus ada:

    • Katalog teks lengkap harus ada untuk database.

    • Tabel harus memiliki indeks teks lengkap.

    • Kolom yang dipilih harus berpartisipasi dalam indeks teks lengkap.

    Anda dapat membuat dan mengaktifkan semua persyaratan ini secara bersamaan.

  • Anda dapat membuat indeks semantik pada kolom yang memiliki salah satu jenis data yang didukung untuk pengindeksan teks lengkap. Untuk informasi selengkapnya, lihat Membuat dan Mengelola Indeks Teks Lengkap.

  • Anda dapat menentukan jenis dokumen apa pun yang didukung untuk pengindeksan teks lengkap untuk kolom varbinary(maks ). Untuk informasi selengkapnya, lihat Cara: Menentukan Tipe Dokumen Mana yang Dapat Diindeks dalam artikel ini.

  • Pengindeksan semantik membuat dua jenis indeks untuk kolom yang Anda pilih - indeks frasa kunci, dan indeks kesamaan dokumen. Anda tidak dapat memilih hanya satu jenis indeks atau yang lain saat mengaktifkan pengindeksan semantik. Namun Anda dapat mengkueri kedua indeks ini secara independen. Untuk informasi selengkapnya, lihat Menemukan Frasa Kunci di Dokumen dengan Pencarian Semantik dan Menemukan Dokumen Serupa dan Terkait dengan Pencarian Semantik.

  • Jika Anda tidak secara eksplisit menentukan LCID untuk indeks semantik, maka hanya bahasa utama dan statistik bahasa terkait yang digunakan untuk pengindeksan semantik.

  • Jika Anda menentukan bahasa untuk kolom yang model bahasanya tidak tersedia, pembuatan indeks gagal dan mengembalikan pesan kesalahan.

Membuat indeks semantik saat tidak ada indeks teks lengkap

Saat Anda membuat indeks teks lengkap baru dengan CREATE FULLTEXT INDEX pernyataan , Anda dapat mengaktifkan pengindeksan semantik di tingkat kolom dengan menentukan kata kunci STATISTICAL_SEMANTICS sebagai bagian dari definisi kolom. Anda juga dapat mengaktifkan pengindeksan semantik saat menggunakan Panduan Pengindeksan Teks Lengkap untuk membuat indeks teks lengkap baru.

Membuat indeks semantik baru dengan menggunakan Transact-SQL

CREATE FULLTEXT INDEX Panggil pernyataan dan tentukan STATISTICAL_SEMANTICS untuk setiap kolom tempat Anda ingin membuat indeks semantik. Untuk informasi selengkapnya tentang semua opsi untuk pernyataan ini, lihat MEMBUAT INDEKS FULLTEXT (Transact-SQL).

Contoh 1: Membuat indeks unik, indeks teks lengkap, dan indeks semantik

Contoh berikut membuat katalog teks lengkap default, ft. Contoh kemudian membuat indeks unik pada JobCandidateID kolom HumanResources.JobCandidate tabel AdventureWorks2022 database sampel. Indeks unik ini diperlukan sebagai kolom kunci untuk indeks teks lengkap. Contoh kemudian membuat indeks teks lengkap dan indeks semantik pada Resume kolom.

CREATE FULLTEXT CATALOG ft AS DEFAULT
GO

CREATE UNIQUE INDEX ui_ukJobCand
    ON HumanResources.JobCandidate(JobCandidateID)
GO

CREATE FULLTEXT INDEX ON HumanResources.JobCandidate
    (Resume
        Language 1033
        Statistical_Semantics
    )
    KEY INDEX JobCandidateID
    WITH STOPLIST = SYSTEM
GO

Contoh 2: Membuat indeks teks lengkap dan semantik pada beberapa kolom dengan populasi indeks tertunda

Contoh berikut membuat katalog teks lengkap, documents_catalog, dalam AdventureWorks2022 database sampel. Contoh kemudian membuat indeks teks lengkap yang menggunakan katalog baru ini. Indeks teks lengkap dibuat pada Titlekolom Production.Document , DocumentSummary, dan Document tabel, sementara indeks semantik hanya dibuat pada Document kolom . Indeks teks lengkap ini menggunakan katalog teks lengkap yang baru dibuat dan indeks kunci unik yang ada, PK_Document_DocumentID. Seperti yang disarankan, kunci indeks ini dibuat pada kolom bilangan bulat, DocumentID. Contoh menentukan LCID untuk bahasa Inggris, 1033, yang merupakan bahasa data dalam kolom.

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

CREATE FULLTEXT CATALOG documents_catalog
GO

CREATE FULLTEXT INDEX ON Production.Document
    (
    Title
        Language 1033,
    DocumentSummary
        Language 1033,
    Document
        TYPE COLUMN FileExtension
        Language 1033
        Statistical_Semantics
    )
    KEY INDEX PK_Document_DocumentID
        ON documents_catalog
        WITH 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

Membuat indeks semantik baru dengan menggunakan SQL Server Management Studio

Jalankan Panduan Pengindeksan Teks Lengkap dan aktifkan Semantik Statistik pada halaman Pilih Kolom Tabel untuk setiap kolom tempat Anda ingin membuat indeks semantik. Untuk informasi selengkapnya, termasuk informasi tentang cara memulai Panduan Pengindeksan Teks Lengkap, lihat Menggunakan Panduan Pengindeksan Teks Lengkap.

Membuat indeks semantik saat ada indeks teks lengkap yang ada

Anda dapat menambahkan pengindeksan semantik saat mengubah indeks teks lengkap yang ada dengan ALTER FULLTEXT INDEX pernyataan . Anda juga dapat menambahkan pengindeksan semantik dengan menggunakan berbagai kotak dialog di SQL Server Management Studio.

Menambahkan indeks semantik dengan menggunakan Transact-SQL

ALTER FULLTEXT INDEX Panggil pernyataan dengan opsi yang dijelaskan di bagian berikut, untuk setiap kolom tempat Anda ingin menambahkan indeks semantik. Untuk informasi selengkapnya tentang semua opsi untuk pernyataan ini, lihat ALTER FULLTEXT INDEX (Transact-SQL).

Indeks teks lengkap dan semantik diisi ulang setelah panggilan ke ALTER, kecuali Anda menentukan sebaliknya.

  • Untuk menambahkan pengindeksan teks lengkap hanya ke kolom, gunakan sintaks.ADD

  • Untuk menambahkan pengindeksan teks lengkap dan semantik ke kolom, gunakan ADD sintaks dengan STATISTICAL_SEMANTICS opsi .

  • Untuk menambahkan pengindeksan semantik ke kolom yang sudah diaktifkan untuk pengindeksan teks lengkap, gunakan ADD STATISTICAL_SEMANTICS opsi . Anda hanya dapat menambahkan pengindeksan semantik ke satu kolom dalam satu ALTER pernyataan.

Contoh: Menambahkan pengindeksan semantik ke kolom yang sudah memiliki pengindeksan teks lengkap

Contoh berikut mengubah indeks teks lengkap yang ada pada Production.Document tabel dalam AdventureWorks2022 database sampel. Contoh menambahkan indeks semantik pada Document kolom Production.Document tabel, yang sudah memiliki indeks teks lengkap. Contoh menentukan bahwa indeks tidak diisi ulang secara otomatis.

ALTER FULLTEXT INDEX ON Production.Document
    ALTER COLUMN Document
        ADD Statistical_Semantics
    WITH NO POPULATION
GO

Menambahkan indeks semantik dengan menggunakan SQL Server Management Studio

Anda bisa mengubah kolom yang diaktifkan untuk pengindeksan semantik dan teks lengkap pada halaman Kolom Indeks Teks-Penuh dari kotak dialog Properti Indeks Teks-Penuh. Untuk informasi selengkapnya, lihat Mengelola Indeks Teks Lengkap.

Mengubah indeks semantik

Persyaratan dan batasan untuk mengubah indeks yang ada

  • Anda tidak dapat mengubah indeks yang ada saat populasi indeks sedang berlangsung. Untuk informasi selengkapnya tentang memantau kemajuan populasi indeks, lihat Mengelola dan Memantau Pencarian Semantik.

  • Anda tidak dapat menambahkan pengindeksan ke kolom, dan mengubah atau menghilangkan pengindeksan untuk kolom yang sama, dalam satu panggilan ke ALTER FULLTEXT INDEX pernyataan.

Menghilangkan indeks semantik

Anda dapat menghilangkan pengindeksan semantik saat mengubah indeks teks lengkap yang ada dengan pernyataan .ALTER FULLTEXT INDEX Anda juga dapat menghilangkan pengindeksan semantik dengan menggunakan berbagai kotak dialog di SQL Server Management Studio.

Menghilangkan indeks semantik dengan menggunakan Transact-SQL

Untuk menghilangkan pengindeksan semantik hanya dari kolom atau kolom, panggil ALTER FULLTEXT INDEX pernyataan dengan ALTER COLUMN <column_name> DROP STATISTICAL_SEMANTICS opsi . Anda dapat menghilangkan pengindeksan dari beberapa kolom dalam satu ALTER pernyataan.

USE database_name;
GO

ALTER FULLTEXT INDEX
    ALTER COLUMN column_name
    DROP STATISTICAL_SEMANTICS;
GO

Untuk menghilangkan pengindeksan teks lengkap dan semantik dari kolom, panggil ALTER FULLTEXT INDEX pernyataan dengan ALTER COLUMN <column_name> DROP opsi .

USE database_name;
GO

ALTER FULLTEXT INDEX
    ALTER COLUMN column_name
    DROP;
GO

Menghilangkan indeks semantik dengan SQL Server Management Studio

Anda bisa mengubah kolom yang diaktifkan untuk pengindeksan semantik dan teks lengkap pada halaman Kolom Indeks Teks-Penuh dari kotak dialog Properti Indeks Teks-Penuh. Untuk informasi selengkapnya, lihat Mengelola Indeks Teks Lengkap.

Persyaratan dan batasan untuk menghilangkan indeks semantik

  • Anda tidak dapat menghilangkan pengindeksan teks lengkap dari kolom sambil mempertahankan pengindeksan semantik. Pengindeksan semantik bergantung pada pengindeksan teks lengkap untuk hasil kesamaan dokumen.

  • Anda tidak dapat menentukan NO POPULATION opsi saat Anda menghilangkan pengindeksan semantik dari kolom terakhir dalam tabel tempat pengindeksan semantik diaktifkan. Siklus populasi diperlukan untuk menghapus hasil yang diindeks sebelumnya.

Periksa apakah pencarian semantik diaktifkan pada objek database

Apakah pencarian semantik diaktifkan untuk database?

IsFullTextEnabled Kueri properti fungsi metadata DATABASEPROPERTYEX (Transact-SQL).

Nilai 1 pengembalian menunjukkan bahwa pencarian teks lengkap dan pencarian semantik diaktifkan untuk database. Nilai 0 pengembalian menunjukkan bahwa nilai tersebut tidak diaktifkan.

SELECT DATABASEPROPERTYEX('database_name', 'IsFullTextEnabled');
GO

Apakah pencarian semantik diaktifkan untuk tabel?

TableFullTextSemanticExtraction Kueri properti fungsi metadata OBJECTPROPERTYEX (Transact-SQL).

Nilai pengembalian 1 menunjukkan bahwa pencarian semantik diaktifkan untuk tabel; nilai pengembalian 0 menunjukkan bahwa nilai tersebut tidak diaktifkan.

SELECT OBJECTPROPERTYEX(OBJECT_ID('table_name'), 'TableFullTextSemanticExtraction')
GO

Apakah pencarian semantik diaktifkan untuk kolom?

Untuk menentukan apakah pencarian semantik diaktifkan untuk kolom tertentu:

  • StatisticalSemantics Kueri properti fungsi metadata COLUMNPROPERTY (Transact-SQL).

    Nilai pengembalian 1 menunjukkan bahwa pencarian semantik diaktifkan untuk kolom; nilai pengembalian 0 menunjukkan bahwa nilai tersebut tidak diaktifkan.

    SELECT COLUMNPROPERTY(OBJECT_ID('table_name'), 'column_name', 'StatisticalSemantics');
    GO
    
  • Kueri tampilan katalog sys.fulltext_index_columns (Transact-SQL) untuk indeks teks lengkap.

    Nilai 1 dalam statistical_semantics kolom menunjukkan bahwa kolom yang ditentukan diaktifkan untuk pengindeksan semantik selain pengindeksan teks lengkap.

    SELECT * FROM sys.fulltext_index_columns
    WHERE object_id = OBJECT_ID('table_name');
    GO
    
  • Di Object Explorer di Management Studio, klik kanan pada kolom dan pilih Properti. Pada halaman Umum kotak dialog Properti Kolom, centang nilai properti Semantik Statistik.

    Nilai True menunjukkan bahwa kolom yang ditentukan diaktifkan untuk pengindeksan semantik selain pengindeksan teks lengkap.

Periksa bahasa mana yang didukung untuk pencarian semantik

Lebih sedikit bahasa yang didukung untuk pengindeksan semantik daripada untuk pengindeksan teks lengkap. Akibatnya, mungkin ada kolom yang dapat Anda indeks untuk pencarian teks lengkap, tetapi tidak untuk pencarian semantik.

Mengkueri sys.fulltext_semantic_languages tampilan katalog (Transact-SQL).

SELECT * FROM sys.fulltext_semantic_languages;
GO

Bahasa berikut didukung untuk pengindeksan semantik. Daftar ini mewakili output tampilan katalog sys.fulltext_semantic_languages (Transact-SQL), yang diurutkan oleh LCID.

Bahasa LCID
Mandarin Tradisional 1028
Jerman 1031
Inggris (US) 1033
Prancis 1036
Italia 1040
Brasil 1046
Rusia 1049
Swedia 1053
Bahasa Tionghoa Sederhana 2052
Inggris Inggris 2057
Portugis 2070
Tionghoa (Hong Kong, SAR, RRC) 2070
Spanyol 3082
Bahasa Tionghoa (Singapura) 4100
Bahasa Mandarin (Macau SAR) 5124

Catatan

Jika hasilnya kosong, Anda harus mengunduh dan menginstal database Statistik Bahasa Semantik. Untuk informasi selengkapnya, lihat Menginstal, melampirkan, dan mendaftarkan Database Statistik Bahasa Semantik.

Menentukan tipe dokumen mana yang dapat diindeks

Kueri tampilan katalog sys.fulltext_document_types (Transact-SQL).

Jika tipe dokumen yang ingin Anda indeks tidak ada dalam daftar jenis yang didukung, maka Anda mungkin harus menemukan, mengunduh, dan menginstal filter tambahan. Untuk informasi selengkapnya, lihat Menampilkan atau Mengubah Filter Terdaftar dan Pemecah Kata.

Praktik terbaik: Membuat grup file terpisah untuk indeks teks lengkap dan semantik

Pertimbangkan untuk membuat grup file terpisah untuk indeks teks lengkap dan semantik jika alokasi ruang disk menjadi perhatian. Indeks semantik dibuat dalam grup file yang sama dengan indeks teks lengkap. Indeks semantik yang diisi penuh mungkin berisi sejumlah besar data.

Masalah: Mencari pada kolom tertentu tidak mengembalikan hasil

Apakah LCID non-Unicode ditentukan untuk bahasa Unicode?

Dimungkinkan untuk mengaktifkan pengindeksan semantik pada jenis kolom non-Unicode dengan LCID untuk bahasa yang hanya memiliki kata Unicode, seperti LCID 1049 untuk Bahasa Rusia. Dalam hal ini, tidak ada hasil yang pernah dikembalikan dari indeks semantik pada kolom ini.