English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Pesquisa de Texto MongoDB

a partir de2.4A partir da versão inicial, o MongoDB começou a suportar índices de texto para pesquisa de conteúdo de strings. A Pesquisa de Texto (Text Search) usa a análise de raízes em técnicas de análise de palavras para encontrar palavras específicas em campos de strings, removendo palavras de stop (como a, an, The, etc.). Atualmente, o MongoDB suporta aproximadamente15qualquer idioma.}

Habilitar a pesquisa de texto

Inicialmente, "Text Search (Pesquisa de Texto)" era uma funcionalidade experimental, mas desde2.6a partir da versão, essa configuração está habilitada por padrão.

Criar índice de texto

Considerando o seguintepostsos documentos na coleção, que contêm o texto do post e suas tags-

> db.posts.insert({
   "post_text": "aproveite os artigos de mongodb no w3codebox",
   "tags": ["mongodb", "w3codebox"]
}
{
	"post_text": "escrevendo tutoriais sobre mongodb",
	"tags": ["mongodb", "tutorial"]
})
WriteResult({ "nInserted": 1 })

Vamos criar um índice de texto no campo post_text para que possamos procurar no texto dos posts-

> db.posts.createIndex({post_text:"text"})
{
	"createdCollectionAutomatically": true,
	"numIndexesBefore": 1,
	"numIndexesAfter": 2,
	"ok": 1
}

Usando o índice de texto

Agora, criamos um índice de texto no campo post_text, vamos procurarw3codeboxtodos os posts que contêm a palavra.

> db.posts.find({$text:{$search:"w3codebox"}}.pretty(){
	"_id": ObjectId("5dd7ce28f1dd4583e7103fe0"),
	"post_text": "aproveite os artigos de mongodb no w3codebox",
	"tags": [
		"mongodb",
		"w3codebox"
	]
}

O comando acima retorna o seguinte documento de resultado, o documentow3codeboxo texto de publicação contém a palavra:

{ 
   "_id": ObjectId("53493d14d852429c10000002", 
   "post_text": "aproveite os artigos de mongodb no w3codebox", 
   "tags": ["mongodb", "w3codebox"]}

Excluir índice de texto

Para excluir o índice de texto existente, por favor, use a seguinte consulta para encontrar o nome do índice-

>db.posts.getIndexes()[
	{
		"v": 2,
		"key": {
			"_id": 1
		}
		"name": "_id_",
		"ns": "mydb.posts"
	}
	{
		"v": 2,
		"key": {
			"fts": "text",
			"ftsx": 1
		}
		"name": "post_text_text",
		"ns": "mydb.posts",
		"weights": {
			"post_text": 1
		}
		"default_language": "english",
		"language_override": "language",
		"textIndexVersion": 3
	}
]
>

Após obter o nome do índice da consulta acima, execute o comando a seguir. Aqui,post_text_textÉ o nome do índice.

>db.posts.dropIndex("post_text_text")
{ "nIndexesWas": 2, "ok": 1 }