Menu Docs
Página inicial do Docs
/
Atlas
/

Consultas e índices

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

As queries de pesquisa do MongoDB especificam os critérios para localizar documentos em um banco de dados. As queries do MongoDB Search assumem a forma de umpipeline de agregação que começa com o estágio de pipeline$search ou $searchMeta. Você pode usar operadores, coletores e opções de pesquisa dentro dos estágios do pipeline para implementar funcionalidades de pesquisa complexas, como pesquisa de texto completo, classificação baseada em relevância, pesquisa facetada, filtragem e classificação.

Antes de executar uma query do MongoDB Search, você deve criar um índice do MongoDB Search nos campos que deseja pesquisar. Os índices de pesquisa são estruturas de dados otimizadas para recuperar rapidamente documentos que atendam aos critérios de pesquisa da sua query. Ao definir um índice de pesquisa, você especifica quais campos indexar 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 no MongoDB Search e definir um índice e uma query para atender aos seus requisitos de pesquisa.

Ao planejar sua implementação do MongoDB Search, comece definindo a experiência de pesquisa que você deseja oferecer:

  • 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 e queries do MongoDB Search com base nessas necessidades do usuário:

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

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 MongoDB Search ao seu Atlas cluster, consulte o Início Rápido do MongoDB Search.

1

Se você souber quais campos deseja consultar em sua coleção, habilite mapeamentos estáticos e especifique os campos em sua definição de índice do MongoDB Search. Caso contrário, você pode habilitar mapeamentos dinâmicos para indexar automaticamente todos os campos dos tipos suportados.

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

Observação

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

  • 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 MongoDB 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 quiser otimizar o desempenho da query em um grande conjunto de dados, você pode adicionar as seguintes opções à sua definição de índice para limitar a quantidade de dados que sua query do MongoDB Search deve atravessar:

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

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

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

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

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

Para usar a sintaxe JSON nesta seção do pipeline de agregação de query do MongoDB Search, substitua os espaços reservados por valores válidos e verifique se o pipeline de consulta completo contém os campos $search ou $searchMetanecessários.

Para saber como executar uma query de pesquisa, consulte o Início rápido da pesquisa do MongoDB.

1

O primeiro estágio do pipeline de agregação de query do MongoDB 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 MongoDB Search permitem localizar e recuperar dados relevantes do seu cluster Atlas de acordo com o conteúdo, o formato ou o tipo de dados. Para saber quais operadores suportam pesquisas para cada tipo de campo, consulte a tabela na seção de referência dos operadores. Você deve especificar um ou mais campos de pesquisa indexados no parâmetro de caminho da 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 quiser recuperar metadados de sua consulta do MongoDB Search, você poderá aplicar uma das seguintes configurações para escolher entre a contagem ou facet (Operador do Atlas Search) tipo de documento de resultados de metadados:

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 faceta, que agrupa resultados por valores ou intervalos e retorna a contagem para cada um desses grupos, use o coletor facet (Operador de Atlas Search) em seu estágio 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 MongoDB 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 MongoDB 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 MongoDB 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 MongoDB Search com mais eficiência apenas recuperando campos armazenados em mongot conforme especificado em sua definição de índice do MongoDB Search para uma coleção.

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

Para saber como criar e executar um índice do MongoDB Search e uma query do MongoDB Search, consulte o Início rápido do MongoDB Search.

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

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

Voltar

Facetas