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.
Planifique su experiencia 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:
Se debe tener en cuenta si los usuarios de la aplicación desean devolver el contenido de los documentos o los metadatos de los documentos:
Si los usuarios desean contenido de documentos, utilice la etapa de agregación
$searchpara devolver documentos que coincidan con sus criterios de búsqueda.Si los usuarios desean metadatos sobre sus resultados de búsqueda, utilice la etapa
$searchMetapara devolver conteos personalizables de documentos coincidentes y facetas.
Se deben identificar los campos específicos dentro de las colecciones que probablemente los usuarios busquen para saber qué campos indexar. Cada consulta de MongoDB Search busca en un único índice de MongoDB Search, que contiene términos extraídos de uno o más campos especificados dentro de una colección. Al planificar las consultas de MongoDB Search, se debe decidir si se desea indexar solo los campos clave o todos los campos de la colección especificada habilitando la asignación estática o dinámica. Se pueden realizar queries en múltiples campos especificando la ruta de query como un arreglo de campos, o usando el operador queryString.
Los términos de búsqueda comunes de los usuarios pueden ser coincidencias exactas, similares o parciales con los datos del clúster. Por ejemplo, los usuarios de una aplicación de revisiones de películas pueden querer filtrar películas de un año exacto, o ver recomendaciones de películas que sean similares a su película favorita.
Determina el tipo de coincidencias que están buscando tus usuarios para decidir qué operadores usar en tus consultas de búsqueda de MongoDB:
Para coincidencias exactas, utilice operadores como equals o in para hacer coincidir documentos que contengan términos idénticos al valor
queryespecificado. También puede utilizar el operador text para hacer coincidir documentos que contengananyoallde las cadenas en el valorquery.Para coincidencias similares, utilice operadores como near, moreLikeThis o phrase para hacer coincidir documentos que contengan valores numéricos, documentos u órdenes de strings que sean similares a los términos de búsqueda especificados. También puede utilizar el operador rango para hacer coincidir documentos que contengan un valor dentro de un rango específico de valores.
Para las coincidencias parciales, como las consultas de búsqueda mientras escribes, utiliza Operadores como autocompletar, regex o comodín para implementar la funcionalidad de búsqueda mientras escribes o hacer coincidir términos mediante expresiones regulares.
Utilice el operador compuesto para combinar múltiples comportamientos coincidentes en una sola query.
Para aplicaciones que requieren normalización de texto, soporte multilingüe, stemming u otras funciones, aprovecha las herramientas de análisis de texto de búsqueda de MongoDB:
Elija un analizador con funcionalidad incorporada en la definición de su índice para que coincida con el lenguaje y la naturaleza de sus datos de texto. Los analizadores descomponen el texto en términos o tokens y pueden ajustar el texto para remover la puntuación y las mayúsculas, convertir las palabras a su forma raíz y más.
Se deben configurar analizadores personalizados si la aplicación tiene requisitos específicos, como manejar la jerga específica del dominio o analizar texto con formato, como direcciones de correo electrónico o identificadores separados por guiones. Los analizadores personalizados permiten filtrar texto por carácter, definir el número de caracteres a incluir en cada fragmento de token, o habilitar el stemming o la restricción.
Defina sinónimos para mejorar la precisión de búsqueda de términos con el mismo significado u otro similar.
Puede ajustar la presentación de los resultados de búsqueda según las demandas de filtro, ordenación o relevancia de sus usuarios:
Utilice la opción de query de puntuación para modificar la puntuación de relevancia de los documentos y afectar el orden en el que los usuarios ven los resultados. Las consultas de búsqueda de MongoDB asocian una puntuación basada en la relevancia a cada documento del conjunto de resultados y devuelven los documentos ordenados de mayor a menor puntuación.
Establezca la opción de query sort para los campos indexados que es probable que los usuarios ordenen en orden ascendente o descendente, como fechas o campos numéricos.
Utilice las opciones de searchBefore o searchAfter query para mostrar los resultados como un conjunto de páginas que los usuarios pueden navegar secuencialmente o saltar.
Utiliza el recopilador
facet(Operador de búsqueda de MongoDB) para permitir a los usuarios filtrar los resultados por categorías u otras dimensiones. Esto puede mejorar significativamente la relevancia de los resultados de búsqueda, ofreciendo a los usuarios una experiencia de búsqueda más guiada.
El rendimiento de la consulta de búsqueda de MongoDB se ve afectado por la configuración del índice y la complejidad de sus queries. Concéntrese en la indexación de los campos que son críticos para la funcionalidad de búsqueda de su aplicación y busque un equilibrio lógico entre la complejidad del query y la velocidad.
Para optimizar aún más el rendimiento, ten en cuenta las siguientes opciones de query:
Utilice la opción de query concurrente para establecer el número de solicitudes de búsqueda concurrentes que se ejecutan al evaluar un query. Esta opción es útil para queries complejas o grandes conjuntos de datos.
Utilice la opción de query returnStoredSource junto con la opción de índice storedSource para determinar si se deben devolver los documentos fuente originales, almacenados como parte del índice, junto con los resultados de búsqueda. Esta opción es útil para aplicaciones en las que se muestran resúmenes o aspectos destacados según los criterios de búsqueda.
Utilice la opción de índice numPartitions para particionar su índice, distribuyendo los objetos del índice entre los subíndices de manera óptima.
Para obtener más recomendaciones sobre cómo optimizar el rendimiento del query, consulte Rendimiento de la consulta de búsqueda de MongoDB.
Defina su índice
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.
Elija qué campos indexar.
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 }
(Opcional) Aplique las reglas de análisis de texto.
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 }
(Optional) Add options to optimize query performance.
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 }
Definir la query
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.
Elija su etapa inicial de pipeline de búsqueda de MongoDB.
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. |
Aplica operadores para definir tus criterios de búsqueda.
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> } } ]
(Optional) Apply options or collectors to return metadata.
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 }
(Opcional) Añada opciones de búsqueda a su etapa de $search para recuperar información adicional sobre su consulta de MongoDB Search.
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. |
(Opcional) Añada opciones de $search para definir la clasificación de resultados.
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 |
(Optional) Add $search options to optimize query performance.
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 | |
Haga un paralelismo de la búsqueda con los segmentos en los nodos de búsqueda dedicados. |
Obtén más información
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: