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

Buat Indeks Teks dengan Bobot Bidang Berbeda di MongoDB

Saat Anda membuat text index di MongoDB, Anda memiliki opsi untuk menerapkan bobot yang berbeda untuk setiap bidang yang diindeks.

Bobot ini menunjukkan signifikansi relatif dari bidang yang diindeks satu sama lain. Bidang dengan bobot lebih tinggi akan lebih berdampak pada hasil penelusuran daripada bidang dengan bobot lebih rendah.

Ini memberi Anda sejumlah kontrol atas bagaimana hasil pencarian dihitung.

Bobot defaultnya adalah 1, jadi jika Anda tidak menentukan bobot untuk bidang, bobotnya akan diberi bobot 1.

Contoh

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

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

Kita bisa membuat text gabungan indeks ke tiga bidang teks dan terapkan bobot yang berbeda untuk masing-masing bidang.

Seperti ini:

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

Ketika saya membuat senyawa text 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() :

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.

Indeks Teks Karakter Pengganti dengan Bidang Berbobot

Anda dapat menerapkan bobot saat membuat indeks teks karakter pengganti. Indeks teks karakter pengganti dapat berguna saat Anda tidak tahu bidang teks apa yang akan ada di dokumen. Anda mungkin tahu beberapa , tapi tidak semua.

Dalam kasus seperti itu, Anda bisa membuat indeks teks karakter pengganti, dan menetapkan bobot ke bidang yang Anda ketahui. Bidang lainnya akan diberi nilai default 1.

Misalkan kita memiliki dokumen berikut sebagai pedoman:

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

Ini mirip dengan dokumen sebelumnya, kecuali sekarang memiliki tags bidang yang berisi array. Tapi untuk semua yang kita tahu, dokumen masa depan dalam koleksi itu bisa memiliki bidang lain – seperti mungkin categories , keywords , author_bio , dll.

Tapi kami tidak benar-benar tahu, jadi kami akan membuat indeks teks wildcard yang akan merangkum semua bidang dengan data string. Dan kami akan membuat pembobotan untuk beberapa bidang yang diketahui.

Contoh:

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

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() , kita dapat melihat bobot yang diberikan pada field:

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. Array bersarang $pull query menggunakan driver C# MongoDB

  2. Bagaimana cara melakukan Order By berdasarkan nilai di MongoDB?

  3. Apakah MongoDB memiliki antarmuka REST asli?

  4. MongoDB $substrBytes

  5. Masukkan Nilai pada Posisi Tertentu dalam Array di MongoDB