Para indexação, o MongoDB Search conta cada documento como um único objeto de índice quando não está aninhado dentro de outro documento. Para documentos incorporados, o MongoDB Search conta cada documento incorporado como objetos de índice adicionais, dependendo do número de níveis de aninhamento. O MongoDB Search para de replicar alterações para índices maiores que 2,100,000,000 objetos de índice.
Se você distribuiu a pesquisa do MongoDB em nós de pesquisa separados, poderá aumentar o número de objetos de índice do MongoDB Search particionamento seu índice. Por padrão, o MongoDB Search suporta uma partição por fragmento. Cada partição suporta até 2 bilhões de objetos de índice. Você pode criar um índice com até quatro (4
) partições utilizando a opção numPartitions
. Essas partições representam um único índice com suporte para até 8documentos B por cluster ou shard.
Quando você configura partições para seu índice, o MongoDB Search distribui automaticamente os objetos de índice entre as partições de maneira ideal. Quando você executa consultas em uma coleção com partições de índice, o MongoDB Search dispersa as consultas em todas as partições e reúne os resultados da pesquisa e metadados para classificar, mesclar e retornar os resultados.
Recomendamos o particionamento do seu índice quando:
Seus objetos de índice atingem 50% do limite total.
O número de documentos em sua coleção chega a dois bilhões.
Seu índice conterá até oito bilhões de documentos.
Seu índice está no estado
STALE
porque o MongoDB Search interrompeu a replicação.
Quando você configura partições ou modifica o número de partições, o MongoDB Search aciona uma reconstrução do seu índice.
Se você tiver mais de uma partição em seu cluster, não poderá remover todos os nós de pesquisa e migrar para um modelo de sistema em que os processos mongod
e mongot
são executados no mesmo nó.
Sintaxe
1 { 2 "numPartitions": <integer> 3 }
Valores suportados
A opção MongoDB Search numPartitions
obtém os seguintes valores:
1
- para criar um único índice, sem partições adicionais. Este é o valor padrão.2
- para criar até duas partições para até quatro bilhões de documentos.4
- para criar até quatro partições para até oito bilhões de documentos.
Exemplo
O exemplo de índice seguinte utiliza a collection sample_mflix.movies
para demonstrar como configurar até 4
partições para os dados na collection. Você pode usar o Editor Visual ou o Editor JSON na UI do Atlas e outros clientes compatíveis para criar o índice.
➤ Use o menu suspenso Selecione a linguagem para definir o cliente do exemplo nesta seção.
curl --user "{PUBLIC-KEY}:{PRIVATE-KEY}" --digest \ --header "Accept: application/json" \ --header "Content-Type: application/json" \ --include \ --request POST "https://cloud.mongodb.com/api/atlas/v2/groups/{groupId}/clusters/{clusterName}/search/indexes" \ --data ' { "collectionName": "movies", "database": "sample_mflix", "name": "partitioned_index", "type": "search", "definition": { "analyzer": "lucene.standard", "mappings": { "dynamic": true, }, "numPartitions": 4, "searchAnalyzer": "lucene.standard" } }'
Crie um arquivo chamado
indexDef.json
semelhante ao seguinte:{ "collectionName": "movies", "database": "sample_mflix", "definition": { "mappings": { "dynamic": true }, }, "name": "partitioned_index", "numPartitions": 4 } Execute o seguinte comando para criar o índice.
atlas deployments search indexes create --file indexDef.json
No Atlas, vá Search & Vector Search para a página para seu cluster.
Você pode acessar a página de pesquisa do MongoDB a partir da opção Search & Vector Search ou do Data Explorer.
Se ainda não tiver sido exibido, selecione a organização que contém seu projeto no menu Organizations na barra de navegação.
Se ainda não estiver exibido, selecione seu projeto no menu Projects na barra de navegação.
Na barra lateral, clique em Search & Vector Search sob o título Database.
Se você não tiver clusters, clique em Create cluster para criar um. Para saber mais, consulte Criar um cluster.
Se o seu projeto tiver vários clusters, selecione o cluster que deseja usar no menu suspenso Select cluster e clique em Go to Atlas Search.
A página Pesquisa e Vector Search é exibida.
Se ainda não tiver sido exibido, selecione a organização que contém seu projeto no menu Organizations na barra de navegação.
Se ainda não estiver exibido, selecione seu projeto no menu Projects na barra de navegação.
Na barra lateral, clique em Data Explorer sob o título Database.
Expanda o banco de dados e selecione a coleção.
Clique na guia Indexes da coleção.
A página Atlas Search é exibida.
Inicie a configuração do seu índice.
Faça as seguintes seleções na página e clique em Next.
Search Type | Selecione o tipo de índice MongoDB Search. |
Index Name and Data Source | Especifique as seguintes informações:
|
Configuration Method | For a guided experience, select Visual Editor. To edit the raw index definition, select JSON Editor. |
IMPORTANTE:
Seu índice do MongoDB Search é denominado default
por padrão. Se você manter esse nome, seu índice será o índice de pesquisa padrão para qualquer consulta do MongoDB Search que não especifique uma opção index
diferente em seus operadores. Se você estiver criando vários índices, recomendamos que mantenha uma convenção de nomenclatura descritiva consistente em seus índices.
Especifique a definição do índice.
Clique em Refine Your Index.
Alterne Index Partitions para habilitá-lo.
Selecione
4
no menu suspenso Number of partitions e clique em Save Changes.
Substitua a definição de índice padrão pelo seguinte:
{ "mappings": { "dynamic": true }, "numPartitions": 4 } Clique em Next.
Verifique o status.
O índice recém-criado aparece na aba Atlas Search. Enquanto o índice está construindo, o campo Status lê Build in Progress. Quando o índice terminar de construir, o campo Status lê Active.
IMPORTANTE: collections maiores demoram mais tempo para indexar. Você receberá uma notificação por e-mail quando seu índice terminar a criação.
db.movies.createSearchIndex( "search-index", { mappings: { dynamic: true }, "numPartitions": 4 } )
using MongoDB.Bson; using MongoDB.Driver; // connect to your Atlas deployment var uri = "<connection-string>"; var client = new MongoClient(uri); var db = client.GetDatabase("sample_mflix"); var collection = db.GetCollection<BsonDocument>("movies"); // define your MongoDB Search index var index = new BsonDocument { { "mappings", new BsonDocument { { "dynamic", true } } }, { "numPartitions", 4 } }; var result = collection.SearchIndexes.CreateOne(index, "partitioned_index"); Console.WriteLine(result);
import com.mongodb.client.MongoClient; import com.mongodb.client.MongoClients; import com.mongodb.client.MongoCollection; import com.mongodb.client.MongoDatabase; import org.bson.Document; public class CreateIndex { public static void main(String[] args) { // connect to your Atlas cluster String uri = "<connection-string>"; try (MongoClient mongoClient = MongoClients.create(uri)) { // set namespace MongoDatabase database = mongoClient.getDatabase("sample_mflix"); MongoCollection<Document> collection = database.getCollection("movies"); Document index = new Document() .append("mappings", new Document() .append("dynamic", true) ) .append("numPartitions", 4); collection.createSearchIndex("partitioned_index", index); } } }
import { MongoClient } from "mongodb"; // connect to your Atlas deployment const uri = "<connection-string>"; const client = new MongoClient(uri); async function run() { try { const database = client.db("sample_mflix"); const collection = database.collection("movies"); // define your MongoDB Search index const index = { name: "partitioned_index", definition: { /* search index definition fields */ "mappings": { "dynamic": true }, "numPartitions": 4 } } // run the helper method const result = await collection.createSearchIndex(index); console.log(result); } finally { await client.close(); } } run().catch(console.dir);
from pymongo.mongo_client import MongoClient from pymongo.operations import SearchIndexModel def create_index(): # Connect to your Atlas deployment uri = "<connectionString>" client = MongoClient(uri) # Access your database and collection database = client["sample_mflix"] collection = database["movies"] # Create your index model, then create the search index search_index_model = SearchIndexModel( definition={ "mappings": { "dynamic": True }, "numPartitions": 4 }, name="partitioned_index", ) result = collection.create_search_index(model=search_index_model) print(result)