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

Buat Indeks Teks Wildcard di MongoDB

MongoDB memberi kita kemampuan untuk membuat indeks teks wildcard.

Indeks teks karakter pengganti mirip dengan indeks karakter pengganti, kecuali bahwa indeks teks karakter pengganti mendukung $text operator, sedangkan indeks wildcard tidak.

Oleh karena itu, membuat setiap jenis indeks sangat mirip dalam arti keduanya berbagi karakter pengganti $** pola bidang.

Contoh

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

{
	"_id" : 1,
	"title" : "Title text...",
	"body" : "Body text...",
	"abstract" : "Abstract text...",
	"tags" : [
		"tag1",
		"tag2",
		"tag3"
	]
}

Kita bisa membuat indeks teks wildcard pada koleksi itu seperti ini:

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

Keluaran:

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

Itu menggunakan karakter pengganti $** pola bidang untuk membuat indeks pada semua bidang teks. Saat Anda membuat indeks seperti ini, MongoDB mengindeks setiap bidang yang berisi data string untuk setiap dokumen dalam koleksi.

Melakukan hal ini dapat berguna jika koleksi berisi banyak konten tidak terstruktur, dan tidak ada konsistensi bidang teks dalam dokumen. Dalam kasus seperti itu, Anda tidak akan dapat secara eksplisit menyertakan bidang dalam indeks karena Anda tidak akan tahu bidang mana yang akan ada di dokumen.

Bidang Berbobot

Anda dapat menggunakan weights parameter untuk menetapkan bobot yang berbeda ke bidang dalam indeks teks karakter pengganti.

Contoh:

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

Keluaran:

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

Dalam hal ini, body bidang mendapat bobot 10 dan abstract bidang mendapat bobot 5 . Ini berarti bahwa body bidang memiliki dampak dua kali lipat dari bidang abstrak, dan sepuluh kali dampak dari semua bidang teks lainnya (karena akan diberi bobot default 1).

Setelah membuat indeks itu, jika kita memanggil getIndexes() untuk mengembalikan semua indeks untuk koleksi, kita dapat melihat bobot yang diberikan pada kolom:

db.posts.getIndexes()

Hasil:

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

Seperti yang diharapkan, body bidang mendapat 10 , abstract bidang mendapat 5 , dan yang lainnya mendapatkan 1 .


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. node.js &express - modul global &praktik terbaik untuk struktur aplikasi

  2. Melakukan pernyataan kasus dalam kerangka agregasi mongodb

  3. Kueri agregasi rata-rata Mongo tanpa grup

  4. Pembaruan sebagian dari subdokumen dengan nodejs/luwak

  5. MongoDB - Perbarui Dokumen