Considere operadores de query e complexidade da consulta
O nível de complexidade das queries do Atlas Search e o tipo de operadores usados podem afetar o desempenho do banco de dados.
Queries altamente complexas, como queries com várias cláusulas que usam o operador composto, ou queries que usam a regex (expressão regular) ou o operador curinga, consomem muitos recursos.
Queries compostas
Se sua query incluir várias instruções compostas aninhadas, certifique-se de que não sejam redundantes. Se as cláusulas forem adicionadas programaticamente, considere implementar a lógica na aplicação para evitar a inclusão de cláusulas redundantes nas query. Cada cálculo de pontuação por campo que o mongot
executa, como para as cláusulas must
e should
, aumenta o tempo de execução.
Pesquisa facetada
Você pode usar o coletor facet
(Operador do Atlas Search) para extrair metadados e evitar a execução de várias consultas para resultados de pesquisa e metadados. Para ver um exemplo, consulte o exemplo Metadados e resultados de pesquisa.
Classificação dos resultados
As queries do Atlas Search são classificadas por pontuação. As queries que retornam um grande número de resultados são mais computacionalmente intensivas porque precisam acompanhar todas as pontuações do conjunto de resultados.
Use $search
em vez de $text
ou $regex
Para aplicativos que dependem muito das queries do MongoDB $text
e $regex
, use as recomendações a seguir para determinar se deve refatorar seus aplicativos ou migrá-los para o Atlas Search $search
. A fase do pipeline de agregação $search
fornece recursos que não estão disponíveis por meio dos operadores do MongoDB ou estão disponíveis por meio dos operadores do MongoDB, mas não têm o mesmo desempenho de $search
do Atlas Search.
A tabela a seguir mostra como o MongoDB $regex
, $text
e o Atlas Search $search
atendem aos requisitos do seu aplicativo.
Se seu aplicativo exigir... | Use... | Porque... |
---|---|---|
Datastore para respeitar write concerns | ||
cluster otimizado para desempenho de gravação | Os índices de pesquisa do Atlas não degradam o desempenho de gravação do cluster. | |
Pesquisando em grandes sets de data | O Atlas Search usa um índice invertido, que permite a rápida recuperação de documentos em escalas muito grandes. | |
Consciência do idioma | O Atlas Search oferece suporte a muitos analisadores de idiomas que podem tokenizar (criar termos pesquisáveis) idiomas, remover palavras paradas e interpretar diacríticos para melhorar a relevância da pesquisa. | |
Pesquisar texto sem distinção entre letra maiúscula e minúscula | ||
Realçando o texto do resultado | O destacamento do Atlas Search permite contextualizar os documentos nos resultados, o que é essencial para queries de linguagem natural. | |
Queries de pesquisa com reconhecimento geoespacial |
| |
Sistema local ou no local | O Atlas Search não está disponível para implementação local... O Atlas Search só está disponível para dados no Atlas cluster. | |
Conclusão automática de queries de pesquisa | Para preenchimento automático de caracteres (nGrams), o Atlas Search inclui Para autocomplete de palavras (wordGrams), Atlas Search inclui o filtro de token shingle, que suporta autocomplete baseado em palavras, concatenando palavras adjacentes para criar um único token. | |
Correspondência difusa na entrada de texto | Os operadores de texto e preenchimento automático do Atlas Search oferecem suporte | |
Filtragem baseada em várias strings | O composto do Atlas Search oferece suporte à filtragem com base em várias strings. | |
Pesquisa classificada por pontuação de relevância | A Atlas Search utiliza o algoritmo BM25 para determinar a pontuação de relevância da pesquisa de documentos. Ele suporta configuração avançada por meio de expressões | |
Índices parciais | O Atlas Search suporta indexação parcial utilizando uma Visualização com uma expressão | |
Partida parcial | Os operadores curinga e de autocompletar do Atlas Search suportam queries de correspondência parcial. | |
Índice composto único em arrays | Os índices de termos do Atlas Search são interseccionados em um único índice do Atlas Search e eliminam a necessidade de índices compostos para filtragem em arrays. | |
Pesquisa de sinônimos | O Atlas Search suporta sinônimos definidos em uma coleção separada, que você pode referenciar em seu índice de pesquisa para uso. Para saber mais, consulte o tutorial Como usar sinônimos com o Atlas Search. | |
Preenchimento para contagens | O Atlas Search fornece contagens rápidas de documentos com base em critérios de texto e também suporta pesquisa facetada de números e datas. Para mais informações, consulte How to Use Facets with Atlas Search. | |
Extract metadata | O coletor do Atlas Search | |
Analisadores personalizados | O Atlas Search oferece suporte a analisadores personalizados para atender aos seus requisitos de indexação específicos. Por exemplo, você pode indexar e pesquisar endereços de e-mail e HTTP ou URL HTTPSs utilizando analisadores personalizados. | |
Pesquisando frases ou múltiplas palavras | O operador de Atlas Search oferece suporte à pesquisa de uma sequência de termos. | |
Pesquisar com expressão regular | O Atlas Search oferece melhor desempenho quando você usa o operador de preenchimento automático do Atlas Search. |
Dica
Atualizar queries $text com o Atlas Search para melhorar o desempenho da pesquisa - descreve como você pode substituir a fase do pipeline de agregação
$text
em sua query por$search
para melhorar a flexibilidade e o desempenho dessas queries.Usar o Atlas Search para queries regex de texto completo - descreve como você pode substituir correspondências regex
$search
para melhorar o desempenho de queries de texto.
Use $limit
antes de $facet
Usar uma fase do pipeline de agregação $limit
após uma fase do pipeline de agregação $facet
pode afetar negativamente o desempenho da query. Para evitar gargalos de desempenho, use $limit
antes de $facet
.
Exemplo
{ { "$search": {...} }, { "$limit": 20 }, { "$facet": { "results": [], "totalCount": $$SEARCH_META } } }
Para demonstração, veja os exemplos a seguir:
Minimizar estágios adicionais de agregação MQL
Tente encapsular toda a lógica de pesquisa dentro do próprio estágio $search
e minimize o uso de estágios de bloqueio adicionais, como $group
, $count
, $match
, ou $sort
. Isso otimiza o uso do índice do Atlas Search e reduz a necessidade de operações adicionais de banco de dados em mongod
.
Use compound.filter
em vez de $match
Para queries que exigem várias operações de filtro, use o operador compound
Operator com cláusulas filter
. Se for necessário usar o estágio $match
em seu pipeline de agregação, pense em usar a opção storedSource para armazenar somente os campos de que a condição $match
precisa. Em seguida, você pode usar a opção $search
returnStoredSource para recuperar campos armazenados e evitar a pesquisa de documento completo mongod
.
Use facet
em vez de $group
Se você usar $group
para obter contagens básicas para agregações de campo, poderá usar facet
(Operador de Atlas Search) dentro do estágio $search
. Se você precisar apenas de resultados de metadados, poderá usar facet
(Operador de Atlas Search) dentro do estágio $searchMeta
.
Use count
em vez de $count
Caso você use $count
para obter uma contagem do número de documentos, recomendamos que implemente count no estágio $search
ou $searchMeta
.
Use sort
near
ou returnStoredSource
em vez de $sort
Para classificar campos numéricos, de data, string, booleanos, UUID e objectID, use a opção
sort
com o estágio$search
. Para obter mais informações, consulte a página Classificar resultados do Atlas Search.Para classificar campos geográficos, use o operador near.
Para classificar outros campos, use os campos
$sort
e returnStoredSource.
Limitar o uso de $skip
e $limit
após $search
O uso de $skip
e $limit
para recuperar resultados não sequenciais pode ser lento se os resultados de sua query forem grandes. Para um desempenho ideal, use as opções $search
searchAfter
ou searchBefore
para paginar os resultados. Para saber mais, consulte Paginar os resultados.
Para retornar resultados não sequenciais, como pular da página 2 para a página 5, você pode usar os seguintes estágios do pipeline:
$search
searchAfter
o último resultado na Página 2$skip
documentos nas Páginas 3 e 4$limit
resultados para a página 5
Aqui, sua consulta é otimizada para ignorar apenas 2 páginas de resultados, em vez de ignorar 4 páginas se você não tiver usado searchAfter
. Para uma demonstração disso, consulte Paginar os resultados.
Monitorar desempenho
Você pode monitorar o cluster do Atlas e exibir Atlas Charts com estatísticas de desempenho na aba Atlas Metrics . Essas métricas podem ajudá-lo a ver como a query de pesquisa do Atlas Search e a construção de índices afetam o desempenho do seu cluster. Para saber mais, consulte Revisar métricas do Atlas Search.
O Atlas pode acionar alguns alertas do Atlas quando:
O Atlas Search faz query de seus clusters, o que pode afetar as métricas de desempenho do Atlas, como as métricas de direcionamento de query.
Os cursores de fluxos de alterações que o processo do Atlas Search (
mongot
) usa para manter os índices do Atlas Search atualizados podem contribuir para a taxa de direcionamento de query e acionar alertas de direcionamento de query se a taxa for alta.O Atlas Search replica dados do MongoDB, o que contribui para as métricas medidas no Atlas, como o número de operações getmore.
Observação
Se os recursos do seu cluster estiverem sobrecarregados ou próximos dos limites de desempenho aceitável, considere a possibilidade de fazer upgrade para uma camada do cluster maior antes de implementar a funcionalidade do Atlas Search.
Continuar aprendendo
Acompanhe este vídeo para entender, iterar e melhorar seus resultados do Atlas Search usando explain e detalhes de pontuação $search.
Duração: 5 minutos