Docs Menu
Docs Home
/ /

Queries e índices

La relación entre las consultas de búsqueda y los índices de búsqueda determina cuán eficiente y efectivamente puedes encontrar datos dentro de tus colecciones de MongoDB utilizando la búsqueda de MongoDB.

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 que pueda ejecutar un query de búsqueda de MongoDB, debe crear un índice de búsqueda de MongoDB en los campos que desea buscar. Los índices de búsqueda son estructuras de datos optimizadas para recuperar rápidamente documentos que cumplen con los criterios de búsqueda de su query. Cuando define un índice de búsqueda, puede especificar qué campos indexar y cómo deben tokenizarse estos campos.

Las consultas de búsqueda efectivas dependen de índices de búsqueda bien definidos. Los campos que se pretenden buscar deben estar indexados, y la configuración de índice determina si la búsqueda admite la ordenación, las facetas, el autocompletado y otras funcionalidades de búsqueda. Se puede iterar tanto en el diseño de queries como en el de índices para equilibrar la precisión de búsqueda con el rendimiento.

Esta página describe cómo planificar su experiencia de búsqueda en la búsqueda de MongoDB y definir un índice de búsqueda y un query para MongoDB que se adapten a sus necesidades de búsqueda.

Cuando se planifique la implementación de la MongoDB Search, se debe comenzar por definir la experiencia de búsqueda que se desea ofrecer:

  • Identifique claramente qué tipos de búsquedas debe realizar su aplicación. ¿Está desarrollando una característica de búsqueda para un sitio web de blog que necesita búsqueda de texto completo y autocompletar para los títulos de los artículos, o un sitio de comercio electrónico que requiere búsqueda facetada y filtrado por categorías de productos?

  • Se debe determinar cómo podrán interactuar los usuarios con la aplicación. Se deben priorizar las funcionalidades que mejoren la experiencia del usuario, como tiempos de respuesta rápidos o sugerencias precisas de autocompletado.

Luego, se deben tener en cuenta las siguientes preguntas que ayudarán a determinar la estructura de los índices y queries de MongoDB Search basadas en esas necesidades del usuario:

Before you can search your data using MongoDB Search, you must create one or more MongoDB Search indexes to be used during your MongoDB Search query. This section demonstrates how to apply your query preferences to the JSON configuration syntax of a MongoDB Search index.

Para utilizar la sintaxis JSON en esta sección de su definición de índice, reemplace los marcadores de posición con valores válidos y asegúrese de que su definición de índice completa contenga las opciones necesarias.

Para aprender cómo agregar el índice de MongoDB Search al clúster, se debe consultar el Inicio rápido de MongoDB Search.

1

Si se sabe en qué campos hacer una query en la colección, se debe habilitar las asignaciones estáticas y especificar los campos en la definición del índice de MongoDB Search. De lo contrario, se puede habilitar las asignaciones dinámicas para crear automáticamente un índice de todos los campos según un conjunto de tipos de campo por defecto o configurado (typeSet).

Para obtener más información, consulta Mapeos dinámicos y estáticos.

Nota

See Considerations for MongoDB Search Indexes for more details on MongoDB Search indexes behaviour and limitations.

1{
2 "mappings": {
3 "dynamic": false
4 }
5}
1{
2 "mappings": {
3 "dynamic": true|false,
4 "fields": {
5 "<field-name>": {
6 "type": "<field-type>",
7 ...
8 },
9 ...
10 }
11 }
12}
2

Si hay requisitos especiales de lenguaje, análisis o puntuación para los datos de string, se pueden aplicar las siguientes opciones a la definición del índice:

Para especificar cómo MongoDB Search divide los campos de texto en tokens, se puede establecer analizadores integrados en el índice de 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 cómo MongoDB Search divide el texto en tokens, se puede definir un analizador personalizado en el campo analyzers del índice de MongoDB Search.

1{
2 "analyzers": [
3 {
4 "name": "<custom-analyzer-name>",
5 "tokenizer": {
6 "type": "<tokenizer-type>"
7 }
8 },
9 ...
10 ]
11}

Para ejecutar consultas con el operador de texto que consideren términos con el mismo significado o similar, se pueden definir sinónimos en el campo synonyms del índice de 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 establecer qué algoritmo de similitud utiliza MongoDB Search para calcular las puntuaciones de relevancia durante las queries, especifica un algoritmo en la propiedad similarity.type para tus campos de string indexados como el tipo string de búsqueda de MongoDB o autocompletado.

Esta opción determina cómo los operadores de texto, frase, queryString y autocompletar calculan las puntuaciones de relevancia. Para obtener más información sobre los diferentes algoritmos de similitud, ve los Detalles de la puntuación.

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 }
3

Si desea optimizar el rendimiento de su query en un gran conjunto de datos, puede agregar las siguientes opciones a su definición de índice para limitar la cantidad de datos que debe recorrer su consulta de búsqueda de MongoDB:

Se debe usar la opción numPartitions para configurar las particiones para el índice. Cuando se particiona el índice, MongoDB Search distribuye automáticamente los objetos del índice entre los subíndices de manera óptima.

1{
2 "numPartitions": <integer>,
3}

Utilice la opción storedSource para especificar los campos en el documento de origen que debe almacenar la búsqueda de MongoDB.

1{
2 "storedSource": true | false | {
3 "include" | "exclude": [
4 "<field-name>",
5 ...
6 ]
7 }
8}

Después de crear un índice de búsqueda de MongoDB para todos los campos en los que desea buscar en su colección, puede ejecutar un query de búsqueda de MongoDB. Esta sección demuestra cómo aplicar sus objetivos para la experiencia de búsqueda de su aplicación a la sintaxis JSON de un query de búsqueda de MongoDB.

Para utilizar la sintaxis JSON en esta sección en su pipeline de agregación de consulta de búsqueda de MongoDB, reemplace los marcadores de posición con valores válidos y asegúrese de que su pipeline de query completa contenga los campos $search o los campos $searchMeta requeridos.

Para aprender a ejecutar una consulta de búsqueda, consulte la Guía rápida de búsqueda de MongoDB.

1

La primera etapa de su pipeline de agregación de consultas de búsqueda de MongoDB debe ser la $search o la $searchMeta, dependiendo de si está buscando documentos o metadatos:

Etapa de la canalización de agregación
Propósito

Devuelve los resultados de búsqueda de una búsqueda de texto completo.

Devolver los metadatos sobre los resultados de la búsqueda.

2

Para definir sus criterios de búsqueda, debe aplicar uno o varios operadores o colectores a su $search o $searchMeta etapa del pipeline.

Los operadores de MongoDB Search permiten localizar y recuperar datos relevantes del clúster según el contenido, el formato o el tipo de datos. Para aprender qué operadores soportan búsquedas para cada tipo de campo, se debe consultar la tabla en la sección de referencia de operadores. Se debe especificar uno o más campos de búsqueda indexados en el parámetro ruta de la query del 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>
}
}
]

Tip

Puede combinar múltiples operadores en una operación utilizando el operador compuesto. También puede usar la cláusula de filtro del operador compuesto para filtrar la salida del query que coincida con una cláusula determinada.

3

Si se desea recuperar metadatos de la consulta de MongoDB Search, se puede aplicar una de las siguientes configuraciones para elegir entre el conteo o el facet (operador de MongoDB Search) como tipo de documento de resultados de metadatos:

Para devolver el recuento total o el límite inferior de los resultados de búsqueda, se debe establecer la opción conteo en la etapa de agregación.

La etapa $searchMeta devuelve los resultados de metadatos count, mientras que la etapa $search almacena los resultados de metadatos en la variable de agregación $$SEARCH_META y devuelve solo los resultados de búsqueda. Para ver un ejemplo de cómo recuperar los resultados de metadatos de count de la variable $$SEARCH_META, ve Resultados del conteo.

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 ejecutar una query de facetas, que agrupe los resultados por valores o rangos y devuelva el recuento para cada uno de estos grupos, se debe usar el recopilador facet (operador de MongoDB Search) en la etapa de agregación.

La etapa $searchMeta devuelve facet resultados de metadatos, mientras que la etapa $search almacena los resultados de metadatos en la variable de agregación $$SEARCH_META y devuelve solo los resultados de búsqueda. Para ver un ejemplo de cómo recuperar los resultados de los metadatos de facet de la variable $$SEARCH_META, consulte Resultados de facetas.

1{
2 "$search" | "$searchMeta": {
3 "facet": {
4 "facets": {
5 <facet-definitions>
6 }
7 }
8 }
9}
4

Puede recuperar información adicional sobre los resultados de su etapa $search utilizando las siguientes opciones:

Opción
Caso de uso

Se muestran los términos de búsqueda en su contexto original como campos en el resultado de la query.

Recupere un desglose detallado de la puntuación de cada documento que devuelve la Búsqueda de MongoDB.

Rastree y proporcione información de análisis para sus términos de búsqueda de query.

Recupere el análisis sobre qué consultas de Lucene ha ejecutado la búsqueda de MongoDB para satisfacer su consulta, y cuánto tiempo pasa su consulta en las distintas etapas de ejecución.

5

Puede implementar una funcionalidad especial de ordenación para sus resultados de $search con las siguientes opciones:

Opción
Caso de uso

Modifique la puntuación de relevancia de los documentos en los resultados para asegurar que la búsqueda de MongoDB devuelva resultados relevantes.

Ordene sus resultados por campos de número, string y fecha, o por puntuación.

Establezca un punto de referencia para detener o iniciar sus resultados ordenados

6

Optimice el rendimiento de query utilizando las siguientes opciones de $search:

Opción
Caso de uso

Ejecute su consulta de búsqueda de MongoDB de manera más eficiente al recuperar solo los campos almacenados en mongot según lo especificado en la definición del índice de búsqueda de MongoDB para una colección.

Haga un paralelismo de la búsqueda con los segmentos en los nodos de búsqueda dedicados.

Para aprender a crear y ejecutar un índice de búsqueda de MongoDB y un query de búsqueda de MongoDB, consulte el Guía rápida de MongoDB Search.

Para obtener más información sobre las opciones de configuración de consultas de búsqueda de MongoDB mencionadas en este tutorial, consulte las siguientes páginas de referencia:

Para aprender más sobre las opciones de configuración del índice de búsqueda de MongoDB mencionadas en este tutorial, consulte las siguientes páginas de referencia:

Volver

Facetas