Overview
En esta guía, puede aprender a usar el driver de Scala para ejecutar query de texto en sus documentos.
Puede utilizar una query de texto para recuperar documentos que contengan un término o una frase en un campo especificado. Un término contiene solo caracteres sin espacios en blanco. Una frase contiene términos separados por cualquier número de caracteres de espacio en blanco.
Nota
Las query de texto requieren un índice de texto en los campos de colección que desea buscar. Para aprender a crear índices, consulte la guía Optimizar query mediante índices.
Datos de muestra
Los ejemplos en 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 acceder a esta colección desde su aplicación Scala, cree un MongoClient que se conecte a un clúster de Atlas. Luego, asigne los siguientes valores a sus variables database y collection:
val database: MongoDatabase = mongoClient.getDatabase("sample_mflix") val collection: MongoCollection[Document] = database.getCollection("movies")
Para aprender cómo crear un clúster gratuito de MongoDB Atlas y cargar los conjuntos de datos de ejemplo, consulta la guía MongoDB Get Started.
Cree un índice de texto
Antes de ejecutar una query de texto, debe crear un índice de texto en la colección. Un índice de texto especifica uno o más campos de string para indexar para la búsqueda de texto. El siguiente ejemplo crea un índice de texto en el campo title de la colección movies:
val observable = collection.createIndex(Indexes.text("title")) Await.result(observable.toFuture(), Duration(10, TimeUnit.SECONDS))
Query texto por término
Para buscar documentos que contengan un término específico, pase el término como un string al método text() de la clase Filters.
El siguiente ejemplo cuenta los documentos que tienen el término "time" en el campo title:
val filterTerm = text("time") collection.countDocuments(filterTerm) .subscribe((count: Long) => println(count))
Para encontrar documentos que contengan varios términos, separe los términos con espacios en la cadena de búsqueda. El siguiente ejemplo cuenta los documentos que tienen el término "time" o el término "machine" en el campo title:
val filterMultiple = text("time machine") collection.countDocuments(filterMultiple) .subscribe((count: Long) => println(count))
Query texto por frase
Para encontrar documentos que contengan una frase, rodéela con comillas de escape (\") en la string de búsqueda.
El siguiente ejemplo cuenta los documentos que tienen la frase "time machine" en el campo title:
val filterPhrase = text("\"time machine\"") collection.countDocuments(filterPhrase) .subscribe((count: Long) => println(count))
Query de texto con términos excluidos
Para excluir documentos que contengan un término específico, anteponga un guión (-) al término en la string de búsqueda. Debe incluir al menos un término positivo en la query.
El siguiente ejemplo cuenta los documentos que contienen el término "time" pero no el término "machine":
val filterExclude = text("time -machine") collection.countDocuments(filterExclude) .subscribe((count: Long) => println(count))
Especificar opciones de texto de query
Puede personalizar el comportamiento de la query de texto pasando un objeto TextSearchOptions como segundo parámetro a Filters.text(). La siguiente tabla describe los métodos que puede encadenar a una instancia de TextSearchOptions:
Método | Descripción |
|---|---|
| Establece si la query de texto distingue entre mayúsculas y minúsculas. Por defecto es |
| Establece si la query de texto distingue los diacríticos. Por defecto es |
| Establece el lenguaje para la query de texto. Por defecto, el |
El siguiente ejemplo cuenta los documentos que coinciden con una búsqueda que distingue entre mayúsculas y minúsculas del término "Time" en el campo title:
val options = TextSearchOptions().caseSensitive(true) val filterOptions = text("Time", options) collection.countDocuments(filterOptions) .subscribe((count: Long) => println(count))
Información Adicional
Para obtener más información sobre la búsqueda de texto, consulta los siguientes recursos en el manual de MongoDB Server:
Para obtener más información sobre la creación de índices con el driver de Scala, consulta la guía Optimizar query con índices.
Documentación de la API
Para aprender más sobre cualquiera de los métodos o tipos analizados en esta guía, consulta la siguiente documentación de API: