MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Utwórz indeks tekstowy symboli wieloznacznych w MongoDB

MongoDB zapewnia nam możliwość tworzenia indeksów tekstowych z symbolami wieloznacznymi.

Indeksy tekstowe z symbolami wieloznacznymi są podobne do indeksów z symbolami wieloznacznymi, z wyjątkiem tego, że indeksy tekstowe z symbolami wieloznacznymi obsługują $text operatora, podczas gdy indeksy wieloznaczne nie.

To powiedziawszy, tworzenie każdego typu indeksu jest bardzo podobne w tym sensie, że oba mają wspólny symbol wieloznaczny $** wzór pola.

Przykład

Załóżmy, że mamy kolekcję o nazwie posts i zawiera dokumenty, które wyglądają tak:

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

Możemy utworzyć indeks tekstowy z symbolami wieloznacznymi dla tej kolekcji w ten sposób:

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

Wyjście:

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

Używa symbolu wieloznacznego $** wzorzec pola, aby utworzyć indeks na wszystkich polach tekstowych. Kiedy tworzysz indeks w ten sposób, MongoDB indeksuje każde pole zawierające dane ciągu dla każdego dokumentu w kolekcji.

Może to być przydatne, jeśli kolekcja zawiera dużo nieustrukturyzowanej treści i nie ma spójności pól tekstowych w dokumentach. W takich przypadkach nie będziesz w stanie wyraźnie uwzględnić pól w indeksie, ponieważ nie będziesz wiedział, które pola znajdą się w dokumentach.

Pola ważone

Możesz użyć weights parametr, aby przypisać różne wagi do pól w indeksie tekstu wieloznacznego.

Przykład:

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

Wyjście:

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

W tym przypadku body pole otrzymuje wagę 10 i abstract pole otrzymuje wagę 5 . Oznacza to, że body pole ma dwukrotnie większy wpływ niż pole abstrakcyjne i dziesięciokrotnie większy wpływ wszystkich innych pól tekstowych (ponieważ zostanie im przypisana domyślna waga 1).

Po utworzeniu tego indeksu, jeśli wywołamy getIndexes() aby zwrócić wszystkie indeksy dla kolekcji, możemy zobaczyć wagi nadane polom:

db.posts.getIndexes()

Wynik:

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

Zgodnie z oczekiwaniami body pole otrzymuje 10 , abstract pole otrzymuje 5 , a wszyscy inni otrzymują 1 .


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Max i min w mongodb

  2. mongoDB :Tworzenie identyfikatora obiektu dla każdego nowego dziecka dodanego do pola tablicy

  3. Zabezpieczenia wywłaszczające z rejestrowaniem audytu dla MongoDB

  4. Jak ustawić _id na dokument db w Mongoose?

  5. MongoDB znajdź()