MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Създайте индекс за заместващ текст в MongoDB

MongoDB ни предоставя възможността да създаваме заместващи текстови индекси.

Текстовите индекси с заместващи символи са подобни на индексите с заместващи символи, с изключение на това, че текстовите индекси с заместващи символи поддържат $text оператор, докато индексите на заместващи символи не го правят.

Въпреки това създаването на всеки тип индекс е много подобно в смисъл, че и двамата споделят заместващия знак $** модел на полето.

Пример

Да предположим, че имаме колекция, наречена posts , и съдържа документи, които изглеждат така:

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

Бихме могли да създадем текстов индекс с заместващи знаци за тази колекция по следния начин:

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

Изход:

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

Това използва заместващия знак $** модел на поле, за да създадете индекс за всички текстови полета. Когато създадете индекс като този, MongoDB индексира всяко поле, което съдържа низови данни за всеки документ в колекцията.

Това може да бъде полезно, ако колекцията съдържа много неструктурирано съдържание и няма последователност на текстовите полета в документите. В такива случаи няма да можете изрично да включите полетата в индекса, защото няма да знаете кои полета ще бъдат в документите.

Претеглени полета

Можете да използвате weights параметър за присвояване на различни тегла на полетата в текстов индекс.

Пример:

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

Изход:

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

В този случай body полето получава тежест от 10 и abstract полето получава тежест от 5 . Това означава, че body поле има два пъти по-голямо въздействие от абстрактното поле и десет пъти по-голямо въздействие от всички други текстови полета (защото ще им бъде присвоена тежест по подразбиране от 1).

След създаването на този индекс, ако извикаме getIndexes() за да върнем всички индекси за колекцията, можем да видим тежестите, дадени на полетата:

db.posts.getIndexes()

Резултат:

[
	{
		"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
	}
]

Както се очакваше, body полето получава 10 , abstract полето получава 5 , а всички останали получават 1 .


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB:намерете и findOne с филтриране на вложени масиви

  2. Преглед на MongoDB Database Profiler

  3. Какъв е максималният размер на пакетната операция на MongoDB?

  4. Намерете дали някой е имал рожден ден през следващите 30 дни с mongo

  5. Как да се свържете с вашите MongoDB внедрявания, използвайки Robo 3T GUI