Pilih Bahasa Saat Membuat Indeks Full-Text

Berlaku untuk:SQL ServerAzure SQL Database

Saat membuat indeks teks lengkap, Anda perlu menentukan bahasa tingkat kolom untuk kolom terindeks. Pemecah kata dan stemmer bahasa yang ditentukan akan digunakan oleh kueri teks lengkap pada kolom. Ada beberapa hal yang perlu dipertimbangkan saat memilih bahasa kolom saat membuat indeks teks lengkap. Pertimbangan ini berkaitan dengan bagaimana teks Anda ditokenisasi lalu diindeks oleh Mesin Teks Lengkap.

Catatan

Untuk menentukan bahasa tingkat kolom untuk kolom indeks teks lengkap, gunakan klausa LANGUAGE language_term saat menentukan kolom. Untuk informasi selengkapnya, lihat MEMBUAT INDEKS FULLTEXT (Transact-SQL) dan ALTER FULLTEXT INDEX (Transact-SQL).

Dukungan Bahasa dalam Pencarian Teks Lengkap

Bagian ini menyediakan pengenalan pemecah kata dan stemmer, dan membahas bagaimana pencarian teks lengkap menggunakan LCID bahasa tingkat kolom.

Pengantar Word Breakers dan Stemmers

SQL Server 2008 (10.0.x) dan versi yang lebih baru mencakup keluarga baru lengkap pemecah kata dan stemmer yang secara signifikan lebih baik daripada yang sebelumnya tersedia di SQL Server.

Catatan

Microsoft Natural Language Group (MS NLG) menerapkan dan mendukung komponen linguistik baru ini.

Pemecah kata baru memberikan manfaat berikut:

  • Kekokohan

    Pengujian telah menunjukkan bahwa pemecah kata baru kuat di lingkungan kueri bertekanan tinggi.

  • Keamanan

    Pemecah kata baru diaktifkan secara default di SQL Server berkat peningkatan keamanan dalam komponen linguistik. Kami sangat menyarankan agar komponen eksternal seperti pemecah kata dan filter ditandatangani untuk meningkatkan keamanan keseluruhan dan ketahanan SQL Server. Anda dapat mengonfigurasi teks lengkap untuk memverifikasi bahwa komponen-komponen ini ditandatangani sebagai berikut:

    EXEC sp_fulltext_service 'verify_signature';  
    
  • Kualitas

    Pemecah kata telah dirancang ulang, dan pengujian telah menunjukkan bahwa pemecah kata baru memberikan kualitas semantik yang lebih baik daripada pemecah kata sebelumnya. Ini meningkatkan akurasi pengenalan.

  • Cakupan untuk daftar bahasa yang luas, pemecah kata disertakan dalam SQL Server di luar kotak dan diaktifkan secara default.

Untuk daftar bahasa di mana SQL Server menyertakan pemecah kata dan stemmer, lihat sys.fulltext_languages (Transact-SQL).

Cara Pencarian Teks Lengkap Menggunakan Nama Bahasa Tingkat Kolom

Saat membuat indeks teks lengkap, Anda perlu menentukan nama bahasa yang valid untuk setiap kolom. Jika nama bahasa valid tetapi tidak dikembalikan oleh tampilan katalog sys.fulltext_languages (Transact-SQL), pencarian teks lengkap akan kembali ke nama bahasa terdekat yang tersedia dari keluarga bahasa yang sama, jika ada. Jika tidak, pencarian teks lengkap kembali ke pemecah kata Netral. Perilaku fall-back ini dapat memengaruhi akurasi pengenalan. Oleh karena itu, kami sangat menyarankan Anda menentukan nama bahasa yang valid dan tersedia untuk setiap kolom saat membuat indeks teks lengkap.

Catatan

LCID digunakan terhadap semua jenis data yang memenuhi syarat untuk pengindeksan teks lengkap (seperti karakter atau nchar). Jika Anda memiliki urutan urutan karakter, varchar, atau kolom jenis teks yang diatur ke pengaturan bahasa yang berbeda dari bahasa yang diidentifikasi oleh LCID, LCID tetap digunakan selama pengindeksan teks penuh dan kueri kolom tersebut.

Pemecahan Kata

Pemecah kata memberi tokenisasi teks yang sedang diindeks pada batas kata, yang khusus untuk bahasa. Oleh karena itu, perilaku pemecahan kata berbeda di antara berbagai bahasa. Jika Anda menggunakan satu bahasa, x, untuk mengindeks sejumlah bahasa {x, y, dan z}, beberapa perilaku dapat menyebabkan hasil yang tidak terduga. Misalnya, tanda hubung (-) atau koma (,) mungkin merupakan elemen pemecah kata yang akan dibuang dalam satu bahasa tetapi tidak dalam bahasa lain. Juga jarang terjadi perilaku stemming yang tidak terduga mungkin terjadi karena kata tertentu mungkin membendung secara 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 bersama-sama. Oleh karena itu, bahasa tingkat kolom yang Anda pilih harus mewakili bahasa yang Anda harapkan akan 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 disimpan, solusi umumnya 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 sangat mirip, dengan pola Jerman menjadi yang paling kompleks. Oleh karena itu, pilihan yang baik adalah hal ini adalah menggunakan pemecah kata Jerman, yang seharusnya 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.

Perhatikan bahwa menggunakan pemecah kata dari bahasa yang paling kompleks dalam keluarga bahasa tidak menjamin pengindeksan yang sempurna dari setiap bahasa dalam keluarga. Kasus sudut mungkin ada di mana pemecah kata yang paling kompleks tidak dapat menangani teks yang ditulis dengan benar dalam bahasa lain.

Bahasa Non Barat

Untuk bahasa non-Barat (seperti Cina, Jepang, Hindi, dan sebagainya) solusi di atas tidak selalu berfungsi, 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. Ini akan 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)

    Ketika konten terindeks berjenis biner , filter pencarian teks lengkap yang memproses konten tekstual sebelum mengirimkannya ke pemecah kata mungkin menghormati tag bahasa tertentu yang ada dalam file biner. Dalam hal ini, pada waktu pengindeksan, filter akan memancarkan LCID yang tepat untuk dokumen atau bagian dokumen. Mesin Teks Lengkap kemudian akan memanggil pemecah kata untuk bahasa dengan LCID tersebut. Namun, setelah mengindeks konten multi bahasa, kami sarankan Anda memverifikasi bahwa konten 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.

Berasal

Pertimbangan tambahan saat memilih bahasa tingkat kolom Anda adalah stemming. Stemming dalam kueri teks lengkap adalah proses mencari semua bentuk kata (infleksional) yang bertangkai 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 Jerman tidak berfungsi untuk bahasa Inggris atau Spanyol (dan sebagainya). Ini mungkin memengaruhi pengenalan Anda tergantung pada bahasa mana yang Anda pilih pada waktu kueri.

Efek Tipe Kolom pada Pencarian Teks-Penuh

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. Jadi, jika Anda memiliki jenis markup (seperti HTML) pada teks Anda, Anda mungkin tidak mendapatkan akurasi linguistik yang hebat selama pengindeksan dan pencarian. Dalam hal ini, Anda memiliki dua pilihan-metode pilihan hanyalah menyimpan data teks di kolom varbinary(max), dan untuk menunjukkan jenis dokumennya sehingga dapat difilter. Jika ini bukan opsi, Anda dapat mempertimbangkan untuk menggunakan pemecah kata netral dan, jika memungkinkan, menambahkan data markup (seperti 'br' dalam HTML) ke daftar kata kebisingan Anda.

Catatan

Stemming berbasis bahasa tidak dimainkan ketika Anda menentukan bahasa netral.

Menentukan Bahasa Tingkat Kolom Non-default dalam Kueri Teks Lengkap

Secara default, di SQL Server, pencarian teks lengkap akan mengurai istilah kueri menggunakan bahasa yang ditentukan untuk setiap kolom yang disertakan dalam klausa teks lengkap. Untuk mengambil alih perilaku ini, tentukan bahasa nondefault pada waktu kueri. Untuk bahasa yang didukung yang sumber dayanya diinstal, bahasa language_term klausul kueri CONTAINS, CONTAINSTABLE, FREETEXT, atau FREETEXTTABLE dapat digunakan untuk menentukan bahasa yang digunakan untuk pemecahan kata, stemming, tesaurus, dan stopword pemrosesan istilah kueri.

Lihat Juga

CONTAINS (Transact-SQL)
CONTAINSTABLE (Transact-SQL)
Tipe Data (Transact-SQL)
FREETEXT (T-SQL)
FREETEXTTABLE (Transact-SQL)
Mengonfigurasi dan Mengelola Filter untuk Pencarian
sp_fulltext_service (T-SQL)
sys.fulltext_languages (Transact-SQL)
Mengonfigurasi dan Mengelola Word Breakers dan Stemmers untuk Pencarian