Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Berlaku untuk: SQL Server
Azure SQL Database
Azure SQL Managed Instance
Tulis kueri teks lengkap dengan menggunakan predikat CONTAINS dan FREETEXT serta fungsi bernilai rowset CONTAINSTABLE dan FREETEXTTABLE dengan pernyataan SELECT. Artikel ini menyediakan contoh setiap predikat dan fungsi dan membantu Anda memilih yang terbaik untuk digunakan.
- Untuk mencocokkan kata dan frasa, gunakan CONTAINS dan CONTAINSTABLE.
- Untuk mencocokkan makna, namun bukan kata yang persis, gunakan FREETEXT dan FREETEXTTABLE.
Contoh setiap predikat dan fungsi
Contoh berikut menggunakan database sampel AdventureWorks. Untuk rilis akhir AdventureWorks, lihat Database sampel AdventureWorks. Untuk menjalankan kueri sampel, Anda juga harus menyiapkan Pencarian Teks Lengkap. Untuk informasi selengkapnya, lihat Mulai Menggunakan Pencarian Teks Lengkap.
Contoh - CONTAINS
Contoh berikut menemukan semua produk dengan harga $80.99 yang berisi kata "Mountain":
USE AdventureWorks2022
GO
SELECT Name, ListPrice
FROM Production.Product
WHERE ListPrice = 80.99
AND CONTAINS(Name, 'Mountain')
GO
Contoh - FREETEXT
Contoh berikut mencari semua dokumen yang berisi kata-kata yang terkait dengan vital safety components:
USE AdventureWorks2022
GO
SELECT Title
FROM Production.Document
WHERE FREETEXT (Document, 'vital safety components')
GO
Contoh - CONTAINSTABLE
Contoh berikut mengembalikan ID deskripsi dan deskripsi semua produk yang kolom Deskripsinya berisi kata "aluminium" di dekat kata "terang" atau kata "ringan." Hanya baris dengan peringkat 2 atau lebih tinggi yang dikembalikan.
USE AdventureWorks2022
GO
SELECT FT_TBL.ProductDescriptionID,
FT_TBL.Description,
KEY_TBL.RANK
FROM Production.ProductDescription AS FT_TBL INNER JOIN
CONTAINSTABLE (Production.ProductDescription,
Description,
'(light NEAR aluminum) OR
(lightweight NEAR aluminum)'
) AS KEY_TBL
ON FT_TBL.ProductDescriptionID = KEY_TBL.[KEY]
WHERE KEY_TBL.RANK > 2
ORDER BY KEY_TBL.RANK DESC;
GO
Contoh - FREETEXTTABLE
Contoh berikut memperluas kueri FREETEXTTABLE untuk mengembalikan baris berpangkat tertinggi terlebih dahulu dan untuk menambahkan peringkat setiap baris ke daftar pemilihan. Untuk menulis kueri serupa, Anda harus tahu bahwa ProductDescriptionID adalah kolom kunci unik untuk tabel ProductDescription .
USE AdventureWorks2022
GO
SELECT KEY_TBL.RANK, FT_TBL.Description
FROM Production.ProductDescription AS FT_TBL
INNER JOIN
FREETEXTTABLE(Production.ProductDescription, Description,
'perfect all-around bike') AS KEY_TBL
ON FT_TBL.ProductDescriptionID = KEY_TBL.[KEY]
ORDER BY KEY_TBL.RANK DESC
GO
Berikut adalah ekstensi kueri yang sama yang hanya mengembalikan baris dengan peringkat 10 atau lebih besar:
USE AdventureWorks2022
GO
SELECT KEY_TBL.RANK, FT_TBL.Description
FROM Production.ProductDescription AS FT_TBL
INNER JOIN
FREETEXTTABLE(Production.ProductDescription, Description,
'perfect all-around bike') AS KEY_TBL
ON FT_TBL.ProductDescriptionID = KEY_TBL.[KEY]
WHERE KEY_TBL.RANK >= 10
ORDER BY KEY_TBL.RANK DESC
GO
Mencocokkan kata atau mencocokkan arti
CONTAINS
/
CONTAINSTABLE dan FREETEXT/FREETEXTTABLE berguna untuk berbagai jenis pencocokan. Info berikut membantu Anda memilih predikat atau fungsi terbaik untuk kueri Anda:
CONTAINS/CONTAINSTABLE
- Cocokkan kata dan frasa tunggal dengan pencocokan yang tepat atau kabur (kurang tepat).
- Anda juga dapat melakukan hal-hal berikut:
- Tentukan kedekatan kata dalam jarak tertentu satu sama lain.
- Mengembalikan kecocokan tertimbang.
- Gabungkan kondisi pencarian dengan operator logis. Untuk informasi selengkapnya, lihat Menggunakan operator Boolean (AND, OR, dan NOT) nanti di artikel ini.
FREETEXT/FREETEXTTABLE
- Cocokkan arti, tetapi bukan kata yang tepat, dari kata, frasa, atau kalimat tertentu ( string teks bebas).
- Kecocokan dihasilkan jika ada istilah atau bentuk istilah apa pun yang ditemukan dalam indeks teks lengkap kolom tertentu.
Membandingkan predikat dan fungsi
Predikat CONTAINS/FREETEXT dan fungsi CONTAINSTABLE/FREETEXTTABLE bernilai set baris memiliki sintaks dan opsi yang berbeda. Info berikut membantu Anda memilih predikat atau fungsi terbaik untuk kueri Anda:
Predikat CONTAINS dan FREETEXT
Penggunaan. Gunakan predikat CONTAINS dan FREETEXT dalam klausa WHERE atau HAVING dari pernyataan SELECT.
Hasil. Predikat CONTAINS dan FREETEXT mengembalikan nilai TRUE atau FALSE yang menunjukkan apakah baris tertentu cocok dengan kueri teks lengkap. Baris yang cocok dikembalikan dalam kumpulan hasil.
Opsi lainnya. Anda dapat menggabungkan predikat dengan predikat Transact-SQL lainnya, seperti LIKE dan BETWEEN.
Anda dapat menentukan satu kolom, daftar kolom, atau semua kolom dalam tabel yang akan dicari.
Secara opsional, Anda dapat menentukan bahasa yang sumber dayanya digunakan oleh kueri teks lengkap untuk pemenggalan kata dan stemming, pencarian tesaurus, dan penghapusan kata yang tidak berguna.
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.
Info selengkapnya. Untuk informasi selengkapnya tentang sintaksis dan argumen predikat ini, lihat CONTAINS dan FREETEXT.
Fungsi CONTAINSTABLE dan FREETEXTTABLE yang bernilai rowset
Penggunaan. Gunakan fungsi full-text CONTAINSTABLE dan FREETEXTTABLE seperti nama tabel biasa dalam klausa FROM dari pernyataan SELECT.
Anda harus menentukan tabel dasar untuk dicari saat menggunakan salah satu fungsi ini. Seperti halnya predikat, Anda dapat menentukan satu kolom, daftar kolom, atau semua kolom dalam tabel yang akan dicari, dan secara opsional, bahasa yang sumber dayanya digunakan oleh kueri teks lengkap yang diberikan.
Biasanya Anda harus menggabungkan hasil CONTAINSTABLE atau FREETEXTTABLE dengan tabel dasar. Untuk menggabungkan tabel, Anda harus mengetahui nama kolom kunci unik. Kolom ini, yang ada di setiap tabel yang mendukung teks lengkap, digunakan untuk memastikan baris pada tabel tersebut unik (kolom kunci unik). Untuk informasi selengkapnya tentang kolom kunci, lihat Membuat dan Mengelola Indeks Teks Lengkap.
Hasil. Fungsi-fungsi ini mengembalikan tabel nol, satu, atau beberapa baris yang cocok dengan kueri teks lengkap. Tabel yang dikembalikan hanya berisi baris dari tabel dasar yang cocok dengan kriteria pilihan yang ditentukan dalam kondisi pencarian teks lengkap fungsi.
Kueri yang menggunakan salah satu fungsi ini juga mengembalikan nilai peringkat relevansi (RANK) dan kunci teks lengkap (KEY) untuk setiap baris yang dikembalikan, sebagai berikut:
- Kolom KUNCI . Kolom KEY mengembalikan nilai unik dari baris yang dikembalikan. Kolom KEY dapat digunakan untuk menentukan kriteria pilihan.
- Kolom RANK. Kolom RANK mengembalikan nilai peringkat untuk setiap baris yang menunjukkan seberapa baik baris cocok dengan kriteria pilihan. Semakin tinggi nilai peringkat teks atau dokumen dalam baris, semakin relevan baris tersebut untuk kueri teks lengkap yang diberikan. Baris yang berbeda dapat diberi peringkat secara identik. Anda dapat membatasi jumlah kecocokan yang akan dikembalikan dengan menentukan parameter opsional top_n_by_rank. Untuk informasi selengkapnya, lihat Membatasi Hasil Pencarian dengan RANK.
Info selengkapnya. Untuk informasi selengkapnya tentang sintaks dan argumen fungsi ini, lihat CONTAINSTABLE dan FREETEXTTABLE.
Jenis pencarian tertentu
Mencari kata atau frasa tertentu (Istilah Sederhana)
Anda dapat menggunakan CONTAINS, CONTAINSTABLE, FREETEXT, atau FREETEXTTABLE untuk mencari tabel untuk kata atau frasa tertentu. Misalnya, jika Anda ingin mencari tabel ProductReview dalam AdventureWorks2025 database untuk menemukan semua komentar tentang produk dengan frasa "kurva pembelajaran," Anda dapat menggunakan predikat CONTAINS sebagai berikut:
USE AdventureWorks2022
GO
SELECT Comments
FROM Production.ProductReview
WHERE CONTAINS(Comments, '"learning curve"')
GO
Kondisi pencarian, dalam hal ini "kurva pembelajaran," dapat menjadi kompleks dan dapat terdiri dari satu atau beberapa istilah.
Info selengkapnya tentang pencarian istilah sederhana
Dalam pencarian teks lengkap, kata (atau token) adalah string yang batasnya diidentifikasi oleh pemecah kata yang sesuai, mengikuti aturan linguistik bahasa yang ditentukan. Frasa yang valid terdiri dari beberapa kata, dengan atau tanpa tanda baca di antaranya.
Misalnya, "croissant" adalah kata, dan "café au lait" adalah frasa. Kata-kata dan frasa seperti ini disebut istilah sederhana.
CONTAINS dan CONTAINSTABLE mencari kecocokan yang tepat untuk frasa. FREETEXT dan FREETEXTTABLE memecah frasa menjadi kata terpisah.
Cari kata dengan awalan (Istilah Awalan)
Anda dapat menggunakan CONTAINS atau CONTAINSTABLE untuk mencari kata atau frasa dengan awalan yang ditentukan. Semua entri dalam kolom yang berisi teks yang dimulai dengan awalan yang ditentukan dikembalikan. Misalnya, untuk mencari semua baris yang berisi awalan top-, seperti dalam top``ple, top``ping, dan top. Kueri terlihat seperti contoh berikut:
USE AdventureWorks2022
GO
SELECT Description, ProductDescriptionID
FROM Production.ProductDescription
WHERE CONTAINS (Description, '"top*"' )
GO
Semua teks yang cocok dengan teks yang ditentukan sebelum tanda bintang (*) dikembalikan. Jika teks dan tanda bintang tidak dibatasi oleh tanda kutip ganda, seperti dalam CONTAINS (DESCRIPTION, 'top*'), pencarian teks lengkap tidak menganggap tanda bintang sebagai kartubebas..
Ketika istilah awalan adalah frasa, setiap token yang membentuk frasa dianggap sebagai istilah awalan terpisah. Semua baris yang memiliki kata yang dimulai dengan istilah awalan akan dikembalikan. Misalnya, istilah awalan "roti ringan*" akan menemukan baris dengan teks "roti ringan," "roti ringan," atau "roti ringan," tetapi tidak akan mengembalikan "roti panggang ringan."
Info selengkapnya tentang pencarian awalan
Istilah awalan mengacu pada rangkaian karakter yang ditempatkan di depan kata untuk menghasilkan kata turunan atau bentuk yang terinfleksi.
Untuk istilah awalan tunggal, kata apa pun yang dimulai dengan istilah yang ditentukan akan menjadi bagian dari kumpulan hasil. Misalnya, istilah "auto*" cocok dengan "otomatis," "mobil," dan sebagainya.
Untuk frasa, setiap kata dalam frasa dianggap sebagai istilah awalan. Misalnya, istilah "auto tran*" cocok dengan "transmisi otomatis" dan "transduser mobil," tetapi tidak cocok dengan "transmisi motor otomatis."
Pencarian awalan didukung oleh CONTAINS dan CONTAINSTABLE.
Mencari bentuk infleksi dari kata tertentu (Istilah Generasi)
Anda dapat menggunakan CONTAINS, CONTAINSTABLE, FREETEXT, atau FREETEXTTABLE untuk mencari semua bentuk dan konjugasi kata kerja yang berbeda atau bentuk tunggal dan jamak dari kata benda (pencarian infleksional) atau untuk bentuk kata tertentu yang identik (pencarian tesaurus).
Contoh berikut mencari segala bentuk "kaki" ("kaki," "kaki," dan sebagainya) di Comments kolom ProductReview tabel dalam AdventureWorks database:
USE AdventureWorks2022
GO
SELECT Comments, ReviewerName
FROM Production.ProductReview
WHERE CONTAINS (Comments, 'FORMSOF(INFLECTIONAL, "foot")')
GO
Pencarian teks lengkap menggunakan stemmer, yang memungkinkan Anda mencari bentuk waktu dan konjugasi dari sebuah kata kerja, baik bentuk tunggal maupun jamak dari sebuah kata benda. Untuk informasi selengkapnya tentang stemmer, lihat Mengonfigurasi dan Mengelola Pemotong Kata dan Stemmer untuk Pencarian.
Info selengkapnya tentang pencarian istilah generasi
Bentuk infleksi adalah bentuk-bentuk dan konjugasi kata kerja yang berbeda atau bentuk tunggal dan jamak dari kata benda.
Misalnya, cari bentuk infleksi kata "drive." Jika berbagai baris dalam tabel menyertakan kata "drive," "drives," "drove," "driving," dan "driven," semua akan termasuk dalam himpunan hasil karena masing-masing bisa dihasilkan sebagai bentuk infleksi dari kata "drive."
FREETEXT dan FREETEXTTABLE mencari istilah infleksi dari semua kata yang ditentukan secara default.
CONTAINS dan CONTAINSTABLE mendukung argumen opsional INFLECTIONAL .
Mencari sinonim dari kata tertentu
Thesaurus mendefinisikan sinonim yang ditentukan pengguna untuk istilah. Untuk informasi selengkapnya tentang file tesaurus, lihat Mengonfigurasi dan Mengelola File Tesaurus untuk Pencarian Teks Lengkap.
Misalnya, jika entri, "{mobil, mobil, truk, van}," ditambahkan ke tesaurus, Anda dapat mencari bentuk tesaurus dari kata "mobil." Semua baris dalam tabel yang dikueri yang menyertakan kata "mobil," "truk," "van," atau "mobil," muncul dalam tataan hasil karena masing-masing kata ini termasuk dalam set ekspansi sinonim yang berisi kata "mobil."
FREETEXT dan FREETEXTTABLE menggunakan tesaurus secara default.
CONTAINS dan CONTAINSTABLE mendukung argumen opsional THESAURUS .
Cari kata YANG DEKAT dengan kata lain
Istilah kedekatan menunjukkan kata atau frasa yang dekat satu sama lain. Anda juga dapat menentukan jumlah maksimum istilah non-pencarian yang memisahkan istilah pencarian pertama dan terakhir. Selain itu, Anda dapat mencari kata atau frasa dalam urutan apa pun, atau dalam urutan yang Anda tentukan.
Misalnya, Anda ingin menemukan baris di mana kata "es" berada di dekat kata "hoki" atau di mana frasa "ice skating" berada di dekat frasa "hoki es."
Untuk informasi selengkapnya tentang pencarian kedekatan, lihat Mencari Kata Yang Dekat dengan Kata Lain dengan NEAR.
Pencarian kata atau frasa menggunakan nilai tertimbang (Weighted Term)
Anda dapat menggunakan CONTAINSTABLE untuk mencari kata atau frasa dan menentukan nilai pembobotan. Berat, diukur sebagai angka dari 0,0 hingga 1,0, menunjukkan pentingnya setiap kata dan frasa dalam satu set kata dan frasa. Berat 0,0 adalah yang terendah, dan berat 1,0 adalah yang tertinggi.
Contoh berikut menunjukkan kueri yang mencari semua alamat pelanggan, menggunakan bobot, di mana teks apa pun yang dimulai dengan string "Bay" memiliki "Street" atau "View." Hasilnya memberikan peringkat yang lebih tinggi pada baris yang berisi lebih banyak kata yang ditentukan.
USE AdventureWorks2022
GO
SELECT AddressLine1, KEY_TBL.RANK
FROM Person.Address AS Address INNER JOIN
CONTAINSTABLE(Person.Address, AddressLine1, 'ISABOUT ("Bay*",
Street WEIGHT(0.9),
View WEIGHT(0.1)
) ' ) AS KEY_TBL
ON Address.AddressID = KEY_TBL.[KEY]
ORDER BY KEY_TBL.RANK DESC
GO
Istilah tertimbang dapat digunakan bersamaan dengan istilah sederhana, istilah awalan, istilah generasi, atau istilah kedekatan.
Informasi selengkapnya tentang pencarian istilah berbobot
Dalam pencarian istilah tertimbang, nilai pembobotan menunjukkan tingkat kepentingan untuk setiap kata dan frasa dalam satu set kata dan frasa. Nilai berat 0,0 adalah yang terendah, dan nilai berat 1,0 adalah yang tertinggi.
Misalnya, dalam kueri yang mencari beberapa istilah, Anda dapat menetapkan setiap kata pencarian nilai bobot yang menunjukkan pentingnya relatif terhadap kata lain dalam kondisi pencarian. Hasil untuk jenis kueri ini mengembalikan baris yang paling relevan terlebih dahulu, sesuai dengan bobot relatif yang telah Anda tetapkan untuk mencari kata. Kumpulan hasil berisi dokumen atau baris yang berisi salah satu istilah yang ditentukan (atau konten di antaranya); namun, beberapa hasil akan dianggap lebih relevan daripada yang lain karena variasi dalam nilai tertimbang yang terkait dengan istilah yang dicari yang berbeda.
Pencarian istilah tertimbang didukung oleh CONTAINSTABLE.
Gunakan AND, OR, dan NOT (operator Boolean)
Predikat CONTAINS dan fungsi CONTAINSTABLE menggunakan kondisi pencarian yang sama. Keduanya mendukung menggabungkan beberapa istilah pencarian dengan menggunakan operator Boolean - AND, OR, dan NOT - untuk melakukan operasi logis. Anda dapat menggunakan AND, misalnya, untuk menemukan baris yang berisi "latte" dan "Bagel bergaya New York." Anda dapat menggunakan AND NOT, misalnya, untuk menemukan baris yang berisi "bagel" tetapi tidak berisi "keju krim."
Sebaliknya, FREETEXT dan FREETEXTTABLE memperlakukan istilah Boolean sebagai kata yang akan dicari.
Untuk informasi tentang menggabungkan CONTAINS dengan predikat lain yang menggunakan operator logis AND, OR, dan NOT, lihat Kondisi Pencarian (Transact-SQL).
Contoh
Contoh berikut menggunakan predikat CONTAINS untuk mencari deskripsi di mana ID deskripsi tidak sama dengan 5 dan deskripsi berisi kata "Aluminium" dan kata "spindle." Kondisi pencarian menggunakan operator AND Boolean. Contoh ini menggunakan tabel ProductDescription database AdventureWorks2025 .
USE AdventureWorks2022
GO
SELECT Description
FROM Production.ProductDescription
WHERE ProductDescriptionID <> 5 AND
CONTAINS(Description, 'aluminum AND spindle')
GO
Kasus, stopword, bahasa, dan tesaurus
Saat menulis kueri teks lengkap, Anda juga dapat menentukan opsi berikut:
Sensitivitas kasus. Kueri pencarian teks lengkap tidak peka huruf besar/kecil. Namun, dalam bahasa Jepang, ada beberapa ortografi fonetik di mana konsep normalisasi ortografi mirip dengan insensitivitas terhadap huruf kapital (misalnya, kana = insensitivitas). Jenis normalisasi ortografis ini tidak didukung.
Stopwords. Saat mendefinisikan kueri teks lengkap, Mesin Pencarian Teks-Penuh membuang kata hentian (juga disebut kata tidak penting) dari kriteria pencarian. Stopwords adalah kata-kata seperti "a," "dan," "is," atau "the," yang dapat sering muncul tetapi biasanya tidak membantu saat mencari teks spesifik. Stopwords tercantum dalam daftar stoplist. Setiap indeks teks lengkap dikaitkan dengan daftar berhenti tertentu, yang menentukan kata berhenti apa yang dihilangkan dari kueri atau indeks pada saat pengindeksan. Untuk informasi selengkapnya, lihat Mengonfigurasi dan Mengelola Kata-kata Penghenti dan Daftar Penghenti untuk Pencarian Teks Lengkap.
Bahasa, dengan opsi BAHASA. Banyak istilah kueri sangat bergantung pada perilaku pemecah kata. Untuk memastikan bahwa Anda menggunakan pemecah kata yang benar (dan stemmer) dan file tesaurus, kami sarankan Anda menentukan opsi BAHASA. Untuk informasi selengkapnya, lihat Memilih Bahasa Saat Membuat Indeks Teks Lengkap.
Thesaurus. Kueri FREETEXT dan FREETEXTTABLE menggunakan tesaurus secara default. CONTAINS dan CONTAINSTABLE mendukung argumen THESAURUS opsional. Untuk informasi selengkapnya, lihat Mengonfigurasi dan Mengelola File Tesaurus untuk Pencarian Teks Lengkap.
Periksa hasil tokenisasi
Setelah Anda menerapkan kombinasi pemecah kata, tesaurus, dan daftar kata berhenti tertentu pada kueri, Anda dapat melihat bagaimana Pencarian Teks-Penuh mentokenisasi hasil dengan menggunakan tampilan pandangan manajemen dinamis sys.dm_fts_parser. Untuk informasi selengkapnya, lihat sys.dm_fts_parser (Transact-SQL).
Lihat Juga
CONTAINS (Transact-SQL)
CONTAINSTABLE (Transact-SQL)
FREETEXT (T-SQL)
FREETEXTTABLE (Transact-SQL)
Membuat Kueri Pencarian Teks Lengkap (Alat Database Visual)
Meningkatkan Performa Kueri Teks Lengkap