Overview
En esta guía, aprenderá a usar Mongoid para realizar búsquedas de texto. Una consulta de texto le permite consultar eficientemente campos con valores de cadena.
MongoDB proporciona índices de texto para admitir consultas de texto en campos que contienen valores de cadena o valores que son matrices de elementos de cadena. Para obtener más información sobre los índices de texto, consulte Índices de texto sobre implementaciones autoadministradas 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.
Crea 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.
Defina un índice de texto en su modelo
Uso el index Macro para especificar el índice de texto en la definición del 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. Puede crearlo mediante una interfaz como Atlas UI o Compass. Si utiliza el framework Rails para desarrollar su aplicación, puede ejecutar la siguiente tarea de 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 GuíaOptimizar consultas con índices.
Realizar consultas de texto
Para realizar una consulta de texto, utilice el $text operador de consulta de evaluación, seguido del $search campo en su filtro de consulta. El $text operador realiza una consulta de texto en los campos indexados. El $search campo especifica el texto que se buscará en dichos campos. Para obtener más información sobre este operador, consulte la referencia de $text en el manual del servidor.
Buscar por un término
Para buscar un término, especifíquelo como una cadena en el filtro de consulta. Para buscar varios términos, sepárelos con espacios en la cadena.
Nota
Búsqueda de múltiples términos
Al buscar múltiples términos, Mongoid devuelve documentos con al menos uno de los términos en campos de texto indexados.
Supongamos que busca usando la cadena '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 consulta 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 'herb' fue, el método también coincide con las descripciones que contienen,'herbs' ya que un índice de texto de MongoDB utiliza la lematización de sufijos para encontrar palabras similares. Para obtener más información sobre cómo MongoDB coincide con los términos, consulte Propiedades del índice de texto en el {+server-manual}.
Buscar por frase
Para buscar una frase, especifíquela entre comillas de escape como una cadena en su filtro de consulta. Si no la encierra entre comillas, Mongoid realizará una búsqueda por término.
Tip
Las comillas escapadas son un carácter de barra invertida (\) seguido de un carácter de comillas dobles (").
El siguiente ejemplo ejecuta una consulta de texto para 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"}
Búsqueda 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 otros términos de su búsqueda. Si no busca 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 consulta, consulte Especificar una consulta de documento.
Para obtener más información sobre cómo realizar operaciones CRUD, consulta la guía Realiza operaciones de datos.