Menu Docs
Página inicial do Docs
/
Atlas
/

Consultas e índices

O relacionamento entre queries de pesquisa e índices de pesquisa determina a eficiência e a eficácia com que você pode encontrar dados nas coleções do MongoDB usando o Atlas Search.

As queries do Atlas Search especificam os critérios para encontrar documentos em um banco de dados. As queries do Atlas Search assumem a forma de um pipeline de agregação que começa com o $search ou $searchMeta fase do pipeline. Você pode usar operadores, coletores e opções de pesquisa dentro das fases do pipeline para implementar funcionalidades de pesquisa complexas, como busca de texto completo, classificação baseada em relevância, pesquisa facetada, filtros e classificação.

Antes de executar uma query do Atlas Search, você deve criar um índice do Atlas Search nos campos que deseja pesquisar. Índices de pesquisa são estruturas de dados otimizadas para recuperar rapidamente documentos que atendem aos critérios da sua query. Ao definir um índice de pesquisa, você especifica quais campos devem ser indexados e como esses campos devem ser tokenizados.

Queries de pesquisa eficazes dependem de índices de pesquisa bem definidos. Os campos que você pretende pesquisar devem ser indexados, e a configuração do índice determina se sua pesquisa oferece suporte a ordenação, facetas, preenchimento automático e outras funcionalidades de pesquisa. Você pode iterar tanto no design da query quanto no design do índice para equilibrar a precisão da pesquisa com o desempenho.

Esta página descreve como planejar sua experiência de pesquisa do Atlas Search e definir um índice e uma query do Atlas Search para atender aos seus requisitos de pesquisa.

Ao planejar sua implementação do Atlas Search, comece definindo a experiência de pesquisa que você quer proporcionar:

  • Identifique claramente quais tipos de pesquisa seu aplicativo precisa realizar. Você está desenvolvendo um recurso de pesquisa para um blog que necessita de pesquisa de texto completo e autocompletar para títulos de artigos, ou um site de e-commerce que requer pesquisa facetada e filtro por categorias de produtos?

  • Determine como os usuários interagirão com seu aplicação. Priorize recursos que melhorarão a experiência do usuário, como tempos de resposta rápidos ou sugestões precisas de preenchimento automático.

Em seguida, considere as seguintes perguntas para ajudar a determinar a estrutura de seus índices de pesquisa e queries do Atlas Search com base nessas necessidades do usuário:

Antes de poder pesquisar seus dados usando o Atlas Search, você deve criar um ou mais índices de pesquisa para serem usados durante sua query do Atlas Search. Esta seção demonstra como aplicar suas preferências de query à sintaxe de configuração JSON de um índice do Atlas Search.

Para usar a sintaxe JSON nesta seção da sua definição de índice, substitua os espaços reservados por valores válidos e assegure-se de que sua definição completa de índice inclua as opções necessárias.

Para saber como adicionar seu índice do Atlas Search ao seu cluster do Atlas, consulte o Início Rápido do Atlas Search.

1

Se você souber quais campos deseja consultar na sua coleção, ative mapeamentos estáticos e especifique os campos na definição do índice de pesquisa do Atlas Search. Caso contrário, você pode ativar mapeamentos dinâmicos para indexar automaticamente todos os campos de tipos compatíveis.

Para saber mais, consulte Mapeamentos estáticos e dinâmicos.

Observação

Se a sua coleção contiver documentos que tenham 16 MB ou mais, o Atlas Search não conseguirá indexar seus dados. Esse problema também pode ocorrer quando operações de atualização em documentos grandes fazem com que o evento de fluxo de alterações exceda o limite de 16MB de BSON. Para evitar esse problema, considere as seguintes melhores práticas:

  • Estruture seus documentos para minimizar o tamanho de subdocumentos ou arrays.

  • Evite operações que atualizem ou substituam campos grandes, subdocumentos ou arrays.

Para aprender mais, veja Recomendações de Produção de Change Streams e Reduzir o Tamanho de Documentos Grandes.

1{
2 "mappings": {
3 "dynamic": true,
4 "fields": { // Optional, use this to configure individual fields
5 "<field-name>": {
6 "type": "<field-type>",
7 ...
8 },
9 ...
10 }
11 }
12}
1{
2 "mappings": {
3 "dynamic": false, // Optional, if omitted defaults to "false"
4 "fields": {
5 "<field-name>": {
6 "type": "<field-type>",
7 ...
8 },
9 ...
10 }
11 }
12}
2

Se você tiver requisitos especiais de idioma ou análise, poderá aplicar as seguintes opções à definição do índice:

Especifique quais analisadores internos aplicar aos campos de string que você está indexando nos campos analyzer, searchAnalyzer ou fields.<field-name>.analyzer.

1{
2 "analyzer": "<index-analyzer-name>", // top-level index analyzer, used if no analyzer is set in the field mappings
3 "searchAnalyzer": "<search-analyzer-name>", // query text analyzer, typically the same as the index analyzer
4 "mappings": {
5 "dynamic": <boolean>,
6 "fields":{
7 "<field-name>": [
8 {
9 "type": "string",
10 "analyzer": "<field-analyzer-name>" // field-specific index analyzer
11 }
12 ]
13 }
14 }
15}

Defina analisadores personalizados para seu índice do Atlas Search no campo analyzers.

1{
2 "analyzers": [
3 {
4 "name": "<custom-analyzer-name>",
5 "tokenizer": {
6 "type": "<tokenizer-type>"
7 }
8 },
9 ...
10 ]
11}

Defina sinônimos para termos que tenham significados iguais ou semelhantes no campo synonyms.

1{
2 "synonyms": [
3 {
4 "name": "<synonym-mapping-name>",
5 "source": {
6 "collection": "<source-collection-name>"
7 },
8 "analyzer": "<synonym-mapping-analyzer>"
9 }
10 ]
11}
3

Se você quiser otimizar o desempenho da sua query em um grande conjunto de dados, pode adicionar as seguintes opções à definição do seu índice para limitar a quantidade de dados que a query do Atlas Search precisa percorrer:

Use a opção numPartitions para configurar partições para seu índice. Quando você particiona seu índice, o Atlas Search distribui automaticamente os objetos do índice entre subíndices de forma otimizada.

1{
2 "numPartitions": <integer>,
3}

Use a opção storedSource para especificar campos no documento de origem que o Atlas Search deve armazenar.

1{
2 "storedSource": true | false | {
3 "include" | "exclude": [
4 "<field-name>",
5 ...
6 ]
7 }
8}

Depois de criar um índice do Atlas Search para todos os campos que você deseja pesquisar em sua coleção, você pode executar uma query do Atlas Search. Esta seção demonstra como aplicar seus objetivos para a experiência de pesquisa do seu aplicativo à sintaxe JSON de uma query do Atlas Search.

Para usar a sintaxe JSON nesta seção em seu pipeline de agregação de queries do Atlas Search, substitua os espaços reservados por valores válidos e certifique-se de que seu pipeline de query completo contenha os campos $search ou os campos $searchMeta necessários.

Para saber como executar uma query de pesquisa, consulte o Início Rápido do Atlas Search.

1

O primeiro estágio do pipeline de agregação de query do Atlas Search deve ser o estágio $search ou $searchMeta, dependendo se você está procurando documentos ou metadados:

Estágio do pipeline de agregação
Propósito

Retornar resultados da pesquisa de texto completo.

Retornar metadados sobre seus resultados de pesquisa.

2

Para definir seus critérios de pesquisa, você deve aplicar um ou mais operadores ou coletores ao seu $search ou $searchMeta fase do pipeline.

Os operadores do Atlas Search permitem localizar e recuperar dados relevantes do seu cluster do Atlas de acordo com conteúdo, formato ou tipo de dados. Para saber quais operadores aceitam pesquisas para cada tipo de campo, consulte a tabela na seção de referência de operadores. Você deve especificar um ou mais campos de pesquisa indexados no parâmetro caminho de query do operador:

1{
2 $search: {
3 "<operator-name>"|"<collector-name>": {
4 <operator-specification>|<collector-specification>
5 }
6 }
7}
[
{
_id: <result-document-id>,
...
},
{
_id: <result-document-id>,
...
},
...
]
1{
2 $searchMeta: {
3 "<operator-name>"|"<collector-name>": {
4 <operator-specification>|<collector-specification>
5 }
6 }
7}
[
{
count: {
total: <results-count>
}
}
]

Dica

Você pode combinar múltiplos operadores em uma única operação usando o operador composto. Você também pode usar a cláusula de filtro do operador composto para filtrar a saída da query que corresponda a uma determinada cláusula.

3

Se você quiser recuperar metadados da sua query do Atlas Search, pode aplicar uma das seguintes configurações para escolher entre o tipo de documento de resultados de metadados contagem ou faceta:

Para retornar a contagem total ou com limite inferior dos resultados da pesquisa, defina a opção de contagem no estágio de agregação.

O estágio $searchMeta retorna os resultados de metadados count, enquanto o estágio $search armazena os resultados de metadados na variável de agregação $$SEARCH_META e retorna somente os resultados da pesquisa. Para ver um exemplo de como recuperar os resultados de metadados count da variável $$SEARCH_META, consulte Contagem de resultados.

1{
2 "$search" | "$searchMeta": {
3 "<operator-name>": {
4 <operator-specifications>
5 },
6 "count": {
7 "type": "lowerBound" | "total",
8 "threshold": <number-of-documents> // Optional
9 }
10 }
11}

Para executar uma query de facetas que agrupa os resultados por valores ou intervalos e retorna a contagem de cada um desses grupos, use o coletor de facetas na sua fase de agregação.

A fase $searchMeta retorna facet resultados de metadados, enquanto a fase $search armazena os resultados de metadados na variável de agregação $$SEARCH_META e retorna apenas os resultados da pesquisa. Para um exemplo de como recuperar os resultados de metadados facet da variável $$SEARCH_META, consulte Resultados de faceta.

1{
2 "$search" | "$searchMeta": {
3 "facet": {
4 "facets": {
5 <facet-definitions>
6 }
7 }
8 }
9}
4

Você pode recuperar informações adicionais sobre os resultados da fase $search usando as seguintes opções:

Opção
Caso de uso

Exiba seus termos de pesquisa em seu contexto original como campos no resultado da consulta.

Recupere um detalhamento detalhado da pontuação para cada documento que a Pesquisa Atlas retorna.

Rastreie e forneça informações analíticas para seus termos de pesquisa de query.

Recupere análises sobre quais queries do Lucene foram executadas Atlas Search para satisfazer sua query e quanto tempo sua query gasta nos vários estágios de execução.

5

Você pode implementar uma funcionalidade especial de ordenação para seus resultados de $search com as seguintes opções:

Opção
Caso de uso

Modifique a pontuação de relevância dos documentos nos resultados para garantir que o Atlas Search retorne resultados relevantes.

Classifique seus resultados por número, string e campos de data ou por pontuação.

Defina um ponto de referência para parar ou iniciar seus resultados ordenados

6

Otimize o desempenho da query usando as seguintes opções de $search:

Opção
Caso de uso

Execute sua query do Atlas Search com mais eficiência apenas recuperando campos armazenados em mongot conforme especificado em sua definição de índice do Atlas Search para uma coleção.

Paralelize a procura entre segmentos em nós de pesquisa dedicados.

Para aprender a criar e executar um índice e uma query do Atlas Search, consulte o Guia de início rápido do Atlas Search.

Para saber mais sobre as opções de configuração de query do Atlas Search mencionadas neste tutorial, consulte as seguintes páginas de referência:

Para saber mais sobre as opções de configuração do índice do Atlas Search mencionadas neste tutorial, consulte as seguintes páginas de referência:

Voltar

Como usar as Facetas com Atlas Search