Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /

Texto de query

En esta guía, puede aprender cómo ejecutar una text query en el driver Java de MongoDB.

Puede utilizar una query de texto para recuperar documentos que contengan un término o una frase en un campo especificado. Un término es una secuencia de caracteres que excluye los caracteres de espacio en blanco. Una frase es una secuencia de términos con cualquier número de caracteres de espacio en blanco.

Las siguientes secciones muestran cómo realizar los siguientes tipos de consultas de texto:

  • Query texto por un término

  • Consultar texto por frase

  • Texto de consulta con términos excluidos

Si desea ordenar los resultados de su consulta de texto, consulte la Sección de text query de nuestra guía Ordenar resultados.

Las siguientes secciones presentan ejemplos de consultas de texto en el fast_and_furious_movies Colección. Cada sección utiliza una variable llamada collection para referirse a la instancia MongoCollection de la colección fast_and_furious_movies.

La colección fast_and_furious_movies contiene documentos que describen una de las varias películas que forman parte de la franquicia de películas Rápidos y Furiosos. Cada documento contiene un campo de título y un campo de etiquetas.

{ "_id": 1, "title": "2 Fast 2 Furious ", "tags": ["undercover", "drug dealer"] }
{ "_id": 2, "title": "Fast 5", "tags": ["bank robbery", "full team"] }
{ "_id": 3, "title": "Furious 7", "tags": ["emotional"] }
{ "_id": 4, "title": "The Fate of the Furious", "tags": ["betrayal"] }

Debe crear un índice de texto antes de ejecutar una query de texto. Un índice de texto especifica el campo de string o arreglo de strings en el que se realiza una búsqueda de texto.

En los siguientes ejemplos, ejecuta consultas de texto en el campo title en la colección fast_and_furious_movies. Para habilitar búsquedas de texto en el campo title, crea un índice de texto usando el generador de Índices con el siguiente snippet:

collection.createIndex(Indexes.text("title"));

Para obtener más información, consulta los siguientes recursos:

  • Sección deíndices de texto de nuestra guía de índices

  • Índices de Texto Entrada del Manual del Servidor

Utilice el método Filters.text() para especificar una consulta de texto.

El método Filters.text() usa el constructor de Filtros para definir un filtro de query que especifique qué buscar en la query de texto. El filtro de query se representa mediante una instancia BSON. Pasa el filtro de query al método find() para ejecutar una query de texto.

Cuando ejecutas el método find(), MongoDB realiza una query de texto en todos los campos indexados con el índice de texto en la colección. MongoDB devuelve documentos que contienen uno o más de los términos de búsqueda y un puntaje de relevancia para cada resultado. Para obtener más información sobre las puntuaciones de relevancia, consulta la sección Consulta de texto en nuestra guía Ordenar resultados.

Puede incluir TextSearchOptions como segundo parámetro del método Filters.text() para especificar opciones de consulta de texto como la sensibilidad a mayúsculas y minúsculas. Por defecto, las consultas de texto se ejecutan sin distinción entre mayúsculas y minúsculas, lo que significa que la búsqueda coincide con valores en minúsculas y en mayúsculas.

Para especificar una búsqueda que distinga entre mayúsculas y minúsculas, utiliza el siguiente snippet:

TextSearchOptions options = new TextSearchOptions().caseSensitive(true);
Bson filter = Filters.text("SomeText", options);

Para obtener más información sobre los métodos y clases mencionados en esta sección, consulte la siguiente documentación de la API:

Pase un término como string al método Filters.text() para especificar el término en su text query.

El siguiente ejemplo ejecuta una query de texto en los documentos de la colección fast_and_furious_movies para los títulos que contienen el término "rápido":

Bson filter = Filters.text("fast");
collection.find(filter).forEach(doc -> System.out.println(doc.toJson()));

A continuación se muestra el resultado del código anterior:

{ "_id": 1, "title": "2 Fast 2 Furious ", "tags": ["undercover", "drug dealer"] }
{ "_id": 2, "title": "Fast 5", "tags": ["bank robbery", "full team"] }

Para encontrar coincidencias en varios términos de su consulta de texto, separe cada término con espacios en el método de construcción Filters.text(). Este método devuelve la consulta de texto como una instancia Bson. Al pasar esto al método find(), este devuelve los documentos que coinciden con cualquiera de los términos.

El siguiente ejemplo ejecuta una consulta de texto en los documentos de la colección fast_and_furious_movies para títulos que contengan los términos "fate" o "7":

Bson filter = Filters.text("fate 7");
collection.find(filter).forEach(doc -> System.out.println(doc.toJson()));

A continuación se muestra el resultado del código anterior:

{ "_id": 3, "title": "Furious 7", "tags": ["emotional"] }
{ "_id": 4, "title": "The Fate of the Furious", "tags": ["betrayal"] }

Pasa una frase con comillas escapadas al método Filters.text() para especificar la frase en tu query de texto. Las comillas escapadas son caracteres de comillas dobles precedidos de una barra invertida. Si no añades comillas escapadas alrededor de la frase, el método find() ejecuta una búsqueda de términos.

El siguiente ejemplo ejecuta una query de texto en los documentos de la colección fast_and_furious_movies en busca de títulos que contengan la frase "el destino de los furiosos":

Bson filter = Filters.text("\"fate of the furious\"");
collection.find(filter).forEach(doc -> System.out.println(doc.toJson()));

A continuación se muestra el resultado del código anterior:

{ "_id": 4, "title": "The Fate of the Furious", "tags": ["betrayal"] }

Para cada término que desees excluir de tu query de texto, anteponle un signo menos en la cadena que envíes al método generador Filters.text().

Ninguno de los documentos devueltos por la búsqueda contiene el término excluido en tu campo de índice de texto.

Importante

Debes tener al menos un término de query de texto si deseas excluir términos de tu búsqueda.

El siguiente ejemplo ejecuta una query de texto en los documentos de la colección fast_and_furious_movies para títulos que contengan el término "furioso", pero no contengan el término "rápido":

Bson filter = Filters.text("furious -fast");
collection.find(filter).forEach(doc -> System.out.println(doc.toJson()));

A continuación se muestra el resultado del código anterior:

{ "_id": 3, "title": "Furious 7", "tags": ["emotional"] }
{ "_id": 4, "title": "The Fate of the Furious", "tags": ["betrayal"] }

Volver

Buscar geoespacialmente

En esta página