FREETEXT (T-SQL)

Berlaku untuk:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

Adalah predikat yang digunakan dalam klausul T-SQL WHERE dari pernyataan Transact-SQL SELECT untuk melakukan pencarian teks lengkap SQL Server pada kolom terindeks teks lengkap yang berisi jenis data berbasis karakter. Predikat ini mencari nilai yang cocok dengan arti dan bukan hanya kata-kata yang tepat dalam kondisi pencarian. Saat FREETEXT digunakan, mesin kueri teks lengkap secara internal melakukan tindakan berikut pada freetext_string, menetapkan setiap istilah berat, lalu menemukan kecocokan:

  • Memisahkan string menjadi kata individual berdasarkan batas kata (pemecahan kata).

  • Menghasilkan bentuk kata-kata yang tidak bersifat infleksi (stemming).

  • Mengidentifikasi daftar ekspansi atau penggantian untuk istilah berdasarkan kecocokan di thesaurus.

Catatan

Untuk informasi tentang formulir pencarian teks lengkap yang didukung oleh SQL Server, lihat Kueri dengan Pencarian Teks Lengkap.

Berlaku untuk: SQL Server (SQL Server 2008 (10.0.x) melalui versi saat ini).

Konvensi sintaks transact-SQL

Sintaksis

FREETEXT ( { column_name | (column_list) | * }   
          , 'freetext_string' [ , LANGUAGE language_term ] )  

Catatan

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

Argumen

column_name
Adalah nama satu atau beberapa kolom terindeks teks lengkap dari tabel yang ditentukan dalam klausa FROM. Kolom dapat berjenis char, varchar, nchar, nvarchar, text, ntext, image, xml, varbinary, atau varbinary(max).

column_list
Menunjukkan bahwa beberapa kolom, yang dipisahkan oleh koma, dapat ditentukan. column_list harus diapit tanda kurung. Kecuali language_term ditentukan, bahasa semua kolom column_list harus sama.

*
Menentukan bahwa semua kolom yang telah didaftarkan untuk pencarian teks lengkap harus digunakan untuk mencari freetext_string yang diberikan. Jika lebih dari satu tabel berada dalam klausa FROM, * harus memenuhi syarat dengan nama tabel. Kecuali language_term ditentukan, bahasa semua kolom tabel harus sama.

freetext_string
Adalah teks untuk dicari di column_name. Teks apa pun, termasuk kata, frasa, atau kalimat, dapat dimasukkan. Kecocokan dihasilkan jika ada istilah atau bentuk istilah apa pun yang ditemukan dalam indeks teks lengkap.

Tidak seperti dalam kondisi pencarian CONTAINS dan CONTAINSTABLE di mana AND adalah kata kunci, ketika digunakan dalam freetext_string kata 'dan' dianggap sebagai kata kebisingan, atau stopword, dan akan dibuang.

Penggunaan BOBOT, FORMSOF, kartubebas, NEAR, dan sintaks lainnya tidak diperbolehkan. freetext_string adalah kata patah kata, bertangkai, dan melewati tesaurus.

freetext_string adalah nvarchar. Konversi implisit terjadi ketika jenis data karakter lain digunakan sebagai input. Jenis data string besar nvarchar(max) dan varchar(max) tidak dapat digunakan. Dalam contoh berikut, @SearchWord variabel, yang didefinisikan sebagai varchar(30), menyebabkan konversi implisit dalam FREETEXT predikat.

USE AdventureWorks2022;  
GO  
DECLARE @SearchWord VARCHAR(30)  
SET @SearchWord ='performance'  
SELECT Description   
FROM Production.ProductDescription   
WHERE FREETEXT(Description, @SearchWord);  
  

Karena "parameter sniffing" tidak berfungsi di seluruh konversi, gunakan nvarchar untuk performa yang lebih baik. Dalam contoh, nyatakan @SearchWord sebagai nvarchar(30).

USE AdventureWorks2022;  
GO  
DECLARE @SearchWord NVARCHAR(30)  
SET @SearchWord = N'performance'  
SELECT Description   
FROM Production.ProductDescription   
WHERE FREETEXT(Description, @SearchWord);  
  

Anda juga dapat menggunakan petunjuk kueri OPTIMIZE FOR untuk kasus di mana rencana nonoptimal dihasilkan.

LANGUAGE_TERM BAHASA
Adalah bahasa yang sumber dayanya akan digunakan untuk pemecahan kata, stemming, dan tesaurus dan penghapusan stopword sebagai bagian dari kueri. Parameter ini 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 akan diterapkan ke semua elemen kondisi pencarian. Jika tidak ada nilai yang ditentukan, kolom bahasa teks lengkap digunakan.

Jika dokumen dari bahasa yang berbeda disimpan bersama-sama sebagai objek besar biner (BLOB) dalam satu kolom, pengidentifikasi lokal (LCID) dari dokumen tertentu menentukan bahasa apa yang digunakan untuk mengindeks kontennya. Saat mengkueri kolom seperti itu, menentukan LANGUAGE language_term dapat meningkatkan probabilitas kecocokan yang baik.

Ketika ditentukan sebagai string, language_term sesuai dengan nilai kolom alias dalam tampilan kompatibilitas sys.syslanguages (Transact-SQL). 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 heksadesimal tidak boleh melebihi delapan digit, termasuk nol di depannya.

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

Jika bahasa yang ditentukan tidak valid atau tidak ada sumber daya yang diinstal yang sesuai dengan bahasa tersebut, Microsoft SQL Server mengembalikan kesalahan. Untuk menggunakan sumber daya bahasa netral, tentukan 0x0 sebagai language_term.

Keterangan Umum

Predikat teks lengkap dan fungsi bekerja pada satu tabel, yang tersirat dalam predikat FROM. Untuk mencari di beberapa tabel, gunakan tabel yang digabungkan dalam klausa FROM Anda untuk mencari pada tataan hasil yang merupakan produk dari dua tabel atau lebih.

Kueri teks lengkap yang menggunakan FREETEXT kurang tepat daripada kueri teks lengkap menggunakan CONTAINS. Mesin pencari teks lengkap SQL Server mengidentifikasi kata dan frasa penting. Tidak ada arti khusus yang diberikan kepada salah satu kata kunci yang dipesan atau karakter kartubebas yang biasanya memiliki arti ketika ditentukan dalam <parameter contains_search_condition> predikat CONTAINS.

Predikat teks lengkap tidak diizinkan dalam klausul OUTPUT saat tingkat kompatibilitas database diatur ke 100.

Catatan

Fungsi FREETEXTTABLE berguna untuk jenis kecocokan yang sama dengan predikat FREETEXT. Anda dapat mereferensikan fungsi ini seperti nama tabel reguler dalam klausa FROM dari pernyataan SELECT. Untuk informasi selengkapnya, lihat FREETEXTTABLE (Transact-SQL).

Mengkueri Server Jarak Jauh

Anda dapat menggunakan nama empat bagian dalam predikat CONTAINS atau FREETEXT untuk mengkueri kolom terindeks teks lengkap dari tabel target di server tertaut. Untuk menyiapkan server jarak jauh untuk menerima kueri teks lengkap, buat indeks teks lengkap pada tabel dan kolom target di server jarak jauh lalu tambahkan server jarak jauh sebagai server tertaut.

Berbeda dengan pencarian teks lengkap, predikat LIKETransact-SQL hanya berfungsi pada pola karakter. Selain itu, Anda tidak dapat menggunakan predikat LIKE untuk mengkueri data biner yang diformat. Selain itu, kueri LIKE terhadap sejumlah besar data teks yang tidak terstruktur jauh lebih lambat daripada kueri teks lengkap yang setara terhadap data yang sama. Kueri LIKE terhadap jutaan baris data teks dapat memakan waktu beberapa menit untuk dikembalikan; sedangkan kueri teks lengkap hanya dapat memakan waktu beberapa detik atau kurang terhadap data yang sama, tergantung pada jumlah baris yang dikembalikan.

Contoh

J. Menggunakan FREETEXT untuk mencari kata yang berisi nilai karakter tertentu

Contoh berikut mencari semua dokumen yang berisi kata-kata yang terkait dengan vital, keselamatan, komponen.

USE AdventureWorks2022;  
GO  
SELECT Title  
FROM Production.Document  
WHERE FREETEXT (Document, 'vital safety components' );  
GO  

B. Menggunakan FREETEXT dengan variabel

Contoh berikut menggunakan variabel alih-alih istilah pencarian tertentu.

USE AdventureWorks2022;  
GO  
DECLARE @SearchWord NVARCHAR(30);  
SET @SearchWord = N'high-performance';  
SELECT Description   
FROM Production.ProductDescription   
WHERE FREETEXT(Description, @SearchWord);  
GO  

Lihat Juga

Mulai dengan Pencarian Teks Lengkap
Membuat dan Mengelola Katalog Teks Lengkap
BUAT KATALOG FULLTEXT (T-SQL)
MEMBUAT INDEKS FULLTEXT (Transact-SQL)
Membuat dan Mengelola Indeks Teks Lengkap
Kueri dengan Pencarian Teks Lengkap
Membuat Kueri Pencarian Teks Lengkap (Alat Database Visual)
CONTAINS (Transact-SQL)
CONTAINSTABLE (Transact-SQL)
Tipe Data (Transact-SQL)
FREETEXTTABLE (Transact-SQL)
WHERE (Transact-SQL)