MongoDB admite operaciones de consulta que realizan una query de texto en el contenido de cadenas dentro de documentos. Para ejecutar una query de texto, MongoDB utiliza un índice de texto y el $text operador del query.
Para aprender más sobre otras opciones de búsqueda de texto, como la búsqueda de texto completo y la búsqueda vectorial, consulta la Búsqueda de texto resumen en el manual de MongoDB Server.
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 en esta guía:
Una colección
test.restaurantscon documentos provenientes del archivorestaurants.jsonen el repositorio de activos de documentación en 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 personalizadas de Subscriber, 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 de MongoDatabase y MongoCollection.
El código siguiente se conecta a una implementación autónoma 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 aprender más sobre cómo conectar implementaciones de MongoDB, consulta el tutorial Conectar a MongoDB.
Crear el índice de texto
Para crear un índice de texto, utiliza el asistente estático Indexes.text() para crear una especificación para un índice de texto y pasa 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 query de texto, utilice el método asistente Filters.text() para especificar el filtro de query 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 query de texto asigna una puntuación que representa la relevancia de un documento respecto al filtro de query especificado. Para devolver y ordenar 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 query de texto.
El asistente Filters.text() puede aceptar varias opciones de query 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 aprender más sobre las consultas de texto, consulte las siguientes secciones en el manual de MongoDB Server: