MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

Buat Indeks Teks Multi-Bahasa di MongoDB

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.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. 5 Cara Mendapatkan Detik dari Kencan di MongoDB

  2. Ikhtisar Transaksi ACID Multi-Dokumen di MongoDB dan Cara Menggunakannya

  3. Hapus dengan _id di konsol MongoDB

  4. Bagaimana saya bisa menyimpan waktu dalam sehari di MongoDB? Sebagai tali? Berikan tahun/bulan/hari sewenang-wenang?

  5. Tahapan Kerangka Kerja Agregasi MongoDB dan Pipelining