Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /

Ejecutar una consulta de texto

En esta guía, puedes aprender a utilizar Mongoid para ejecutar una búsqueda de texto. Una query de texto permite consultar de manera eficiente campos que contienen valores de tipo string.

MongoDB proporciona índices de texto para admitir queries de texto en campos que tienen valores de string o valores que son arreglos de elementos de string. Para obtener más información sobre los índices de texto, consulte Índices de texto en implementaciones autogestionadas en el manual del servidor.

Nota

MongoDB búsqueda

Esta guía se centra en las consultas de texto. Si su base de datos está alojada en MongoDB Atlas, puede usar la función de búsqueda de MongoDB para realizar búsquedas de texto completo más potentes y flexibles. Para obtener más información sobre la búsqueda de MongoDB, consulte la descripción general de la búsqueda de MongoDB en la documentación de Atlas.

Puedes realizar una consulta de texto realizando los siguientes pasos:

  1. Definir un índice de texto en un modelo.

  2. Crear el índice de texto en la colección de destino.

  3. Realiza una query de texto.

Las siguientes secciones describen cómo realizar cada una de estas acciones.

Usa el index macro para especificar el índice de texto en la definición de tu modelo. El siguiente código crea una clase de modelo Dish que incluye un índice de texto en el campo description:

class Dish
include Mongoid::Document
field :name, type: String
field :description, type: String
index description: 'text'
end

Nota

Debe especificar el tipo de índice como una cadena, como se muestra con 'text' en el código anterior.

A continuación, debe crear el índice de texto en su colección. Puedes crear el índice usando una interfaz como la interfaz de usuario de Atlas o Compass. Si está utilizando el framework Rails para desarrollar su aplicación, puede ejecutar la siguiente tarea Rake para crear el índice según la especificación de su modelo:

bundle exec rake db:mongoid:create_indexes

Para obtener más información sobre el uso de índices con Mongoid, consulte el Guíade índices para la optimización de consultas.

Para realizar una query de texto, utiliza el operador del query de evaluación $text, seguido del campo $search en tu filtro de query. El operador $text realiza una consulta de texto en los campos indexados de texto. El campo $search especifica el texto a buscar en los campos indexados de texto. Para obtener más información sobre este operador, consulta la Referencia de texto en el manual del Servidor.

Para buscar un término, especifica el término como un string en tu filtro de query. Para buscar varios términos, separa cada término con espacios en la string.

Nota

Búsqueda de múltiples términos

Al buscar varios términos, Mongoid retorna documentos que tienen al menos uno de los términos en campos indexados por texto.

Suponga que realiza la búsqueda utilizando la string 'cake coffee cream'. La siguiente lista describe los valores que coinciden con esta consulta de texto:

  • 'Has strong coffee notes.'

  • 'Good for creamy coffee fans.'

  • 'A rich but light cake.'

  • 'A creamy coffee cake with cranberries.'

El siguiente ejemplo ejecuta una query de texto para description valores que contienen el término 'herb':

Dish.where('$text' => {'$search' => 'herb'})
# Sample output
{"_id":"...","description":"A bright, herb-based salad. A perfect starter for vegetarians and vegans.","name":"Kale Tabbouleh"}
{"_id":"...","description":"Grilled whole fish stuffed with herbs and pomegranate seeds. Serves 3-4.","name":"Herbed Whole Branzino"}

Tip

Aunque el término de búsqueda fue 'herb', el método también coincide con descripciones que contienen 'herbs' porque un índice de texto MongoDB utiliza sufijos de troncamiento para emparejar palabras similares. Para obtener más información sobre cómo MongoDB compara términos, consulta Propiedades del índice de texto en la {+server-manual}.

Para buscar una frase, especifique la frase con comillas escapadas como una string en su filtro de consulta. Si no agregas comillas escapadas alrededor de la frase, Mongoid ejecuta una búsqueda de términos.

Tip

Las comillas escapadas son un carácter de barra invertida (\) seguido de un carácter de comillas double (").

El siguiente ejemplo ejecuta una query de texto para los valores description que contienen la frase "serves 2":

Dish.where('$text' => {'$search' => "\"serves 2\""})
# Sample output
{"_id":"...","description":"A vegetarian take on the classic dish that uses lentils as a base. Serves 2.","name":"Shepherd’s Pie"}
{"_id":"...","description":"Baked trout seasoned with garlic, lemon, dill, and, of course, butter. Serves 2.","name":"Garlic Butter Trout"}

Para cada término o frase que desees excluir de tu consulta de texto, especifica el término o frase anteponiendo un signo menos (-) como string en tu filtro de query.

Importante

Debe buscar al menos un término para excluir términos de su búsqueda. Si no buscas ningún término, Mongoid no devuelve ningún documento.

El siguiente ejemplo ejecuta una consulta de texto para description valores que contienen el término 'vegan', pero no contienen el término 'tofu':

Dish.where('$text' => {'$search' => 'vegan -tofu'})
# Sample output
{"_id":"...","description":"A bright, herb-based salad. A perfect starter for vegetarians and vegans.","name":"Kale Tabbouleh"}

Para obtener más información sobre cómo construir filtros de query, consulta Especificar una query de documentos.

Para obtener más información sobre cómo realizar operaciones CRUD, consulte la guía de operaciones CRUD.

Volver

Modificar resultados de queries

En esta página