MongoDB admite operaciones de consulta que realizan una consulta de texto sobre el contenido de cadenas en los documentos. Para realizar una consulta de texto, MongoDB utiliza un índice de texto y... $text operador de consulta.
Para obtener más información sobre otras opciones de búsqueda de texto, como la búsqueda de texto completo y la búsqueda vectorial, consulte Descripción general de la búsquedade texto en el manual del servidor MongoDB.
El controlador proporciona el método auxiliar Filters.text() para facilitar la creación de filtros de consulta de texto.
Requisitos previos
Debe configurar los siguientes componentes para ejecutar los ejemplos de código de esta guía:
Una
test.restaurantscolección rellena con documentos delrestaurants.jsonarchivo en los activos de documentación de GitHub.Las siguientes declaraciones de importación:
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
Esta guía utiliza implementaciones Subscriber personalizadas, que se describen en la Guíade implementación de suscriptores personalizados de muestra.
Conectarse a una implementación de MongoDB
Primero, conéctese a una implementación de MongoDB y declare y defina las instancias MongoDatabase y MongoCollection.
El siguiente código se conecta a una implementación independiente de MongoDB que se ejecuta en localhost, en el puerto 27017. Luego, define la variable database para referirse a la base de datos test y la variable collection para referirse a la colección restaurants:
MongoClient mongoClient = MongoClients.create(); MongoDatabase database = mongoClient.getDatabase("test"); MongoCollection<Document> collection = database.getCollection("restaurants");
Para obtener más información sobre cómo conectarse a implementaciones de MongoDB, consulte el tutorial Conectarse a MongoDB.
Crear el índice de texto
Para crear un índice de texto, utilice el ayudante estático Indexes.text() para crear una especificación para un índice de texto y pase la especificación al método MongoCollection.createIndex() para crear el índice.
El siguiente ejemplo crea un índice de texto en el campo name para la colección restaurants:
MongoCollection<Document> collection = database.getCollection("restaurants"); collection.createIndex(Indexes.text("name")).subscribe(new PrintToStringSubscriber<String>());
Realizar una consulta de texto
Para realizar una consulta de texto, utilice el método auxiliar Filters.text() para especificar el filtro de consulta de texto.
Por ejemplo, el siguiente código realiza una consulta de texto en el campo name para que coincida con las cadenas "bakery" o "coffee":
collection .countDocuments(Filters.text("bakery coffee")) .subscribe(new PrintSubscriber<Long>("Text query matches: %s"));
Text query matches: [2]
Puntuación del texto
Para cada documento coincidente, una consulta de texto asigna una puntuación que representa su relevancia para el filtro de consulta de texto especificado. Para obtener resultados y ordenarlos por puntuación, utilice el operador $meta en el documento de proyección y la expresión de ordenación:
collection.find(Filters.text("bakery cafe")) .projection(Projections.metaTextScore("score")) .sort(Sorts.metaTextScore("score")) .subscribe(new PrintDocumentSubscriber());
Especificar una opción de consulta de texto
El asistente Filters.text() puede aceptar varias opciones de consulta de texto. El controlador proporciona la clase TextSearchOptions para especificar estas opciones.
Por ejemplo, la siguiente consulta de texto especifica la opción de idioma de consulta de texto cuando se realiza una consulta de texto para la palabra "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 obtener más información sobre las consultas de texto, consulte las siguientes secciones en el manual de MongoDB Server: