Docs Menu
Docs Home
/ /
Documentos de query

Buscar texto

En esta guía, puede aprender cómo ejecutar una búsqueda de texto en el controlador MongoDB Kotlin.

Puede usar una búsqueda de texto para recuperar documentos que contengan un término o una frase en un campo específico. Un término es una secuencia de caracteres que excluye los espacios en blanco. Una frase es una secuencia de términos con cualquier número de espacios en blanco.

Las siguientes secciones le muestran cómo realizar los siguientes tipos de búsquedas de texto:

  • Buscar texto por un término

  • Buscar texto por una frase

  • Buscar texto con términos excluidos

Si desea ordenar los resultados de búsqueda de texto, consulte la Sección de búsqueda de texto de nuestra guía de resultados de clasificación.

Las siguientes secciones presentan ejemplos de búsquedas 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 películas de la saga 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"] }

Estos datos se modelan con la siguiente clase de datos Kotlin:

data class Movies(
@BsonId val id: Int,
val title: String,
val tags: List<String>
)

Debe crear un índice de texto antes de ejecutar una búsqueda. Un índice de texto especifica el campo de cadena o matriz de cadenas donde se ejecutará la búsqueda.

En los siguientes ejemplos, se ejecutan búsquedas de texto title en el campo de la fast_and_furious_movies colección. Para habilitar las búsquedas de texto en el title campo, cree un índice de texto con el generador de índices y el siguiente fragmento:

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

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

Utilice el método Filters.text() para especificar una búsqueda de texto.

El Filters.text() método utiliza el constructor de filtros para definir un filtro de consulta que especifica qué buscar durante la búsqueda de texto. El filtro de consulta se representa mediante una instancia BSON. Pase el filtro de consulta al find() método para ejecutar una búsqueda de texto.

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

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

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

val options: TextSearchOptions = TextSearchOptions().caseSensitive(true)
val 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 API:

Pase un término como una cadena al método Filters.text() para especificar el término en su búsqueda de texto.

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

val filter = Filters.text("fast")
val findFlow = collection.find(filter)
findFlow.collect { println(it) }
Movies(id=1, title=2 Fast 2 Furious, tags=[undercover, drug dealer])
Movies(id=2, title=Fast 5, tags=[bank robbery, full team])

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

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

val filter = Filters.text("fate 7")
val findFlow = collection.find(filter)
findFlow.collect { println(it) }
Movies(id=3, title=Furious 7, tags=[emotional])
Movies(id=4, title=The Fate of the Furious, tags=[betrayal])

Pase una frase con comillas de escape al Filters.text() método para especificarla en su búsqueda de texto. Las comillas de escape son comillas dobles precedidas de una barra invertida. Si no añade comillas de escape alrededor de la frase, el find() método ejecutará una búsqueda de términos.

El siguiente ejemplo ejecuta una búsqueda de texto en los documentos de la colección fast_and_furious_movies para títulos que contengan la frase "fate of the furious":

val filter = Filters.text("\"fate of the furious\"")
val findFlow = collection.find(filter)
findFlow.collect { println(it) }
Movies(id=4, title=The Fate of the Furious, tags=[betrayal])

Para cada término que desee excluir de su búsqueda de texto, anteponga al término un signo menos en la cadena que pasa al método de construcción Filters.text().

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

Importante

Debe tener al menos un término de búsqueda de texto si desea excluir términos de su búsqueda.

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

val filter = Filters.text("furious -fast")
val findFlow = collection.find(filter)
findFlow.collect { println(it) }
Movies(id=3, title=Furious 7, tags=[emotional])
Movies(id=4, title=The Fate of the Furious, tags=[betrayal])

Volver

Buscar geoespacialmente

En esta página