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
Saat Anda membuat indeks teks lengkap, tentukan bahasa tingkat kolom untuk kolom yang diindeks. Kueri teks lengkap pada kolom menggunakan pemecah kata dan stemmer dari bahasa yang ditentukan. Pertimbangkan bagaimana Full-Text Engine mentokenisasi dan kemudian mengindeks teks Anda saat Anda memilih bahasa kolom.
Catatan
Untuk menentukan bahasa tingkat kolom untuk kolom indeks teks lengkap, gunakan LANGUAGE <language_term> klausa saat menentukan kolom. Untuk informasi lebih lanjut, lihat CREATE FULLTEXT INDEX dan ALTER FULLTEXT INDEX.
Dukungan bahasa dalam Pencarian Full-Text
Bagian ini menyediakan pengenalan pemecah kata dan stemmer, dan membahas bagaimana Full-Text Search menggunakan pengidentifikasi kode bahasa (LCID) bahasa tingkat kolom.
Pengantar pemecah kata dan stemmer
Mesin Database SQL Server menyertakan pemecah kata dan stemmer untuk banyak bahasa, diaktifkan secara default. Microsoft Natural Language Group (NLG) mengimplementasikan dan mendukung komponen linguistik ini. Untuk daftar bahasa yang didukung, lihat sys.fulltext_languages.
Komponen eksternal seperti pemecah kata dan filter harus ditandatangani untuk meningkatkan keamanan. Untuk memverifikasi penandatanganan, jalankan pernyataan berikut:
EXECUTE sp_fulltext_service 'verify_signature';
Cara Full-Text Search menggunakan nama bahasa tingkat kolom
Saat Anda membuat indeks teks lengkap, tentukan nama bahasa yang valid untuk setiap kolom. Jika nama bahasa valid tetapi tampilan katalog sys.fulltext_languages tidak menampilkannya, Penelusuran Full-Text kembali ke nama bahasa terdekat yang tersedia dari keluarga bahasa yang sama, jika ada. Jika tidak, Pencarian Teks Lengkap akan menggunakan pemecah kata netral sebagai cadangan. Untuk menghindari perilaku fallback ini, tentukan nama bahasa yang valid dan tersedia.
Catatan
LCID digunakan terhadap semua jenis data yang memenuhi syarat untuk pengindeksan teks lengkap (seperti karakter atau nchar). Jika urutan sortir kolom bertipe char, varchar, atau text diatur ke pengaturan bahasa yang berbeda dari bahasa yang diidentifikasi oleh LCID, LCID tetap digunakan selama pengindeksan dan kueri teks lengkap pada kolom tersebut.
Pemisahan kata
Pemecah kata memecah teks yang diindeks menjadi token berdasarkan batas kata, yang spesifik untuk setiap bahasa. Oleh karena itu, perilaku pemecahan kata berbeda di antara berbagai bahasa. Jika Anda menggunakan satu bahasa, x, untuk mengindeks beberapa bahasa {x, y, dan z}, beberapa perilaku dapat menyebabkan hasil yang tidak terduga. Misalnya, tanda hubung (-) atau koma (,) mungkin merupakan elemen pemisah kata yang dibuang dalam satu bahasa tetapi tidak dalam bahasa lain. Jarang terjadi, proses stemming yang tidak terduga dapat muncul karena sebuah kata dapat mengalami stemming yang berbeda dalam bahasa yang berbeda. Misalnya, dalam bahasa Inggris, batas kata biasanya spasi kosong atau beberapa bentuk tanda baca. Dalam bahasa lain, seperti bahasa Jerman, kata atau karakter dapat digabungkan. Oleh karena itu, bahasa tingkat kolom yang Anda pilih harus mewakili bahasa yang Anda harapkan untuk disimpan dalam baris kolom tersebut.
Bahasa Barat
Untuk keluarga bahasa Barat, jika Anda tidak yakin bahasa mana yang akan disimpan dalam kolom, atau Anda mengharapkan lebih dari satu untuk disimpan, solusi umum adalah menggunakan pemecah kata untuk bahasa paling kompleks yang mungkin disimpan di kolom.
Misalnya, Anda mungkin berharap untuk menyimpan konten bahasa Inggris, Spanyol, dan Jerman dalam satu kolom. Ketiga bahasa Barat ini memiliki pola pemecahan kata yang sama, dengan pola Jerman menjadi yang paling kompleks. Oleh karena itu, dalam hal ini, pilihan yang baik adalah menggunakan pemecah kata Jerman, yang dapat memproses teks bahasa Inggris dan Spanyol dengan benar. Sebaliknya, pemecah kata bahasa Inggris mungkin tidak memproses teks Jerman dengan sempurna karena kata-kata majemuk Jerman.
Menggunakan pemecah kata dari bahasa yang paling kompleks dalam keluarga bahasa tidak menjamin pengindeksan yang sempurna dari setiap bahasa dalam keluarga. Ada kemungkinan terdapat kasus tertentu ketika pemisah kata yang paling kompleks pun tidak dapat menangani teks yang ditulis dalam bahasa lain dengan benar.
Bahasa non-Barat
Untuk bahasa non-Barat (seperti Cina, Jepang, Hindi, dan sebagainya), solusi sebelumnya tidak selalu berhasil, karena alasan linguistik. Untuk bahasa non-Barat, pertimbangkan salah satu solusi berikut:
Untuk bahasa dari keluarga yang berbeda
Jika kolom mungkin berisi bahasa yang berbeda secara dramatis, misalnya, Spanyol dan Jepang, pertimbangkan untuk menyimpan konten bahasa yang berbeda dalam kolom terpisah. Pemisahan ini memungkinkan Anda menggunakan pemecah kata khusus bahasa untuk setiap kolom. Jika Anda memilih solusi ini dan tidak mengetahui bahasa kueri pada waktu kueri, Anda mungkin perlu mengeluarkan kueri terhadap kedua kolom untuk memastikan bahwa kueri menemukan baris atau dokumen yang tepat.
Untuk konten biner (seperti dokumen Microsoft Word)
Jika konten yang diindeks berjenis biner , filter Pencarian Full-Text yang memproses konten tekstual sebelum mengirimkannya ke pemecah kata dapat menghormati tag bahasa tertentu dalam file biner. Dalam hal ini, pada waktu pengindeksan, filter memancarkan LCID yang tepat untuk dokumen atau bagian dokumen. Mesin Full-Text kemudian memanggil pemecah kata untuk bahasa dengan LCID tersebut. Namun, setelah mengindeks konten multibahasa, verifikasi bahwa konten tersebut diindeks dengan benar.
Untuk konten teks biasa
Saat konten Anda adalah teks biasa, Anda dapat mengonversinya ke jenis data xml dan menambahkan tag bahasa yang menunjukkan bahasa yang sesuai dengan setiap dokumen atau bagian dokumen tertentu. Namun, agar ini berfungsi, Anda perlu mengetahui bahasa sebelum pengindeksan teks lengkap.
Stemming
Pertimbangan lain saat memilih bahasa tingkat kolom Anda adalah stemming. Stemming dalam kueri teks penuh adalah proses pencarian semua bentuk berimbuhan (infleksional) dari sebuah kata dalam bahasa tertentu. Saat Anda menggunakan pemecah kata generik untuk memproses beberapa bahasa, proses stemming hanya berfungsi untuk bahasa yang ditentukan untuk kolom, bukan untuk bahasa lain di kolom. Misalnya, stemmer bahasa Jerman tidak dapat digunakan untuk bahasa Inggris atau Spanyol (dan seterusnya). Perilaku ini dapat memengaruhi ingatan Anda tergantung pada bahasa yang Anda pilih pada waktu kueri.
Efek tipe kolom pada Pencarian Full-Text
Pertimbangan lain dalam pilihan bahasa terkait dengan bagaimana data diwakili. Untuk data yang tidak disimpan dalam kolom varbinary(max), tidak ada pemfilteran khusus yang dilakukan. Sebaliknya, teks umumnya diteruskan melalui komponen pemecah kata apa adanya.
Selain itu, pemecah kata dirancang terutama untuk memproses teks tertulis. Jika teks Anda berisi markup (seperti HTML), akurasi linguistik selama pengindeksan dan penelusuran mungkin berkurang. Dalam hal ini, Anda memiliki dua pilihan: metode yang lebih disukai adalah menyimpan data teks dalam kolom varbinary(max), dan untuk menunjukkan jenis dokumennya sehingga dapat difilter. Jika pendekatan itu bukan pilihan, pertimbangkan untuk menggunakan pemecah kata netral dan, jika memungkinkan, menambahkan data markup (seperti 'br' dalam HTML) ke daftar kata noise Anda.
Catatan
Stem berbasis bahasa tidak berlaku saat Anda menentukan bahasa netral.
Menentukan bahasa tingkat kolom nondefault dalam kueri teks lengkap
Secara default, dalam Database Engine, Full-Text Search mengurai istilah kueri dengan menggunakan bahasa yang ditentukan untuk setiap kolom dalam klausa teks lengkap. Untuk mengambil alih perilaku ini, tentukan bahasa nondefault pada waktu kueri. Untuk bahasa yang didukung dan sumber dayanya telah diinstal, klausa LANGUAGE <language_term> dari kueri CONTAINS, CONTAINSTABLE, FREETEXT, atau FREETEXTTABLE dapat digunakan untuk menentukan bahasa yang digunakan untuk pemecahan kata, stemming, tesaurus, dan pemrosesan stopword pada istilah kueri.