Overview
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:
Definir un índice de texto en un modelo.
Crear el índice de texto en la colección de destino.
Realiza una query de texto.
Las siguientes secciones describen cómo realizar cada una de estas acciones.
Definir un índice de texto en tu modelo
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.
Crear el índice de texto
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.
Realizar consultas de texto
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.
Buscar por un término
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}.
Búsqueda por una frase
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"}
Buscar con términos excluidos
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"}
Información Adicional
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.