Etapas del pipeline
MongoDB Search queries take the form of an aggregation pipeline stage. MongoDB Search provides $search and $searchMeta stages, both of which must be the first stage in any query pipeline, including the $lookup and $unionWith sub-pipelines. These stages can be used in conjunction with other aggregation pipeline stages in your query pipeline.
Según la etapa de pipeline que elijas, tu query devuelve los resultados de una búsqueda en texto completo o metadatos sobre tus resultados de búsqueda:
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. |
Operadores y recolectores
MongoDB Search también proporciona operadores del query y coleccionistas que puedes usar dentro de las etapas del pipeline de agregación $search y $searchMeta. Los operadores de MongoDB Search permiten localizar y recuperar datos relevantes de la colección en el clúster. El colector devuelve un documento que representa los resultados de los metadatos de búsqueda.
Se pueden utilizar los operadores de MongoDB Search para realizar queries de términos, frases, formas y puntos geográficos, valores numéricos, documentos similares, términos sinónimos y mucho más.
You can also search using regex and wildcard expressions. The MongoDB Search compound operator allows you to combine multiple operators inside your $search stage to perform a complex search and filter of data based on what must, must not, or should be present in the documents returned by MongoDB Search. You can use the compound operator to also match or filter documents in the $search stage itself. Running $match after $search is less performant than running $search with the compound operator.
Para aprender más sobre operadores y recopiladores, consulta Operadores y recopiladores.
Procesamiento de queries
mongodymongoten el mismo nodoWhen you run a query, MongoDB Search uses the configured read preference to identify the node on which to run the query. The query first goes to the MongoDB process, which is
mongodfor a replica set cluster ormongosfor a sharded cluster.For a replica set cluster, the MongoDB process routes the query to the
mongoton the same node. For sharded clusters, your cluster data is partitioned acrossmongodinstances and eachmongotknows about the data on themongodon the same node only. Therefore, you can't run MongoDB Search queries that target a particular shard.mongosdirects the queries to all shards, making these scatter gather queries. If you use zones to distribute a sharded collection over a subset of the shards in the cluster, MongoDB Search routes the query to the zone that contains the shards for the collection that you are querying and runs your$searchqueries on just the shards where the collection is located.MongoDB Search realiza la búsqueda y la puntuación y devuelve los identificadores de documentos y otros metadatos de búsqueda para los resultados coincidentes a
mongod. Luego, elmongodrealiza una búsqueda completa de documentos de forma implícita para obtener los resultados coincidentes y devuelve los resultados al cliente.Si utiliza la opción
$searchconcurrente en su query, MongoDB Search permite el paralelismo intra-query. Para obtener más información, consulte Paralelizar la ejecución de queries entre segmentos.mongodymongoten nodos diferentesWhen you run a query, the query first goes to the
mongodbased on the configured read preference. By default, themongodprocess routes the search query through a load balancer on the same node, which distributes the requests across all of themongotprocesses. Alternatively, if you set thesearchNodePreferenceparameter for your$searchstage, MongoDB Search runs your query against the same search node each time.El proceso de MongoDB Search
mongotrealiza la búsqueda y la puntuación, y devuelve los ID de los documentos y los metadatos de los resultados de las coincidencias amongod. A continuación,mongodrealiza una búsqueda en el documento completo para obtener resultados coincidentes y devuelve los resultados al cliente. Si se utiliza la opción$searchconcurrente en el query, MongoDB Search permite el paralelismo intra-query. Para aprender más, se puede consultar Paralelización de la ejecución de queries entre segmentos.
Puntuación
MongoDB Search asocia una puntuación basada en la relevancia a cada documento del conjunto de resultados. La puntuación basada en la relevancia permite a MongoDB Search devolver los documentos en orden de la puntuación más alta a la más baja. MongoDB Search puntúa los documentos más alto si el término del query aparece con frecuencia en un documento y más bajo si el término del query aparece en muchos documentos de la colección. MongoDB Search también ofrece soporte para personalizar la puntuación por defecto basada en relevancia mediante aumentos, decaimientos u otras opciones de modificación. Para obtener más información sobre la personalización de las puntuaciones resultantes, se puede consultar Puntuar los documentos en los resultados.
Tip
See: Learn by Watching
Ver este video da una visión general de cómo buscar y rastrear los queries con MongoDB Search. En este video, se puede aprender más sobre los operadores de MongoDB Search y cómo MongoDB Search califica los documentos en los resultados.
Duración: 15 minutos
Clientes compatibles
Se pueden crear y ejecutar MongoDB Search queries utilizando los siguientes clientes:
Soluciona problemas de queries
Conjunto de resultados vacío
mongot no devuelve ningún error, pero devuelve un conjunto de resultados vacío si el query $search:
Hace referencia a un índice que no existe. Si no se especifica un índice por nombre en el query, MongoDB Search por defecto usa un índice llamado
default. Si no se tiene un índice llamadodefaulto si el índice que se especificó no existe, MongoDB Search no devuelve un error y devuelve un conjunto de resultados vacío. Se puede especificar un índice válido por su nombre utilizando la opciónindex.Especifica un campo sin índice. Si se ejecuta un query en un campo que no está indexado, MongoDB Search no devuelve un error y devuelve un conjunto de resultados vacío. Solo se deben especificar campos indexados como valores para el parámetro
path. Se puede permitir la asignación dinámica en la definición del índice de la colección para asegurarse de que todos los campos indexables dinámicamente de la colección se indexen automáticamente. Para aprender más, ver mapeo dinámico.Utiliza el operador
texten una ruta de campo que no está indexada como un tipostring. Si a un campo se le asigna un índice como un tipo de campo de MongoDB Search distinto astring, comostringFacetoautocomplete, MongoDB Search no devuelve un error y devuelve un conjunto de resultados vacío. Debes indexar los campos con valores de tipo de datostringBSON como tipo string para ejecutar queries en los campos con el operador texto.
PlanExecutor Error
mongot devuelve un error PlanExecutor si tu query $search:
Especifica un campo que está indexado como un tipo de dato incorrecto. En este caso, si se ejecuta un query, MongoDB Search devuelve un mensaje de error que identifica el campo que se ha indexado incorrectamente y su tipo de dato correcto. Por ejemplo:
PlanExecutor error during aggregation :: caused by :: Cannot facet on field "genres" because it was not indexed as a "stringFacet" field. Por ejemplo, para ejecutar queries de
facet(operador de MongoDB Search) contra los camposstring,numberodate, se debe crear un índice para los campos utilizando el tipo de campo correspondiente de MongoDB Search, comostringFacet,numberydaterespectivamente. Para aprender más, se puede consultar Tipos de datos compatibles y no compatibles.