MongoDB admite operaciones de consulta que realizan búsquedas de texto en el contenido de cadenas de los documentos. Para realizar una búsqueda de texto, MongoDB utiliza un índice de texto y... $text Operador de consulta. Para obtener más información sobre las búsquedas de texto, consulte Búsqueda de texto en el manual del servidor.
El controlador proporciona el método auxiliar Filters.text() para facilitar la creación de filtros de consultas de búsqueda 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 las implementaciones Subscriber, que se describen en la Manual de inicio rápido.
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>());
Realiza una búsqueda de texto
Para realizar una búsqueda de texto, utilice el método auxiliar Filters.text() para especificar el filtro de consulta de búsqueda de texto.
Por ejemplo, el siguiente código realiza una búsqueda 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 search matches: %s"));
Text search matches: [2]
Puntuación del texto
Para cada documento coincidente, la búsqueda de texto asigna una puntuación que representa su relevancia para el filtro de consulta 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 búsqueda de texto
El asistente Filters.text() puede aceptar varias opciones de búsqueda de texto. El controlador proporciona la clase TextSearchOptions para especificar estas opciones.
Por ejemplo, la siguiente búsqueda de texto especifica la opción de idioma de búsqueda de texto al realizar una búsqueda de texto para la palabra "cafe":
collection.countDocuments( Filters.text("cafe", new TextSearchOptions().language("english")) ).subscribe(new PrintSubscriber<Long>("Text search matches (english): %s"));
Text search matches (english): [1]
Para obtener más información sobre la búsqueda de texto, consulte las siguientes secciones en el manual de MongoDB Server: