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

Cara Membuat Indeks Teks di MongoDB

Ada berbagai jenis indeks yang dapat Anda buat di MongoDB. Jika Anda memiliki bidang yang berisi string atau larik string, Anda dapat menggunakan text indeks di bidang itu.

Untuk membuat text indeks, gunakan string literal "text" sebagai nilai saat membuatnya.

Buat Indeks Teks pada Satu Bidang

Misalkan kita memiliki koleksi yang disebut posts , dan berisi dokumen seperti ini:

{
	"_id" : 1,
	"title" : "The Web",
	"body" : "Body text...",
	"abstract" : "Abstract text..."
}

Kita mungkin ingin membuat text indeks pada body bidang, atau abstract bidang, atau bahkan keduanya.

Berikut cara membuat text indeks pada body bidang:

db.posts.createIndex( { body : "text" } )

Keluaran:

{
	"createdCollectionAutomatically" : false,
	"numIndexesBefore" : 1,
	"numIndexesAfter" : 2,
	"ok" : 1
}

Sekarang kita dapat menggunakan getIndexes() metode untuk melihat indeks:

db.posts.getIndexes()

Hasil:

[
	{
		"v" : 2,
		"key" : {
			"_id" : 1
		},
		"name" : "_id_"
	},
	{
		"v" : 2,
		"key" : {
			"_fts" : "text",
			"_ftsx" : 1
		},
		"name" : "body_text",
		"weights" : {
			"body" : 1
		},
		"default_language" : "english",
		"language_override" : "language",
		"textIndexVersion" : 3
	}
]

Kita dapat melihat bahwa ada dua indeks. Yang pertama adalah _id default indeks yang dibuat secara otomatis dengan koleksi. Indeks kedua adalah yang baru saja kita buat.

MongoDB telah secara otomatis menetapkan nama untuk indeks kami yang baru dibuat. Ini disebut body_text .

Buat Indeks Teks Majemuk

Koleksi hanya dapat memiliki satu text indeks, tetapi dapat berupa indeks gabungan jika diperlukan.

Mari kita buat indeks gabungan yang menyertakan body bidang dan abstract lapangan.

Seperti disebutkan, koleksi hanya dapat memiliki satu text index, jadi lepaskan indeks yang baru saja kita buat:

db.posts.dropIndex("body_text")

Keluaran:

{ "nIndexesWas" : 2, "ok" : 1 }

Oke, sekarang kita telah menjatuhkan text indeks, mari kita lanjutkan dan buat yang lain – kali ini akan menjadi indeks gabungan:

db.posts.createIndex( { 
  body : "text",
  abstract : "text"
} )

Keluaran:

{
	"createdCollectionAutomatically" : false,
	"numIndexesBefore" : 1,
	"numIndexesAfter" : 2,
	"ok" : 1
}

Itu adalah pesan konfirmasi yang memberitahu kita bahwa dulu ada 1 indeks tapi sekarang ada 2.

Mari kita periksa kembali daftar indeks:

db.posts.getIndexes()

Hasil:

[
	{
		"v" : 2,
		"key" : {
			"_id" : 1
		},
		"name" : "_id_"
	},
	{
		"v" : 2,
		"key" : {
			"_fts" : "text",
			"_ftsx" : 1
		},
		"name" : "body_text_abstract_text",
		"weights" : {
			"abstract" : 1,
			"body" : 1
		},
		"default_language" : "english",
		"language_override" : "language",
		"textIndexVersion" : 3
	}
]

Perhatikan bahwa gabungan text indeks memiliki batasan berikut:

  • Gabungan text indeks tidak dapat menyertakan jenis indeks khusus lainnya, seperti bidang indeks multi-kunci atau geospasial.
  • Jika gabungan text indeks menyertakan kunci sebelum text kunci indeks, untuk melakukan $text pencarian, predikat kueri harus menyertakan kondisi kecocokan kesetaraan pada kunci sebelumnya.
  • Saat membuat text gabungan indeks, semua text kunci indeks harus dicantumkan bersebelahan dalam dokumen spesifikasi indeks.

Buat Indeks Teks Wildcard

Anda dapat membuat indeks teks karakter pengganti dengan menggunakan karakter pengganti $** pola bidang.

Mari lepaskan indeks sebelumnya dan buat indeks teks karakter pengganti:

db.posts.dropIndex("body_text_abstract_text")
db.posts.createIndex( { "$**" : "text" } )

MongoDB juga memberi kita kemampuan untuk membuat indeks wildcard, namun indeks teks wildcard dan indeks wildcard adalah dua hal yang berbeda.

Secara khusus, indeks teks karakter pengganti mendukung $text operator, sedangkan indeks wildcard tidak.

weights Parameter

Saat membuat text indeks, Anda memiliki opsi untuk menentukan bobot pada satu atau beberapa bidang. Secara default, setiap bidang diberi bobot 1. Namun Anda dapat mengubahnya untuk memberi bobot lebih atau kurang pada bidang dalam hasil penelusuran.

Contoh

db.posts.dropIndex("$**_text")
db.posts.createIndex( 
  { 
    title : "text",
    body : "text",
    abstract : "text"
  },
  {
    weights: {
      body: 10,
      abstract: 5
    } 
  } 
)

Saya memulai dengan menghapus indeks sebelumnya.

Saat saya membuat text baru index, saya menentukan 3 bidang. Ketika saya menentukan bobot, saya menentukan bobot hanya untuk dua bidang itu.

Hasilnya adalah kedua bidang tersebut akan diberi bobot seperti yang ditentukan, dan bidang lainnya (title ) akan memiliki bobot default 1.

Kita dapat melihat ini ketika kita menjalankan getIndexes() lagi:

db.posts.getIndexes()

Hasil:

[
	{
		"v" : 2,
		"key" : {
			"_id" : 1
		},
		"name" : "_id_"
	},
	{
		"v" : 2,
		"key" : {
			"_fts" : "text",
			"_ftsx" : 1
		},
		"name" : "title_text_body_text_abstract_text",
		"weights" : {
			"abstract" : 5,
			"body" : 10,
			"title" : 1
		},
		"default_language" : "english",
		"language_override" : "language",
		"textIndexVersion" : 3
	}
]

Ini berarti bahwa body bidang akan memiliki dua kali signifikansi abstract bidang, dan sepuluh kali signifikansi title lapangan.

Membuat Indeks Teks Beberapa Bahasa

Anda akan melihat bahwa text di atas indeks termasuk "default_language" : "english" dan "language_override" : "language" dalam definisinya.

Bidang-bidang ini membantu menangani dokumen dalam berbagai bahasa. Nilai dalam indeks di atas adalah nilai default.

Saat Anda membuat dokumen, Anda dapat menentukan bahasa dokumen itu dengan menggunakan language bidang (atau bidang lain yang ditentukan dalam language_override bidang text indeks). Jika bidang seperti itu tidak ada dalam dokumen, maka itu akan menggunakan bahasa default yang ditentukan dalam default_language lapangan.

Anda dapat menentukan default_language (dan language_override ) saat Anda membuat file index.

Lihat Membuat Indeks Teks Multi-Bahasa di MongoDB untuk contoh pembuatan indeks teks yang mendukung banyak bahasa.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Menggunakan MongoDB sebagai Sumber Data di GoLang

  2. mongodb 3.x driver kompatibilitas Android

  3. Bagaimana cara memperbarui kriteria pencocokan Elemen Array dalam dokumen MongoDB?

  4. Panduan untuk Mengonfigurasi Load Balancer di Cluster Sharded MongoDB

  5. Bagaimana melakukan Pencarian Teks Lengkap di MongoDB