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.
Planeje sua experiência 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:
Considere se os usuários do aplicação desejam retornar o conteúdo dos documentos ou metadados sobre seus documentos:
Se os usuários quiserem o conteúdo do documento, use a fase de agregação
$search
para retornar documentos que atendam aos critérios de pesquisa.Se os usuários quiserem metadados sobre os resultados das pesquisas, use a fase
$searchMeta
para retornar contagens personalizáveis de documentos e facetas correspondentes.
Identifique os campos específicos nas suas coleções que os usuários provavelmente pesquisarão para que você saiba quais campos indexar. Cada query do Atlas Search pesquisa um único índice do Atlas Search, que contém termos extraídos de um ou mais campos especificados dentro de uma coleção. Ao planejar suas queries do Atlas Search, decida se deseja indexar apenas os campos-chave ou todos os campos na sua coleção especificada ativando o mapeamento estático ou dinâmico. Você pode consultar em vários campos especificando o caminho da query como um array de campos ou usando o operador queryString.
Os termos de pesquisa comuns dos seus usuários podem ser correspondências exatas, semelhantes ou parciais para os dados no seu Atlas cluster. Por exemplo, os usuários de um aplicação de análise de filmes podem querer filtrar filmes de um ano exato ou ver recomendações de filmes semelhantes ao seu filme favorito.
Determine o tipo de correspondências que seus usuários estão buscando para decidir quais operadores usar em suas queries do Atlas Search:
Para correspondências exatas, use operadores como equals ou in para encontrar documentos que contenham termos idênticos ao valor
query
especificado. Você também pode usar o operador text para corresponder a documentos que contêmany
ouall
das strings no valorquery
.Para correspondências semelhantes, use operadores como near, moreLikeThis ou phrase para encontrar documentos que contenham valores numéricos, documentos ou ordenações de strings que sejam semelhantes aos termos de pesquisa especificados. Você também pode usar o operador range para encontrar documentos que contenham um valor dentro de um intervalo especificado de valores.
For partial matches, such as search-as-you-type queries, use operators like
autocomplete
Operator, regex, or wildcard to implement search-as-you-type functionality or match terms using regular expressions.Use o operador composto para combinar múltiplos comportamentos de correspondência em uma única query.
Para aplicativos que exigem normalização de texto, suporte a vários idiomas, derivação ou mais, aproveite as ferramentas de análise de texto do Atlas Search:
Escolha um analisador integrado na definição do seu índice para corresponder ao idioma e à natureza dos seus dados de texto. Os analisadores dividem o texto em termos ou tokens e podem ajustá-lo para remover pontuação e letras maiúsculas, converter palavras para sua forma raiz e muito mais.
Configure analisadores personalizados se seu aplicação tiver requisitos específicos, como lidar com termos específicos do domínio ou analisar texto formatado, como endereços de e-mail ou IDs separados por traços. Analisadores personalizados permitem filtrar texto por caractere, definir o número de caracteres a serem incluídos em cada bloco de token ou ativar derivação ou supressão.
Defina sinônimos para melhorar a precisão da pesquisa de termos com significados iguais ou semelhantes.
Você pode ajustar a apresentação dos resultados da pesquisa com base nas demandas de filtro, ordenação ou relevância dos seus usuários:
Use a opção de query score para modificar a pontuação de relevância dos documentos e afetar a ordem em que os usuários veem os resultados. As queries do Atlas Search associam uma pontuação baseada em relevância a cada documento no conjunto de resultados e retornam os documentos em ordem da pontuação mais alta para a mais baixa.
Defina a opção de query sort para campos indexados que os usuários provavelmente ordenarão em ordem crescente ou decrescente, como datas ou campos numéricos.
Use as opções de query searchBefore ou searchAfter para exibir os resultados como um conjunto de páginas pelas quais os usuários podem navegar sequencialmente ou avançar.
Use o coletor de faceta para permitir que os usuários filtrem os resultados por categorias ou outras dimensões. Isso pode melhorar significativamente a relevância dos resultados de pesquisa, proporcionando aos usuários uma experiência de pesquisa mais orientada.
O desempenho das queries do Atlas Search é afetado pela configuração do seu índice e pela complexidade das queries. Concentre-se nos campos de indexação que são essenciais para a funcionalidade de pesquisa do seu aplicativo e busque um equilíbrio lógico entre a complexidade da query e a velocidade.
Para otimizar ainda mais o desempenho, considere as seguintes opções de query:
Use a opção de query concorrente para definir o número de solicitações de pesquisa concorrentes que são executadas ao avaliar uma query. Essa opção é útil para queries complexas ou grandes conjuntos de dados.
Use a opção de query returnStoredSource em conjunto com a opção de índice storedSource para determinar se os documentos de origem originais, armazenados como parte do índice, devem ser retornados junto com os resultados da pesquisa. Essa opção é útil para aplicativos onde você exibe resumos ou destaques com base nos critérios de pesquisa.
Use a opção de índice numPartitions para particionar seu índice, distribuindo objetos de índice entre subíndices de maneira ideal.
Para mais recomendações sobre como otimizar o desempenho da query, consulte Desempenho da query do Atlas Search.
Defina seu índice
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.
Escolha quais campos indexar.
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 }
(Opcional) Aplique regras de análise de texto.
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 }
(Opcional) Adicione opções para otimizar o desempenho da query.
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 }
Defina sua query
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.
Escolha a fase inicial do pipeline do Atlas Search.
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. |
Aplique operadores para definir seus critérios de pesquisa.
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> } } ]
(Opcional) Aplique opções ou coletores para retornar metadados.
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 }
(Opcional) Adicione opções de pesquisa à fase $search para recuperar informações adicionais sobre sua query do Atlas Search.
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. |
(Opcional) Adicione opções de $search para definir a classificação dos resultados.
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 |
(Opcional) Adicione opções de $search para otimizar o desempenho da consulta.
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 | |
Paralelize a procura entre segmentos em nós de pesquisa dedicados. |
Saiba mais
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: