Menu Docs

Configurar partição de índice

Importante

A opção numPartitions está disponível como um recurso de visualização.

Para indexação, o Atlas Search considera cada documento como um único objeto de índice quando não está aninhado dentro de outro documento. Para documentos incorporados, o Atlas Search conta cada documento incorporado como objetos adicionais de índice, dependendo do número de níveis de aninhamento. O Atlas Search para de replicar alterações para índices maiores que 2.100.000.000 objetos de índice.

Se você implantou o Atlas Search em nós de pesquisa separados, pode aumentar o número de objetos de índice do Atlas Search particionando seus objetos de índice em subíndices. Por padrão, o Atlas Search suporta uma partição por fragmento. Cada partição suporta até 2 bilhões de objetos de índice. Você pode criar até sessenta e quatro (64) subíndices utilizando a opção numPartitions.

Quando você configura partições para o seu índice, o Atlas Search distribui automaticamente os objetos do índice entre os subíndices de maneira otimizada. Quando você executa consultas em uma coleção com sub-índices, o Atlas Search distribui as consultas para todos os sub-índices e coleta os resultados da pesquisa e os 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 está no estado STALE porque o Atlas Search interrompeu a replicação.

Quando você configura subíndices ou modifica o número de subíndices, o Atlas Search aciona uma reconstrução do seu índice.

Se você tiver mais de um subíndice no seu cluster, não poderá remover todos os nós de pesquisa e migrar para um modelo de implantação onde os processos mongod e mongot são executados no mesmo nó.

{
"name": "<index-name>",
"analyzer": "<analyzer-for-index>",
"searchAnalyzer": "<analyzer-for-query>",
"mappings": {
"dynamic": <boolean>,
"fields": { <field-definition> }
},
"numPartitions": <integer>,
...
}

A opção Atlas Search numPartitions aceita os seguintes valores:

  • 1 - para criar um único índice, sem subíndices adicionais. Este é o valor padrão.

  • 2 - para criar até dois subíndices.

  • 4 - para criar até quatro sub-índices.

  • 8 - criar até oito sub-índices.

  • 16 - para criar até dezesseis sub-índices.

  • 32 - para criar até trinta e dois subíndices.

  • 64 - criar até sessenta e quatro sub-índices.

O exemplo de índice a seguir utiliza a coleção sample_mflix.movies para demonstrar como configurar até 4 subíndices para os dados na coleção. Você pode usar o Editor Visual ou o EditorJSON na IU 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"
}
}'
  1. Crie um arquivo chamado indexDef.json semelhante ao seguinte:

    {
    "collectionName": "movies",
    "database": "sample_mflix",
    "definition": {
    "mappings": {
    "dynamic": true
    },
    },
    "name": "partitioned_index",
    "numPartitions": 4
    }
  2. Execute o seguinte comando para criar o índice.

    atlas deployments search indexes create --file indexDef.json
1
  1. Se ainda não tiver sido exibido, selecione a organização que contém seu projeto no menu Organizations na barra de navegação.

  2. Se ainda não estiver exibido, selecione o projeto desejado no menu Projects na barra de navegação.

  3. Se ainda não estiver exibido, clique em Clusters na barra lateral.

    A página Clusters é exibida.

2

Você pode acessar a página do Atlas Search pela barra lateral, pelo Data Explorer ou pela página de detalhes do cluster.

  1. Na barra lateral, clique em Atlas Search sob o título Services.

    Observação

    Se você não tiver clusters, clique em Create cluster para criar um. Para saber mais, consulte Criar um cluster.

  2. No menu suspenso Select data source, selecione seu cluster e clique em Go to Atlas Search.

    A página Atlas Search é exibida.

  1. Clique no botão Browse Collections para o seu cluster.

  2. Expanda o banco de dados e selecione a coleção.

  3. Clique na guia Search Indexes da coleção.

    A página Atlas Search é exibida.

  1. Clique no nome do seu cluster.

  2. Clique na aba Atlas Search.

    A página Atlas Search é exibida.

3
4

Faça as seguintes seleções na página e clique em Next.

Search Type

Selecione o tipo de índice Atlas Search.

Index Name and Data Source

Especifique as seguintes informações:

  • Index Name: partitioned_index

  • Database and Collection:

    • sample_mflix database

    • movies collection

Configuration Method

For a guided experience, select Visual Editor.

To edit the raw index definition, select JSON Editor.
5
  1. Clique em Refine Your Index.

  2. Alterne Index Partitions para habilitá-lo.

  3. Selecione 4 no menu suspenso Number of partitions e clique em Save Changes.

  1. Substitua a definição de índice padrão pelo seguinte:

    {
    "mappings": {
    "dynamic": true
    },
    "numPartitions": 4
    }
  2. Clique em Next.

6

O Atlas exibe um Toast (notificação breve e não interativa) para informar que seu índice está crescendo.

7

O índice recém-criado aparece na aba Atlas Search. Enquanto o índice está construindo, o campo StatusBuild in Progress. Quando o índice terminar de construir, o campo StatusActive.

Observação

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 Atlas 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 Atlas 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)