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.
Planeje sua experiência 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:
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 dentro de suas coleções que os usuários provavelmente pesquisarão para que você saiba quais campos indexar. Cada query do MongoDB Search pesquisa um único índice do MongoDB Search, que contém termos extraídos de um ou mais campos especificados em uma collection. Ao planejar suas queries do MongoDB Search, decida se indexar apenas os campos de chave ou todos os campo da collection especificada, ativando o mapeamento estático ou dinâmico. Você pode executar query em vários campos especificando o caminho da query como uma 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 procurando para informar quais operadores usar em suas queries do MongoDB 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.
Para correspondências parciais, como queries de pesquisa conforme o tipo, use operadores como autocomplete, regex ou wildcard para implementar a funcionalidade de pesquisa conforme o tipo ou faça a correspondência de termos usando expressões regulares.
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 a análise de texto do MongoDB Search FERRAMENTAS:
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 de pontuação para modificar a pontuação de relevância dos documentos e afetar a ordem em que os usuários visualizam os resultados. As queries do MongoDB Search associam uma pontuação baseada em relevância a cada documento no conjunto de resultados e retorna 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
facet
(Operador de Atlas Search) para permitir que os usuários filtrem os resultados por categorias ou outras dimensões. Isso pode melhorar significativamente a relevância dos resultados da pesquisa, oferecendo aos usuários uma experiência de pesquisa mais guiada.
O desempenho da query do MongoDB Search é afetado pela configuração do índice e pela complexidade das suas queries. Concentre-se na indexação de campos que são críticos para a funcionalidade de pesquisa do seu aplicativo e busque um equilíbrio lógico entre complexidade e velocidade da query.
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 obter mais recomendações sobre como otimizar o desempenho da query, consulte Desempenho da query do MongoDB Search.
Defina seu índice
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.
Escolha quais campos indexar.
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 }
(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 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 }
(Opcional) Adicione opções para otimizar o desempenho da query.
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 }
Defina sua query
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.
Escolha o estágio inicial do pipeline da MongoDB Search.
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. |
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 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> } } ]
(Opcional) Aplique opções ou coletores para retornar metadados.
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 }
(Opcional) Adicione opções de pesquisa ao seu estágio $search para recuperar informações adicionais sobre sua query do MongoDB 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 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. |
(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 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 |
(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 MongoDB Search com mais eficiência apenas recuperando campos armazenados em | |
Paralelize a procura entre segmentos em nós de pesquisa dedicados. |
Saiba mais
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: