sql >> Database teknologi >  >> NoSQL >> MongoDB

Opret et wildcard-tekstindeks i MongoDB

MongoDB giver os mulighed for at oprette jokertegn-tekstindekser.

Jokertegntekstindekser ligner jokertegnindekser, bortset fra at jokertegntekstindekser understøtter $text operatør, hvorimod jokertegnsindekser ikke gør det.

Når det er sagt, er oprettelsen af ​​hver indekstype meget ens i den forstand, at de begge deler jokertegnet $** feltmønster.

Eksempel

Antag, at vi har en samling kaldet posts , og den indeholder dokumenter, der ser sådan ud:

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

Vi kunne oprette et jokertegn-tekstindeks på den samling som dette:

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

Output:

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

Det bruger jokertegnet $** feltmønster for at oprette et indeks på alle tekstfelter. Når du opretter et indeks som dette, indekserer MongoDB hvert felt, der indeholder strengdata for hvert dokument i samlingen.

Det kan være nyttigt at gøre dette, hvis samlingen indeholder masser af ustruktureret indhold, og der ikke er nogen sammenhæng mellem tekstfelterne i dokumenterne. I sådanne tilfælde vil du ikke være i stand til eksplicit at inkludere felterne i indekset, fordi du ikke ved, hvilke felter der skal være i dokumenterne.

Vægtede felter

Du kan bruge weights parameter for at tildele forskellige vægte til felterne i et jokertegns-tekstindeks.

Eksempel:

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

Output:

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

I dette tilfælde er body felt får en vægt på 10 og den abstract felt får en vægt på 5 . Det betyder, at body felt har dobbelt så stor effekt som det abstrakte felt og ti gange så stor effekt som alle andre tekstfelter (fordi de vil blive tildelt standardvægten 1).

Efter at have oprettet det indeks, hvis vi kalder getIndexes() for at returnere alle indekser for samlingen, kan vi se de vægtninger, der er givet til felterne:

db.posts.getIndexes()

Resultat:

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

Som forventet, body felt får 10 , den abstract felt får 5 , og alle andre får 1 .


  1. Forespørger efter befolkning i Mongoose

  2. Diagnosticerer uventet redis-serverfejl

  3. konvertering af database fra mysql til mongoDb

  4. Redis :Hvordan kan jeg sortere min hash efter nøgler?