O MongoDB oferece suporte a operações de query que executam uma query de texto no conteúdo da string em documentos. Para executar uma query de texto, o MongoDB utiliza um índice de texto e o operador de query $text
.
Para saber mais sobre outras opções de pesquisa de texto, como pesquisa de texto completo e pesquisa vetorial, consulte a visão geral Pesquisa de texto no manual do MongoDB Server.
O driver fornece o método assistente Filters.text()
para facilitar a criação de filtros de query de texto.
Pré-requisitos
Você deve configurar os seguintes componentes para executar os exemplos de código neste guia:
Uma coleção
test.restaurants
preenchida com documentos do arquivorestaurants.json
nos ativos de documentação do Github.As seguintes declarações de importação:
import com.mongodb.client.MongoClients; import com.mongodb.client.MongoClient; import com.mongodb.client.MongoCollection; import com.mongodb.client.MongoDatabase; import com.mongodb.client.model.Indexes; import com.mongodb.client.model.Filters; import com.mongodb.client.model.Sorts; import com.mongodb.client.model.TextSearchOptions; import com.mongodb.client.model.Projections; import org.bson.Document;
Importante
Este guia usa implementações personalizadas de Subscriber
, que são descritas no guia Amostra de implementações personalizadas de assinantes .
Conecte-se a um MongoDB deployment
Primeiro, conecte a um MongoDB deployment e declare e defina as instâncias MongoDatabase
e MongoCollection
.
O código a seguir se conecta a uma MongoDB deployment standalone em execução em localhost
na porta 27017
. Em seguida, define a variável database
para fazer referência ao banco de dados test
e a variável collection
para fazer referência à coleção restaurants
:
MongoClient mongoClient = MongoClients.create(); MongoDatabase database = mongoClient.getDatabase("test"); MongoCollection<Document> collection = database.getCollection("restaurants");
Para saber mais sobre como se conectar a sistemas do MongoDB, consulte o tutorial Conectar ao MongoDB .
Criar o índice de texto
Para criar um índice de texto, utilize o auxiliar estático Indexes.text()
para criar uma especificação para um índice de texto e passar a especificação para o método MongoCollection.createIndex()
para criar o índice.
O exemplo seguinte cria um índice de texto no campo name
para a coleção restaurants
:
MongoCollection<Document> collection = database.getCollection("restaurants"); collection.createIndex(Indexes.text("name")).subscribe(new PrintToStringSubscriber<String>());
Realizar uma query de texto
Para executar uma query de texto, use o método assistente Filters.text()
para especificar o filtro de query de texto.
Por exemplo, o código a seguir executa uma query de texto no campo name
para corresponder às strings "bakery"
ou "coffee"
:
collection .countDocuments(Filters.text("bakery coffee")) .subscribe(new PrintSubscriber<Long>("Text query matches: %s"));
Text query matches: [2]
Pontuação de texto
Para cada documento correspondente, uma query de texto atribui uma pontuação que representa a relevância de um documento para o filtro de query de texto especificado. Para retornar e classificar por pontuação, use o operador $meta
no documento de projeção e a expressão de classificação:
collection.find(Filters.text("bakery cafe")) .projection(Projections.metaTextScore("score")) .sort(Sorts.metaTextScore("score")) .subscribe(new PrintDocumentSubscriber());
Especificar uma opção de query de texto
O assistente Filters.text()
pode aceitar várias opções de query de texto. O driver fornece a classe TextSearchOptions
para especificar essas opções.
Por exemplo, a seguinte consulta de texto especifica a opção de idioma da consulta de texto ao executar uma consulta de texto para a palavra "cafe"
:
collection.countDocuments( Filters.text("cafe", new TextSearchOptions().language("english")) ).subscribe(new PrintSubscriber<Long>("Text query matches (English): %s"));
Text query matches (English): [1]
Para saber mais sobre queries de texto, consulte as seguintes seções no manual do MongoDB Server :