Overview
En esta guía, puedes aprender cómo usar el controlador de Kotlin para ejecutar Consultas deMongoDB Search en una colección. MongoDB Search permite realizar búsquedas de texto completo en colecciones alojadas en MongoDB. Los índices de MongoDB Search especifican el comportamiento de la búsqueda y los campos que se indexan.
Datos de muestra
Los ejemplos de esta guía utilizan el movies colección en la base de datos sample_mflix de los Conjuntos de datos de muestra de Atlas. Para aprender cómo crear un clúster gratuito de MongoDB Atlas y cargar los conjuntos de datos de muestra, consulta la guía Get Started . Para obtener más información sobre las operaciones de agregación y desarrolladores, consulta la agregación guide.
Ejecuta una MongoDB Search query
Esta sección muestra cómo crear una pipeline de agregación para ejecutar una consulta de MongoDB Search en una colección. Puedes utilizar el método builder Aggregates.search() para crear una etapa $search en la pipeline que especifique los criterios de búsqueda. Luego, llama al método aggregate() y pasa tu pipeline como parámetro.
Nota
Disponible solo en Atlas para MongoDB v4.2 y posteriores
Este operador de pipeline de agregación sólo está disponible para colecciones alojadas en clústeres MongoDB Atlas que ejecuten la versión v4.2 o posterior y que están cubiertas por un Índice de MongoDB Search. Obtén más información sobre la configuración requerida y la funcionalidad de este operador en la documentación de MongoDB Search.
Antes de ejecutar una query de MongoDB Search, debes crear un índice de MongoDB Search en tu colección. Para aprender a crear programáticamente un índice de búsqueda en MongoDB, consulta la sección MongoDB Search y MongoDB Vector Search Indexes en la guía de índices.
MongoDB Search Ejemplo
Antes de poder ejecutar este ejemplo, debe crear un índice de búsqueda de MongoDB en la colección de películas que tenga la siguiente definición:
{ "mappings": { "dynamic": false, "fields": { "title": { "type": "string" } } } }
Este ejemplo ejecuta una consulta de búsqueda de MongoDB realizando las siguientes acciones:
Construye una etapa
$searchutilizando el método de construcciónAggregates.search(), indicando al controlador que consulte documentos en los que el campotitlecontenga la palabra"Alabama"Construye una etapa
$projectutilizando el método de construcciónAggregates.project(), instruyendo al driver para que incluya el campotitleen los resultados de la queryPasa las etapas de la pipeline al método
aggregate()e imprime los resultados
val pipeline: List<Bson> = listOf( search(SearchOperator.text( fieldPath("title"), "Alabama")), project(Projections.include("title")) ) val results = collection.aggregate(pipeline) results.collect { doc -> println(doc.toJson()) }
{"_id": {"$oid": "..."}, "title": "Alabama Moon"} {"_id": {"$oid": "..."}, "title": "Crazy in Alabama"} {"_id": {"$oid": "..."}, "title": "Sweet Home Alabama"}
MongoDB Search metadatos
Utilice el método searchMeta() para crear una $searchMeta etapa de pipeline, que retorna solo los metadatos de los resultados de la búsqueda de texto completo de Atlas.
Tip
Solo disponible en Atlas para MongoDB v4.4.11 y posteriores
Este operador de canalización de agregación solo está disponible en clústeres MongoDB Atlas que ejecutan v4.4.11 y versiones posteriores.
Antes de poder ejecutar este ejemplo, debe crear un índice de búsqueda de MongoDB en la colección de películas que tenga la siguiente definición:
{ "mappings": { "dynamic": false, "fields": { "year": { "type": "number" } } } }
El siguiente ejemplo muestra los metadatos near para una etapa de agregación MongoDB Search:
searchMeta( SearchOperator.near(2010, 1, fieldPath("year")) )
Crear etapas de búsqueda en pipeline
El controlador Kotlin proporciona métodos auxiliares para los siguientes operadores:
Operador | Descripción |
|---|---|
Realiza una búsqueda de una palabra o frase que contenga una secuencia de caracteres de una cadena de entrada incompleta. | |
Combina dos o más operadores en una única query. | |
Verifica si un campo coincide con un valor que especificaste. Se asigna a los métodos | |
Comprueba si existe una ruta a un nombre de campo indexado específico en un documento. | |
Realiza una búsqueda de un arreglo de valores de número, fecha, booleano, objectId, uuid o string BSON en la ruta determinada y retorna documentos donde el valor del campo coincide con cualquier valor en el arreglo especificado. | |
Devuelve documentos similares a los documentos de entrada. | |
Permite consultar y puntuar valores numéricos, fechas y valores de puntos GeoJSON. | |
Realiza una búsqueda de documentos que contienen una secuencia ordenada de términos utilizando el analizador especificado en la configuración del índice. | |
Brinda soporte a las queries de una combinación de campos indexados y valores. | |
Permite la consulta y la calificación de valores numéricos, de fecha y de string. Se asigna a los métodos | |
Interpreta el campo de query como una expresión regular. | |
Realiza una búsqueda de texto completo utilizando el analizador que se especifique en la configuración del índice. | |
Permite consultas que utilizan caracteres especiales en la cadena de búsqueda que pueden coincidir con cualquier carácter. |
Ejemplo de etapa de búsqueda en el pipeline
Antes de que puedas ejecutar este ejemplo, debes crear un índice de búsqueda de MongoDB en la colección movies que tenga la siguiente definición:
{ "mappings": { "dynamic": true, "fields": { "title": { "analyzer": "lucene.keyword", "type": "string" }, "genres": { "normalizer": "lowercase", "type": "token" } } } }
Para obtener más información sobre la creación de índices de MongoDB Search, consulte la sección Índices de MongoDB Search y MongoDB Vector Search de la guía de Índices.
El siguiente código crea un escenario $search que tiene las siguientes especificaciones:
Comprueba que el arreglo
genresincluya"Comedy"Busca en el campo
fullplotla frase"new york"Coincide con
yearvalores entre1950y2000, ambos inclusiveBusca
titlevalores que comiencen con el término"Love"
val searchStage = Aggregates.search( SearchOperator.compound() .filter( listOf( SearchOperator.`in`(fieldPath("genres"), listOf("Comedy")), SearchOperator.phrase(fieldPath("fullplot"), "new york"), SearchOperator.numberRange(fieldPath("year")).gtLt(1950, 2000), SearchOperator.wildcard(fieldPath("title"), "Love *") ) ) ) val projectStage = Aggregates.project( Projections.include("title", "year", "genres")) val pipeline = listOf(searchStage, projectStage) val results = collection.aggregate(pipeline)
{"_id": ..., "genres": ["Comedy", "Romance"], "title": "Love at First Bite", "year": 1979} {"_id": ..., "genres": ["Comedy", "Drama"], "title": "Love Affair", "year": 1994}
Para obtener más información sobre los métodos auxiliares de búsqueda de MongoDB, consulte la referencia de la interfaz SearchOperator en la documentación de la API de Driver Core.
Información Adicional
Para obtener más información sobre MongoDB Search, consulte la MongoDB Search en la documentación de Atlas.
Documentación de la API
Para obtener más información sobre los métodos mencionados en esta guía, consulte la siguiente documentación de API: