Menu Docs
Página inicial do Docs
/ /

Texto da query

In this guide, you can learn how to run a text query in the MongoDB Kotlin driver.

Você pode usar uma query de texto para recuperar documentos que contenham um termo ou uma frase em um campo especificado. Um termo é uma sequência de caracteres que exclui caracteres de espaço em branco. Uma frase é uma sequência de termos com qualquer número de caracteres do espaço em branco.

As seções a seguir mostram como executar os seguintes tipos de queries de texto:

  • Texto de consulta por um termo

  • Texto de query por frase

  • Texto da query com termos excluídos

Se quiser classificar os resultados da consulta de texto, consulte a seção Query de texto do nosso guia Classificar resultados.

As seções seguintes apresentam exemplos de queries de texto na coleção fast_and_furious_movies. Cada seção usa uma variável chamada collection para fazer referência à instância MongoCollection da coleção fast_and_furious_movies.

A coleção fast_and_furious_movies contém documentos que descrevem um dos vários filmes que fazem parte da franquia de filmes Velozes e Furiosos. Cada documento contém um campo de título e um campo de tags.

{ "_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"] }

Esses dados são modelados com a seguinte classe de dados Kotlin:

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

You must create a text index before running a text query. A text index specifies the string or string array field on which to run a text query.

In the following examples, you run text queries on the title field in the fast_and_furious_movies collection. To enable text queries on the title field, create a text index using the Indexes builder with the following snippet:

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

Para obter mais informações, consulte os seguintes recursos:

  • Seção Índices de texto do nosso guia de índices

  • Índices de texto Entrada manual do servidor

Utilize o método Filters.text() para especificar uma query de texto.

The Filters.text() method uses the Filters builder to define a query filter specifying what to search for during the text query. The query filter is represented by a BSON instance. Pass the query filter to the find() method to run a text query.

When you execute the find() method, MongoDB runs a text query on all the fields indexed with the text index on the collection. MongoDB returns documents that contain one or more of the query terms and a relevance score for each result. For more information on relevance scores, see the Text Query section in our Sort Results guide.

You can include TextSearchOptions as the second parameter of the Filters.text() method to specify text query options such as case sensitivity. By default, text queries run without case sensitivity which means the query matches lowercase and uppercase values.

To specify a case sensitive query, use the following snippet:

val options: TextSearchOptions = TextSearchOptions().caseSensitive(true)
val filter = Filters.text("SomeText", options)

Para obter mais informações sobre os métodos e as classes mencionadas nesta seção, consulte a seguinte documentação da API:

Passe um termo como uma string para o método Filters.text() para especificar o termo na sua consulta de texto.

O exemplo a seguir executa uma query de texto nos documentos na collection fast_and_furious_movies para títulos que contêm o termo "fast":

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 corresponder a vários termos em sua consulta de texto, separe cada termo com espaços no método de construtor do Filters.text(). O método de construtor retorna a query de texto como uma instância Bson . Quando você passa isso para o método find(), ele retorna documentos que correspondem a qualquer um dos termos.

O exemplo a seguir executa uma query de texto nos documentos na collection fast_and_furious_movies para títulos que contenham os termos "fate" ou "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])

Passe uma frase com citações em forma de escape para o método Filters.text() para especificar a frase na sua consulta de texto. As aspas escapadas são caracteres de aspas duplas precedidos por um caractere de barra invertida. Se você não adicionar aspas escapadas ao redor da frase, o método find() executará uma pesquisa de termo.

O exemplo a seguir executa uma query de texto nos documentos da collection fast_and_furious_movies para títulos que contenham a frase "fate of the furious" (destino dos furiosos):

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 termo que você deseja excluir da consulta de texto, prefixe o termo com um sinal de subtração na string que você passa para o método construtor de Filters.text() .

None of the documents returned from the query contain the excluded term in your text index field.

Importante

You must have at least one text query term if you want to exclude terms from your query.

O exemplo a seguir executa uma query de texto nos documentos na collection fast_and_furious_movies para títulos que contêm o termo "fuzzy", mas não contêm o termo "fast":

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])

Voltar

Pesquisar geoespacialmente

Nesta página