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.
MongoDB Search queries specify the criteria for finding documents within a database. MongoDB Search queries take the form of an aggregation pipeline that begins with the $search or $searchMeta pipeline stage. You can use operators, collectors, and search options inside the pipeline stages to implement complex search functionality like full-text search, relevance-based ranking, faceted search, filtering, and sorting.
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:
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ção JSON de um índice de MongoDB Search.
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 cluster, consulte o Início Rápido do MongoDB Search.
Escolha quais campos indexar.
Se você souber quais campos deseja consultar na sua coleção, ative mapeamentos estáticos e especifique os campos na definição do índice do MongoDB Search. Caso contrário, você pode ativar mapeamentos dinâmicos para indexar automaticamente todos os campos com base em um conjunto padrão ou configurado de tipos de campo (typeSet).
Para aprender mais, veja Mapeamentos dinâmicos e estáticos.
Observação
Para obter mais detalhes sobre o comportamento e as limitações do índice de pesquisa do MongoDB Search, consulte Considerações para índices de pesquisa do MongoDB Search.
1 { 2 "mappings": { 3 "dynamic": true 4 } 5 }
1 { 2 "mappings": { 3 "dynamic": true|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 linguagem, análise ou pontuação para os dados do string, aplique as seguintes opções à definição do índice:
Para especificar como o MongoDB Search fragmenta seus campos de texto em tokens, você pode definir analisadores integrados em seu índice do MongoDB Search.
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|autocomplete", 10 "analyzer": "<field-analyzer-name>" // field-specific index analyzer 11 "multi": { 12 "<multi-option-name>": { 13 "type": "string|autocomplete", 14 "analyzer": "<alternate-analyzer-name>" // multi-option specific index analyzer 15 } 16 } 17 } 18 ] 19 } 20 } 21 }
Para personalizar como o MongoDB Search divide o texto em tokens, você pode definir um analisador personalizado no campo analyzers do seu índice do MongoDB Search.
1 { 2 "analyzers": [ 3 { 4 "name": "<custom-analyzer-name>", 5 "tokenizer": { 6 "type": "<tokenizer-type>" 7 } 8 }, 9 ... 10 ] 11 }
Para executar queries com o operador texto que considera termos com significados iguais ou semelhantes, você pode definir sinônimos no campo synonyms do seu índice do MongoDB Search.
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 }
Para definir qual algoritmo de similaridade o MongoDB Search utiliza para calcular as pontuações de relevância durante as queries, especifique um algoritmo na propriedade similarity.type para os seus campos string indexados como o tipo string ou autocomplete da MongoDB Search.
Essa opção determina como os operadores text, phrase, queryString e autocomplete calculam as pontuações de relevância. Para saber mais sobre os diferentes algoritmos de similaridade, consulte Detalhes da pontuação.
1 "mappings": { 2 "fields": { 3 "<field-name>": { 4 "type": "string|autocomplete", 5 "similarity": { 6 "type": "bm25|boolean|stableTfl" 7 }, 8 }, 9 "<field-name>": { 10 "type": "string", 11 "multi": { 12 "<multi-option-name>": { 13 "type": "string", 14 "similarity": { 15 "type": "bm25|boolean|stableTfl" 16 } 17 } 18 } 19 } 20 } 21 }
(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
After you create an MongoDB Search index for all the fields that you want to search in your collection, you can run a MongoDB Search query. This section demonstrates how to apply your goals for your application's search experience to the JSON syntax of a MongoDB Search query.
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 de acordo com conteúdo, formato ou tipo de dados. Para saber quais operadores aceitam pesquisas para cada tipo de campo, consulte a tabela na seção de referência de operadores. Você deve especificar um ou mais campos de pesquisa de índice no parâmetro caminho de query do operador:
1 { 2 $search: { 3 "<operator-name>"|"<collector-name>": { 4 <operator-specification>|<collector-specification> 5 } 6 } 7 }
1 { 2 $searchMeta: { 3 "<operator-name>"|"<collector-name>": { 4 <operator-specification>|<collector-specification> 5 } 6 } 7 }
(Opcional) Aplique opções ou coletores para retornar metadados.
Se quiser recuperar metadados de sua consulta do MongoDB Search, você pode aplicar uma das seguintes configurações para escolher entre a contagem ou facet (MongoDB Search Operator) 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 pesquisa do MongoDB) 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. | |
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: