Para agentes de IA: hay un Ć­ndice de documentación disponible en https://www.mongodb.com/es/docs/llms.txt — versiones en markdown de todas las pĆ”ginas estĆ”n disponibles agregando .md a cualquier ruta URL.
Docs Menu

MongoDB bĆŗsqueda

En esta guía, puedes aprender a usar el controlador de Java para ejecutar consultas de Búsqueda de MongoDB en una colección. MongoDB Search permite realizar búsquedas de texto completo en colecciones alojadas en MongoDB Atlas. Los índices de búsqueda de MongoDB Search especifican el comportamiento de la búsqueda y los campos que se deben indexar.

Los ejemplos de esta guía utilizan la colección movies en la base de datos sample_mflix de los conjuntos de datos de muestra de Atlas. Para aprender a crear una implementación gratuita de MongoDB y cargar los conjuntos de datos de muestra, consulta la guía Guía de introducción a MongoDB. Para aprender mÔs sobre las operaciones y desarrolladores de agregación, consulta la guía de Agregación.

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

Atlas y requisitos de versión de Community Edition

El operador $search pipeline de agregación estÔ disponible únicamente para colecciones alojadas en clústeres de MongoDB Atlas que ejecutan MongoDB v4.2 o posterior, o en clústeres de MongoDB Community Edition que ejecutan MongoDB v8.2 o posterior. Las colecciones deben estar cubiertas por un índice de búsqueda MongoDB. Para obtener mÔs información sobre la configuración necesaria y la funcionalidad de este operador, consulta la documentación de MongoDB Search.

Antes de ejecutar una MongoDB Search query, debes crear un MongoDB Search Ć­ndice en tu colección. Para aprender a crear un Ć­ndice de bĆŗsqueda de MongoDB programĆ”ticamente, consulta la sección ƍndices de BĆŗsqueda y BĆŗsqueda Vectorial de MongoDB en la guĆ­a de Ć­ndices.

Este ejemplo ejecuta una consulta de MongoDB Search realizando las siguientes acciones:

  • Construye una etapa $search utilizando el mĆ©todo de desarrollador Aggregates.search() e instruye al driver a hacer queries a documentos en los que el campo title contiene la palabra "Alabama"

  • Construye una etapa $project utilizando el mĆ©todo de construcción Aggregates.project(), instruyendo al driver para que incluya el campo title en los resultados de la query

  • Pasa las etapas de la pipeline al mĆ©todo aggregate() e imprime los resultados

collection.aggregate(
Arrays.asList(
Aggregates.search(SearchOperator.text(
SearchPath.fieldPath("title"), "Alabama")),
Aggregates.project(Projections.include("title"))
)
).forEach(doc -> System.out.println(doc.toJson()));
{"_id": {"$oid": "..."}, "title": "Alabama Moon"}
{"_id": {"$oid": "..."}, "title": "Crazy in Alabama"}
{"_id": {"$oid": "..."}, "title": "Sweet Home Alabama"}

Tip

Java Driver MongoDB Search Ejemplos

Para ver mÔs ejemplos que utilizan el controlador Java para realizar consultas de MongoDB Search, consulta Tutoriales de MongoDB Search en la documentación de Atlas.

Utilice el mƩtodo searchMeta() para crear una etapa de pipeline de $searchMeta, que solo devuelve los metadatos de los resultados de MongoDB Search.

Nota

Atlas y requisitos de versión de Community Edition

Este operador de pipeline de agregación estÔ disponible solo en MongoDB Atlas clústeres que ejecuten la v4.4.11 y posteriores, o en MongoDB Community Edition clústeres con MongoDB v8.2 o posterior. Para obtener una lista detallada de la disponibilidad de las versiones, consulta la documentación de MongoDB Atlas sobre $searchMeta.

El siguiente ejemplo muestra los metadatos near para una etapa de agregación MongoDB Search:

Aggregates.searchMeta(
SearchOperator.near(2010, 1, fieldPath("year")));

Para aprender mÔs sobre este método asistente, consultar la documentación de la API searchMeta().

El driver Java proporciona mƩtodos asistentes para los siguientes operadores:

Operador
Descripción

Realiza una bĆŗsqueda de una palabra o frase que contenga una secuencia de caracteres de una string 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 equals() y equalsNull().

Verifica si existe una ruta hacia un nombre de campo indexado especificado 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 numberRange() y dateRange().

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 string de búsqueda que pueden coincidir con cualquier carÔcter.

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 cómo crear Ć­ndices de MongoDB Search, consulte la sección ƍndices de MongoDB Search y Vector Search de la guĆ­a ƍndices.

El siguiente código crea un escenario $search que tiene las siguientes especificaciones:

  • Comprueba que el arreglo genres incluya "Comedy"

  • Busca en el campo fullplot la frase "new york"

  • Coincide con year valores entre 1950 y 2000, ambos inclusive

  • Busca valores de title que comiencen con el tĆ©rmino "Love"

List<Bson> pipeline = new ArrayList<>();
pipeline.add(Aggregates.search(
SearchOperator.compound()
.filter(
List.of(
SearchOperator.in(fieldPath("genres"), "Comedy"),
SearchOperator.phrase(fieldPath("fullplot"), "new york"),
SearchOperator.numberRange(fieldPath("year")).gtLt(1950, 2000),
SearchOperator.wildcard(fieldPath("title"), "Love *")
))));
pipeline.add(Aggregates.project(
Projections.include("title", "year", "genres")
));
AggregateIterable<Document> results = collection.aggregate(pipeline);
results.forEach(doc -> System.out.println(doc.toJson()));
{"_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 asistente de MongoDB Search, consulta la referencia de la interfaz SearchOperator en la documentación de Core API del driver.

Utiliza los métodos estÔticos vectorSearch() o vectorSearchExact() en la clase SearchOperator para realizar una búsqueda vectorial dentro de una etapas del pipeline de agregación $search. Estos métodos te permiten combinar la búsqueda por similitud vectorial con otros operadores de búsqueda de MongoDB Search, incluidos operadores que utilizan prefiltros de texto analizados.

Nota

ƍndice de bĆŗsquedas vectoriales de MongoDB requerido

Para utilizar estos mĆ©todos, es necesario tener un Ć­ndice de bĆŗsqueda vectorial de MongoDB configurado en la colección. Para saber cómo crear un Ć­ndice de bĆŗsqueda vectorial, consulte la sección MongoDB Search y de bĆŗsqueda vectorial de MongoDB en la guĆ­a ƍndices.

Utiliza el método vectorSearch() para realizar una búsqueda aproximada de vecinos mÔs cercanos (ANN). Utilice el método vectorSearchExact() para realizar una búsqueda exacta del vecino mÔs cercano (ENN). Ambos métodos aceptan los siguientes parÔmetros:

Parameter
Tipo
Descripción

path

FieldSearchPath

La ruta al campo vectorial indexado para buscar.

queryVector

Iterable<Double>

El vector de consulta. El nĆŗmero de dimensiones debe coincidir con el campo indexado.

limit

int

La cantidad mƔxima de resultados que se debe devolver.

numCandidates

int

El número de vecinos mÔs cercanos a considerar durante la búsqueda. Requerido solo para vectorSearch(). Este valor debe ser mayor o igual que limit.

Ambos mƩtodos devuelven una instancia de VectorSearchOperator. Puedes encadenar los siguientes mƩtodos en la instancia devuelta:

MƩtodo
Descripción

filter()

Aplica un SearchOperator como prefiltro antes de la bĆŗsqueda vectorial. Puedes pasar cualquier operador de MongoDB Search, incluidos los operadores que utilizan campos de texto analizados.

score()

Aplica un modificador de puntuación a los resultados de búsqueda vectorial.

El siguiente ejemplo utiliza el método vectorSearch() para realizar una búsqueda ANN en el campo plot_embedding de la colección movies. El ejemplo aplica un operador text como un prefiltro léxico en el campo genres.

List<Double> queryVector = List.of(
-0.014, -0.055, 0.047, -0.041, 0.027);
Bson searchStage = Aggregates.search(
SearchOperator.vectorSearch(
fieldPath("plot_embedding"),
queryVector,
10,
20
).filter(SearchOperator.text(
fieldPath("genres"), "Drama")));
collection.aggregate(List.of(searchStage))
.forEach(result -> System.out.println(result));

El siguiente ejemplo utiliza el método vectorSearchExact() para realizar una búsqueda ENN en el campo plot_embedding de la colección movies:

List<Double> queryVector = List.of(
-0.014, -0.055, 0.047, -0.041, 0.027);
Bson searchStage = Aggregates.search(
SearchOperator.vectorSearchExact(
fieldPath("plot_embedding"),
queryVector,
5));
collection.aggregate(List.of(searchStage))
.forEach(result -> System.out.println(result));

Para obtener mÔs información sobre MongoDB Search, consulte la MongoDB Search en la documentación de Atlas.

Para obtener mÔs información sobre los métodos mencionados en esta guía, consulta la siguiente documentación de la API: