Uma estrutura de decisão para MongoDB $regex e $text versus Atlas Search
Avalie esse Artigo
Você está usando $text ou $regex para fornecer funcionalidade semelhante a pesquisa em seu aplicativo? Em caso afirmativo, o operador $search do MongoDB Atlas oferece várias vantagens para $text e $regex, como resultados de pesquisa mais rápidos e eficientes, queries de linguagem natural, classificação de relevância integrada e melhor escalabilidade. Começar é muito fácil, pois o $search está incorporado como um estágio de agregação diretamente no MongoDB Atlas, fornecendo a você recursos completos de Full Text Search em todos os seus dados operacionais.
Embora os operadores $text e $regex sejam suas únicas opções para implantação local ou local e forneçam correspondência básica de texto e pesquisa de padrões, os usuários do Atlas Search descobrirão que o $search fornece uma solução mais abrangente e eficiente para implementar a funcionalidade de pesquisa avançada em seus aplicativos. Recursos como correspondência difusa, correspondência parcial de palavras, pesquisa de sinônimos, More Like This, facetagem e a capacidade de pesquisar em grandes conjuntos de dados só estão disponíveis com o Atlas Search.
Migrar de $text ou $regex para $search não significa necessariamente reescrever toda a sua base de código. Pode ser um processo gradual em que você começa a incorporar o operador $search em novos recursos ou a refatorar a funcionalidade de pesquisa existente em etapas.
A tabela abaixo explora os benefícios de utilizar o Atlas Search em comparação com expressões regulares para pesquisar dados. Acompanhe e experimente o poder do Atlas Search em primeira mão.
Observação: $text e $regex não tiveram grandes atualizações desde 2015, e todos os aprimoramentos futuros na pesquisa baseada em relevância serão fornecidos por meio do Atlas Search.
Requisitos do aplicativo | $regex | $text | $search | Raciocínio |
---|---|---|---|---|
O datastore deve respeitar as preocupações de gravação | ✅ | 🚫 | 🚫 | Se você tiver um armazenamento de dados que deve respeitar as preocupações de gravação para casos de uso, como transações com leituras pesadas após gravações, $regex é uma escolha melhor. Para casos de uso de pesquisa, as leituras após as gravações devem ser raras. |
Conscientização de idiomas (espanital, chinês, inglês, etc.) | 🚫 | 🚫 | ✅ | Atlas Search suporta nativamente mais 40 idiomas para que você possa tokenizar melhor os 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 | 🚫 | 🚫 | ✅ | A pesquisa de texto sem distinção entre maiúsculas e minúsculas usando $regex é uma das maiores fontes de problemas entre nossa base de clientes, e $search oferece muito mais recursos do que $text. |
Realçando o texto do resultado | 🚫 | 🚫 | ✅ | A capacidade de destacar fragmentos de texto em documentos de resultados ajuda os usuários finais a contextualizar por que alguns documentos são retornados em comparação com outros. É essencial para experiências do usuário alimentadas por consultas em linguagem natural. Embora os desenvolvedores possam implementar uma versão rudimentar de destaque com as outras opções, o estágio de agregação $search fornece uma API fácil de consumir e um mecanismo central que lida com tópicos como tokenização e compensações. |
Queries de pesquisa com reconhecimento geoespacial | ✅ | 🚫 | ✅ | Tanto $regex quanto $search possuem capacidades geoespaciais. As diferenças entre os dois estão nas diferenças entre como $regex e $search tratam os parâmetros geoespaciais. Por exemplo, Lucene desenha uma linha reta de uma coordenada de query para outra, enquanto as linhas MongoDB são esféricas. As queries esféricas são melhores para voos, enquanto as queries de mapas planos podem ser melhores para distâncias curtas. |
Implantação local ou no local | ✅ | ✅ | 🚫 | O Atlas Search não está disponível localmente ou para implantação local. O destino de implantação único permite que nossa equipe se mova rapidamente e inove em um ritmo mais rápido do que se segmentássemos muitos modelos de implantação. Por essa razão, $regex e $text são as únicas opções para pessoas que não têm acesso ao Atlas. |
Preenchimento automático de caracteres (nGrams) | 🚫 | 🚫 | ✅ | Os usuários finais que digitam em uma caixa de pesquisa se aprenderam a lidar com uma experiência em que suas consultas de pesquisa são concluídas para eles.O Atlas Search ofereceedgeGrams para preenchimento automático da esquerda para a direita, nGrams para preenchimento automático com idiomas que não têm espaço em branco e rightEdgeGram para idiomas que são escritos e lidos da direita para a esquerda. |
Preenchimento automático de palavras (wordGrams) | 🚫 | 🚫 | ✅ | Se você tiver um campo com mais de duas palavras e quiser oferecer o preenchimento automático baseado em palavras como um recurso do seu aplicativo, um filtro de token shingle com analisadores personalizados pode ser melhor para você. Os analisadores personalizados oferecem aos desenvolvedores uma maneira flexível de indexar e modificar a forma como seus dados são armazenados. |
Correspondência difusa na entrada de texto | 🚫 | 🚫 | ✅ | Se você quiser filtrar a entrada gerada pelo usuário, o fuzzy do Atlas Search oferece flexibilidade. Problemas como palavras com erros ortográficos são tratados melhor por $search. |
Filtragem baseada em mais de 10 strings | 🚫 | 🚫 | ✅ | É difícil filtrar mais de 10 strings no MongoDB devido às limitações dos índices de texto compostos. O filtro composto é novamente o caminho certo a seguir aqui. |
Pesquisa classificada por pontuação de relevância | 🚫 | 🚫 | ✅ | Atlas Search usa o algoritmo de última geração BM25 para determinar a pontuação de relevância da pesquisa de documentos e permite configuração avançada por meio deexpressões de impulso, como multiplicação e decaimento gaussiano, bem como analisadores, operadores de pesquisa e sinônimos. |
cluster precisa ser otimizado para desempenho de gravação | 🚫 | 🚫 | ✅ | Ao adicionar um índice de banco de dados no MongoDB, você deve considerar as compensações para o desempenho de gravação nos casos em que o desempenho de gravação do banco de dados seja importante. Os índices de pesquisa não degradam o desempenho de gravação do cluster. |
Pesquisando em grandes sets de data | 🚫 | 🚫 | ✅ | Se você tiver muitos documentos, suas queries ficarão linearmente mais lentas. No Atlas Search, o índice invertido permite a rápida recuperação de documentos em escalas muito grandes. |
Índices parciais para correspondência de texto simples | ✅ | 🚫 | 🚫 | O Atlas Search ainda não oferece suporte à indexação parcial. Hoje, $regex leva o bolo. |
Índice composto único em arrays | 🚫 | 🚫 | ✅ | O Atlas Search foi parcialmente projetado para este caso de uso, onde os índices de termos são intersectados em um único índice de pesquisa, para eliminar a necessidade de índices compostos para filtragem em arrays. |
Pesquisa de sinônimos | 🚫 | 🚫 | ✅ | A única opção para a pesquisa de sinônimos robustos é o Atlas Search, em que os sinônimos são definidos em uma coleção, e essa coleção é referenciada em seu índice de pesquisa. |
Facetamento rápido para contagens | 🚫 | 🚫 | ✅ | Se você estiver procurando por navegaçãofacetada ou contagens rápidas de documentos com base em critérios de texto, deixe o Atlas Search fazer o agrupamento. Em nossos testes internos, é 100x mais rápido e também suporta buckets de números e datas. |
Analisadores personalizados (palavras vazias, token de e-mail/URL etc.) | 🚫 | 🚫 | ✅ | Com o Atlas Search, você pode definir um analisador personalizado para atender às suas necessidades específicas de indexação. |
Correspondência parcial | 🚫 | 🚫 | ✅ | O MongoDB tem várias opções de correspondência parcial, desde o operador curinga até o preenchimento automático, o que pode ser útil para alguns casos de uso de correspondência parcial. |
Consultas de frase | 🚫 | 🚫 | ✅ | As queries de frase são suportadas nativamente no Atlas Search por meio do operador de frase. |
Observação: a marca de seleção verde às vezes não aparece nos casos em que o estágio de agregação correspondente pode ser capaz de satisfazer um requisito do aplicativo e, nesses casos, é porque um dos outros estágios (ou seja, $search) é muito superior para um determinado caso de uso.
Se abrirmos seu interesse em saber mais sobre o Atlas Search, temos alguns recursos para você começar:
A documentação do Atlas Search fornece materiais de referência e tutoriais, enquanto o MongoDB Developer Hub fornece aplicativos e código de exemplo. Você pode ativar o Atlas Search sem nenhum custo na camada gratuita do Atlas e acompanhar os tutoriais usando nossos conjuntos de dados de exemplo ou carregar seus próprios dados para experimentação em sua própria sandbox.