Estágios de pipeline
As queries do MongoDB Search assumem a forma de um estágio de pipeline de agregação. O MongoDB Search fornece os estágios $search e $searchMeta, ambos devem ser o primeiro estágio em qualquer pipeline de consulta, incluindo os sub-pipelines $lookup e $unionWith. Esses estágios podem ser usados em conjunto com outros estágios de pipeline de agregação em sua pipeline da query.
Com base no estágio do pipeline que você escolher, sua consulta retornará os resultados de uma pesquisa de texto completo ou metadados sobre os resultados da pesquisa:
Estágio do pipeline de agregação | Propósito |
|---|---|
Retornar resultados da pesquisa de texto completo. | |
Retornar metadados sobre seus resultados de pesquisa. |
operadores e coletores
A MongoDB Search também fornece query e collectors que você pode usar dentro dos $search $searchMeta estágios de pipeline de agregação . Os operadores de pesquisa do MongoDB permitem localizar e recuperar dados relevantes da coleção em seu cluster. O coletor retorna um documento representando os resultados dos metadados de pesquisa.
Você pode usar os operadores do MongoDB Search para fazer query em termos, frases, formas e pontos geográficos, valores numéricos, documentos semelhantes, termos sinônimos e muito mais.
Você também pode pesquisar utilizando expressões regex e asteriscos. O operador composto do MongoDB Search permite que você combine vários operadores dentro do seu estágio $search para realizar uma pesquisa complexa e filtrar dados com base no que deve, não deve ou deve estar presente nos documentos retornados pelo MongoDB Search. Você pode usar o operador composto para também corresponder ou filtrar documentos no próprio estágio $search. Executar $match após $search tem menos desempenho do que executar $search com o operador composto.
Para saber mais sobre operadores e coletores, consulte Operadores e coletores.
Processamento de Query
mongodemongotno mesmo nóQuando você executa uma query, o MongoDB Search usa a preferência de leitura configurada para identificar o nó no qual executar a query. A query primeiro vai para o processo do MongoDB, que é
mongodpara um cluster de conjunto de réplicas oumongospara um cluster fragmentado.Para um cluster de conjunto de réplicas, o processo do MongoDB roteia a query para
mongotno mesmo nó. Para clusters fragmentados, os dados do cluster são particionados emmongodinstâncias e cadamongotsabe sobre os dados nomongodno mesmo nó apenas. Portanto, você não pode executar queries no MongoDB Search que tenham como alvo um shard específico.mongosdireciona as queries para todos os fragmentos, fazendo estas dispersar e reunir queries. Se você usar zonas para distribuir uma coleção fragmentada em um subconjunto de fragmentos no cluster, o MongoDB Search roteará a consulta para a zona que contém os fragmentos da coleção que você está consultando e executará suas$searchqueries apenas nos fragmentos onde a coleção está localizada.O MongoDB Search executa a pesquisa e a pontuação e retorna os IDs dos documento e outros metadados da pesquisa dos resultados correspondentes para
mongod. Omongodentão realiza uma pesquisa completa do documento implicitamente para os resultados correspondentes e retorna os resultados ao cliente.mongodemongotem diferentes nósQuando você executa uma consulta, a consulta primeiro vai para o
mongodcom base na preferência de leitura configurada. O processomongodencaminha a query de pesquisa por meio de um balanceador de carga no mesmo nó, que distribui as solicitações entre todos os processosmongot.O processo
mongotdo MongoDB Search executa a pesquisa e a pontuação e retorna os IDs dos documento e os metadados dos resultados correspondentes paramongod. Omongodentão realiza uma pesquisa completa do documento para os resultados correspondentes e retorna os resultados ao cliente. Se você usar a opção$searchconcurrent em sua query, o MongoDB Search ativará o paralelismo intraquery. Para saber mais, consulte Parallelize Query Execution Across Segments.
Pontuação
O MongoDB Search associa uma pontuação baseada em relevância a cada documento no conjunto de resultados. A pontuação baseada em relevância permite que MongoDB Search devolva documentos na ordem da pontuação mais alta para a mais baixa. O MongoDB Search pontua os documentos mais alto se o termo aparecer com frequência em um documento e mais baixo se o termo aparecer em muitos documentos da collection. O MongoDB Search também oferece suporte à personalização da pontuação padrão baseada em relevância por meio de aumento, decadência ou outras opções de modificação. Para saber mais sobre como personalizar as pontuações resultantes, consulte Classificar os documentos nos resultados.
Dica
Aprenda assistindo
Assista a este vídeo para ter uma visão geral de pesquisa e rastreamento de suas queries com o MongoDB Search. Neste vídeo, você pode aprender mais sobre operadores do MongoDB Search e como os documentos de o MongoDB Search pontua documentos nos resultados.
Duração: 15 Minutos
Clientes aceitos
Você pode criar e executar queries no MongoDB Search usando os seguintes clientes:
Solução de problemas de queries
Conjunto de resultados vazio
mongot não retorna erros, mas retorna um conjunto de resultados vazio se sua query $search :
Referencia um índice que não existe. Se você não especificar um índice por nome na query, o MongoDB Search assumirá como padrão um índice denominado
default. Se você não tiver um índice chamadodefaultou se o índice que você especificou não existir, o MongoDB Search não retornará um erro e retornará um conjunto de resultados vazio. Você pode especificar um índice válido por seu nome utilizando a opçãoindex.Especifica um campo não indexado. Se você executar uma query em um campo que não esteja indexado, o MongoDB Search não retornará um erro e retornará um conjunto de resultados vazio. Você deve especificar somente campos indexados como valores para o parâmetro
path. Você pode habilitar o mapeamento dinâmico em sua definição de índice para a coleção para garantir que todos os campos indexáveis dinamicamente na coleção sejam indexados automaticamente. Para saber mais, consulte mapeamento dinâmico.Usa o operador
textem um caminho do campo que não é indexado como um tipostring. Se um campo for indexado como um tipo de campo do MongoDB Search diferente destring, comostringFacetouautocomplete, o MongoDB Search não retornará um erro e retornará um conjunto de resultados vazio. Você deve indexar os campos com valores de tipo de dadosstringBSON como tipo de string para consultar os campos usando o operador de texto.
PlanExecutor Erro
mongot retorna um erro PlanExecutor se sua query $search :
Especifica um campo que é indexado como um tipo de dados incorreto. Nesse caso, se você executar uma query, o MongoDB Search retornará uma mensagem de erro identificando o campo que foi indexado incorretamente e seu tipo de dados correto. Por exemplo:
PlanExecutor error during aggregation :: caused by :: Cannot facet on field "genres" because it was not indexed as a "stringFacet" field. Por exemplo, para executar queries
facet(MongoDB Search Operator) nos camposstring,numberoudate, crie um índice para os campos usando o tipo de campo correspondente do MongoDB Search, comostringFacet,numberedaterespectivamente. Para saber mais, consulte Tipos de dados com e sem suporte.