Definição
Novidade na versão 7.0: (Disponível também a partir de 6.0.7)
Cria um ou mais índices doAtlas Search ou índices do Vector Atlas Search em uma collection especificada.
O mongosh método db.collection.createSearchIndex() fornece um wrapper para o createSearchIndexes comando de banco de dados de dados .
Importante
Este comando só pode ser executado em uma implementação hospedada no MongoDB Atlas.
Sintaxe
Sintaxe do comando:
db.runCommand( { createSearchIndexes: "<collection name>", indexes: [ { name: "<index name>", type: "<search index type>", definition: { /* search index definition fields */ } }, ... ] } )
Campos de comando
O comando createSearchIndexes usa os seguintes campos:
Campo | Tipo | necessidade | Descrição |
|---|---|---|---|
| string | Obrigatório | Nome da collection na qual criar o índice de pesquisa. |
| array | Obrigatório | Array de documentos que descrevem os índices a serem criados. |
| string | Opcional | Nome do índice de pesquisa a ser criado. Você não pode criar vários índices com o mesmo nome em uma única collection. Se você não especificar um |
| string | Opcional | Tipo de índice de pesquisa para criar. Você pode especificar:
Se você omitir o campo |
| documento | Obrigatório | Documento que descreve o índice a ser criado. A sintaxe |
Sintaxe de definição do índice de pesquisar
A definição do índice de pesquisa utiliza os seguintes campos:
{ analyzer: "<analyzer-for-index>", searchAnalyzer: "<analyzer-for-query>", mappings: { dynamic: <boolean>, fields: { <field-definition> } }, analyzers: [ <custom-analyzer> ], storedSource: <boolean> | { <stored-source-definition> }, synonyms: [ { name: "<synonym-mapping-name>", source: { collection: "<source-collection-name>" }, analyzer: "<synonym-mapping-analyzer>" } ] }
Campo | Tipo | necessidade | Descrição |
|---|---|---|---|
| string | Opcional | Especifica o analisador para aplicar aos campos da string ao indexar. Se você omitir esse campo, o índice usará o analisador padrão. |
| string | Opcional | Especifica o analisador a ser aplicado ao texto de query antes que o texto seja pesquisado. Se você omitir este campo, o índice utilizará o mesmo analisador especificado no campo Se você omitir |
| objeto | Obrigatório | Especifica como indexar campos em caminhos diferentes para este índice. |
| booleano | Opcional | Habilita ou desabilita o mapeamento de campo dinâmico para este índice. Se configurado Se definido como Se omitido, o padrão é |
| documento | Condicional | Necessário apenas se o mapeamento dinâmico estiver desabilitado. Especifica os campos no índice. Para saber mais, consulte fts-field-mappings. |
| array | Opcional | Especifica os analisadores customizados a serem usados neste índice. |
| boolean ou definição de origem armazenada | Opcional | Especifica os campos de documento a serem armazenados para queries realizadas usando a opção returnedStoredSource. Você pode armazenar campos de todos os bson-data-chart no Atlas Search. O
Se omitido, o padrão é Para saber mais, consulte fts-stored-source-definition. |
| Opcional | Especifica mapeamentos de sinônimos para usar em seu índice. A configuração de sinônimos permite indexar e pesquisar palavras que tenham o mesmo significado ou semelhante. Para saber mais, consulte sinônimos-ref. |
Sintaxe da definição do índice de Vector Search
A definição do índice de pesquisa vetorial usa os seguintes campos:
{ "fields": [ { "type": "vector" | "filter", "path": "<field-to-index>", "numDimensions": <number-of-dimensions>, "similarity": "euclidean" | "cosine" | "dotProduct" } ] }
Para obter explicações sobre os campos de definição de índice de pesquisa , consulte Como indexar campos para o Vector Search.
Comportamento
O comando createSearchIndexes Atlas Triggers uma construção de índice. Pode haver um atraso entre o momento em que você recebe uma resposta do comando e o momento em que o índice está pronto.
Para ver o status dos seus índices de pesquisa, use o estágio de agregação $listSearchIndexes .
Controle de acesso
Se a sua implementação impor o controle de acesso, o usuário executando o comando createSearchIndexes deverá ter a ação de privilégio do createSearchIndexes no reconhecimento de data center ou collection:
{ resource: { db : <database>, collection: <collection> }, actions: [ "createSearchIndexes" ] }
O role readWrite integrado fornece o privilégio createSearchIndexes . O exemplo a seguir concede a accountUser01 a função readWrite no reconhecimento de data center products :
db.grantRolesToUser( "accountUser01", [ { role: "readWrite", db: "products" } ] )
Saída
A saída do comando createSearchIndexes se assemelha ao seguinte:
{ ok: 1, indexesCreated: [ { id: "<index Id>", name: "<index name>" } ] }
Importante
O campo de resposta ok: 1 indica que o comando foi bem-sucedido. No entanto, pode haver um atraso entre o momento em que você recebe a resposta e o momento em que os índices criados estão prontos para uso.
Para ver o status dos seus índices de pesquisa, use o estágio de agregação $listSearchIndexes .
Exemplos
Criar um índice de pesquisa em Todos os Campos
O exemplo seguinte cria um índice de pesquisa denominado searchIndex01 na collection contacts :
db.runCommand( { createSearchIndexes: "contacts", indexes: [ { name: "searchIndex01", definition: { mappings: { dynamic: true } } } ] } )
A definição mappings: { dynamic: true } do índice especifica, o que significa que o índice contém todos os campos na collection que suportaram tipos de dados.
Crie um índice de pesquisa com um analisador de idiomas
Um analisador de linguagem introduz palavras vazias, que são palavras que não são significativas o suficiente para serem indexadas.
O exemplo seguinte cria um índice de pesquisa denominado frenchIndex01 na collection cars e especifica o analisador lucene.french no campo fr :
db.runCommand( { createSearchIndexes: "cars", indexes: [ { name: "frenchIndex01", definition: { mappings: { fields: { subject: { fields: { fr: { analyzer: "lucene.french", type: "string" } }, type: "document" } } } } } ] } )
Para saber mais sobre analisadores de idioma, consulte ref-language-analyzers.
Criar múltiplos índices de pesquisa
O seguinte comando cria dois índices de pesquisa na coleção products , searchIndex02 e searchIndex03 :
db.runCommand( { createSearchIndexes: "products", indexes: [ { name: "searchIndex02", definition: { mappings: { fields: { title: { type: "string", analyzer: "lucene.simple" } } } } }, { name: "searchIndex03", definition: { mappings: { dynamic: true } } } ] } )
searchIndex02 utiliza um analisador simples no title campo. O analisador simples divide o texto em termos pesquisáveis com base em caracteres não letras, como espaço em branco, pontuação ou dígitos.
searchIndex03 usa um mapeamento de campo dinâmico, o que significa que o índice contém todos os campos na coleção que suportaram tipos de dados.
Crie um índice de pesquisa vetorial
O exemplo seguinte cria um índice vetorial do Atlas Search denominado vectorSearchIndex01 na collection movies:
db.runCommand( { createSearchIndexes: "movies", indexes: [ { name: "vectorSearchIndex01", type: "vectorSearch", definition: { fields: [ { type: "vector", numDimensions: 1, path: "genre", similarity: "cosine" } ] } } ] } )
O índice vetorial do Atlas Search contém uma dimensão e indexa o campo genre.