EstĂĄgios de pipeline
As queries do MongoDB Search assumem a forma de um estågio de pipeline de agregação. O MongoDB Search oferece os estågios $search e $searchMeta, ambos devem ser o primeiro estågio em qualquer pipeline de query, incluindo os subpipelines $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 query, a query primeiro vai para com
mongodbase na preferĂȘncia de leitura. Por padrĂŁo, 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. Como alternativa, se vocĂȘ definir o parĂąmetrosearchNodePreferencepara o estĂĄgio$search, o MongoDB pesquisa executarĂĄ sua query no mesmo nĂł de pesquisa todas as vezes.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
Veja: 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 dados BSONstringcomo tipo de string para fazer query dos 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.