sql >> Databáze >  >> NoSQL >> MongoDB

Vytvořte zástupný textový index v MongoDB

MongoDB nám poskytuje možnost vytvářet indexy zástupných textů.

Indexy zástupných textů jsou podobné indexům zástupných znaků, kromě toho, že indexy zástupných textů podporují $text operátor, zatímco indexy zástupných znaků nikoli.

To znamená, že vytváření každého typu indexu je velmi podobné v tom smyslu, že oba sdílejí zástupný znak $** vzor pole.

Příklad

Předpokládejme, že máme kolekci nazvanou posts a obsahuje dokumenty, které vypadají takto:

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

Mohli bychom vytvořit zástupný textový index pro tuto kolekci takto:

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

Výstup:

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

To používá zástupný znak $** pole pro vytvoření indexu na všech textových polích. Když vytvoříte index, jako je tento, MongoDB indexuje každé pole, které obsahuje data řetězce pro každý dokument v kolekci.

To může být užitečné, pokud kolekce obsahuje mnoho nestrukturovaného obsahu a v dokumentech není žádná konzistence textových polí. V takových případech byste nemohli explicitně zahrnout pole do indexu, protože byste nevěděli, která pole budou v dokumentech.

Vážená pole

Můžete použít weights parametr pro přiřazení různých vah k polím v indexu zástupných znaků.

Příklad:

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

Výstup:

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

V tomto případě body pole získá váhu 10 a abstract pole získá váhu 5 . To znamená, že body pole má dvakrát větší dopad než abstraktní pole a desetkrát větší dopad než všechna ostatní textová pole (protože jim bude přiřazena výchozí váha 1).

Po vytvoření tohoto indexu, pokud zavoláme getIndexes() abychom vrátili všechny indexy pro kolekci, můžeme vidět váhy dané polím:

db.posts.getIndexes()

Výsledek:

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

Jak se očekávalo, body pole získá 10 , abstract pole získá 5 a všichni ostatní dostanou 1 .


  1. Co je třída Hadoop Reducer v MapReduce?

  2. Jak najít minimální hodnotu v mongodb

  3. Upozornění na ukončení:Poslech událostí ve třídě Db byl zastaralý a bude odstraněn v příští hlavní verzi

  4. mongodb zkontrolujte, zda je bod v mnohoúhelníku