Saat Anda membuat text
index di MongoDB, indeks menggunakan bahasa default english
.
Bahasa default menentukan aturan untuk mengurai akar kata (yaitu stemming) dan mengabaikan kata berhenti.
Namun, Anda dapat mengubah bahasa default jika diperlukan.
Anda juga dapat menentukan bahasa di tingkat dokumen, dan bahkan di tingkat subdokumen. Bahasa default hanya akan digunakan jika bahasa belum ditentukan di tingkat dokumen atau subdokumen.
Artikel ini menyajikan contoh menentukan bahasa untuk text
indeks.
Contoh Koleksi
Misalkan kita memiliki koleksi yang disebut sitcoms
dengan dokumen seperti ini:
{ "_id" : 1, "original_name" : "Family Guy", "translations" : { "language" : "german", "sitcom_name" : "Familienmensch" } } { "_id" : 2, "original_name" : "Cuéntame como pasó", "language" : "spanish", "translations" : [ { "language" : "english", "sitcom_name" : "Tell me how it happened" }, { "language" : "french", "sitcom_name" : "Raconte-moi comment cela s'est passé" } ] }
Kita dapat melihat bahwa ada dua dokumen dalam koleksi ini. Setiap dokumen berisi nama sitkom, bersama dengan terjemahan nama sitkom tersebut dalam bahasa yang berbeda. Bahasa setiap terjemahan ditentukan dalam language
bidang subdokumen masing-masing.
Dokumen kedua dalam koleksi ini juga menyertakan language
bidang di tingkat atas (dalam hal ini, "language" : "spanish"
). Ini berarti nama sitkom dalam bahasa Spanyol (atau setidaknya, bahasa Spanyol adalah bahasa yang ingin kami gunakan saat dokumen ini diindeks).
Namun, dokumen pertama tidak berisi bidang seperti itu. Fakta bahwa dokumen pertama tidak berisi language
tingkat atas field berarti kita ingin diindeks menggunakan bahasa default. Jika tidak ada bahasa default yang ditentukan selama pengindeksan, maka bahasa default adalah bahasa Inggris.
Jika dokumen yang disematkan tidak berisi bidang yang menentukan bahasa, maka itu akan menggunakan bidang bahasa dari dokumen terlampir. Jika dokumen terlampir tidak berisi bidang bahasa, maka itu akan menggunakan bahasa default.
Buat Indeks Teks untuk Berbagai Bahasa
Mari kita lanjutkan dan buat text
indeks untuk koleksi di atas.
db.sitcoms.createIndex(
{
"original_name": "text",
"translations.sitcom_name": "text"
}
)
Itu menciptakan text
gabungan indeks pada original_name
bidang, dan translations.sitcom_name
bidang (yaitu sitcom_name
dalam dokumen yang disematkan).
Sekarang mari kita gunakan getIndexes()
untuk melihat indeks itu:
db.sitcoms.getIndexes()
Hasil:
[ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" }, { "v" : 2, "key" : { "_fts" : "text", "_ftsx" : 1 }, "name" : "original_name_text_translations.sitcom_name_text", "weights" : { "original_name" : 1, "translations.sitcom_name" : 1 }, "default_language" : "english", "language_override" : "language", "textIndexVersion" : 3 } ]
Kita dapat melihat bahwa ia menggunakan bahasa default bahasa Inggris. Ini ditetapkan sebagai "default_language" : "english"
.
Ubah Bahasa Default
Kami dapat mengatur bahasa default yang berbeda saat membuat indeks jika diperlukan.
Mari lepaskan indeks dan buat ulang dengan bahasa default yang berbeda:
db.sitcoms.dropIndex("original_name_text_translations.sitcom_name_text")
db.sitcoms.createIndex(
{
"original_name": "text",
"translations.sitcom_name": "text"
},
{
"default_language": "danish"
}
)
Mari kita lihat indeksnya:
db.sitcoms.getIndexes()
Hasil:
[ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" }, { "v" : 2, "key" : { "_fts" : "text", "_ftsx" : 1 }, "name" : "original_name_text_translations.sitcom_name_text", "default_language" : "danish", "weights" : { "original_name" : 1, "translations.sitcom_name" : 1 }, "language_override" : "language", "textIndexVersion" : 3 } ]
Kita dapat melihat bahwa bahasa default sekarang adalah danish
seperti yang ditentukan.
language_override
Parameter
Anda mungkin bertanya-tanya “bagaimana MongoDB mengetahui bahwa language
dokumen tersebut bidang adalah bidang yang menentukan bahasa?”.
Dan itu pertanyaan yang bagus. Lagi pula, bagaimana jika kita memberi bidang itu nama yang berbeda – bagaimana MongoDB tahu bahwa itu adalah bidang yang digunakan untuk bahasa?
Jika Anda melihat indeks di atas, Anda akan melihat bahwa ia memiliki language_override
bidang. Secara khusus, seperti ini:"language_override" : "language"
Artinya language
dokumen itu bidang akan menjadi bidang yang digunakan indeks untuk mengganti bahasa.
Saat Anda membuat text
indeks, indeks akan mencari bidang apa pun yang disebut language
lalu gunakan itu sebagai bahasa untuk masing-masing dokumen.
Namun, nama language
tidak diatur dalam batu. Anda dapat mengubahnya jika Anda menginginkannya.
Misalkan koleksi kita berisi dokumen dengan nama bidang dalam bahasa Denmark.
Seperti ini:
{ "_id" : 1, "originalt_navn" : "Family Guy", "sprog" : "english", "oversættelser" : { "sprog" : "german", "sitcom-navn" : "Familienmensch" } } { "_id" : 2, "originalt_navn" : "Cuéntame como pasó", "sprog" : "spanish", "oversættelser" : [ { "sprog" : "english", "sitcom-navn" : "Tell me how it happened" }, { "sprog" : "french", "sitcom-navn" : "Raconte-moi comment cela s'est passé" } ] }
Dalam hal ini, sprog
adalah bidang yang menentukan bahasa setiap dokumen.
Oleh karena itu, kita dapat membuat indeks sebagai berikut:
db.sitcoms.createIndex(
{
"original_name": "text",
"translations.sitcom_name": "text"
},
{
"default_language": "danish",
"language_override": "sprog"
}
)
Mari kita periksa indeksnya:
db.sitcoms.getIndexes()
Hasil:
[ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" }, { "v" : 2, "key" : { "_fts" : "text", "_ftsx" : 1 }, "name" : "original_name_text_translations.sitcom_name_text", "default_language" : "danish", "language_override" : "sprog", "weights" : { "original_name" : 1, "translations.sitcom_name" : 1 }, "textIndexVersion" : 3 } ]
Dalam text
kami yang baru dibuat indeks, kami memiliki default_language
sebagai danish
, dan language_override
bidang sebagai sprog
.
Bahasa yang Tersedia
Pada saat penulisan, ada sekitar 15 bahasa yang didukung oleh text
indeks dan $text
operator.
Anda dapat menggunakan nama bahasa bentuk panjang (seperti pada contoh di atas) atau kode bahasa dua huruf ISO 639-1.
Daftar bahasa pencarian teks tersedia di situs web MongoDB.