Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

802
Views
La mejor manera de realizar una búsqueda de texto completo en MongoDB y Mongoose

Estoy buscando en Google desde hace días y probé muchas cosas, pero todavía no puedo realizar una buena búsqueda de texto completo en mi colección de usuarios.

Probé ElasticSearch pero era bastante imposible consultar y paginar...

Probé muchos complementos para Mongoose como ElMongo, mongoose-full-text, Mongoosastic, etc... todos están muy mal documentados y no sé cómo realizar una buena búsqueda de texto completo.

Entonces, mi colección es una colección normal:

 user = { name: String, email: String, profile: { something: String, somethingElse: String } }

Tengo una entrada de búsqueda en una página con un POST simple, si escribo hello world , lo que necesito es buscar en todos los campos de la colección las palabras coincidentes de mi consulta de búsqueda y obtener los resultados.

Sería muy bueno también tener opciones para manejar una paginación como 10 elementos por página o algo así...

¿Cuál es la mejor solución para lograr esto? Estoy usando MongoDB 2.6.* con Mongoose, NodeJS y ExpressJS.

Gracias.

over 4 years ago · Santiago Trujillo
2 answers
Answer question

0

Puede agregar un índice de texto a su definición de esquema Mongoose que le permite usar el operador$text en sus consultas de búsqueda para find todos los campos incluidos en el índice de texto.

Para crear un índice que admita la búsqueda de texto en, por ejemplo, name y profile.something :

 var schema = new Schema({ name: String, email: String, profile: { something: String, somethingElse: String } }); schema.index({name: 'text', 'profile.something': 'text'});

O si desea incluir todos los campos de cadena en el índice, use el comodín '$**' :

 schema.index({'$**': 'text'});

Esto le permitiría realizar una consulta de búsqueda de texto paginado como:

 MyModel.find({$text: {$search: searchString}}) .skip(20) .limit(10) .exec(function(err, docs) { ... });

Para obtener más detalles, lea la documentación completa de los índices de texto de MongoDB .

over 4 years ago · Santiago Trujillo Report

0

Esta no es una respuesta adicional sino un complemento, pero si la respuesta anterior de JohnnyHK le da una matriz vacía [] .

  1. Pruebe algo básico primero sin limit y skip

    const results = await MyModel.find({ $text: { $search: "text" } });

  2. Verifique si el índice se creó correctamente usando mongosh usando db.stories.getIndexes() o la GUI de la brújula, ambas adjuntas. De lo contrario, cree uno a través de COMPASS GUI o a través de mongosh usandodocumentos

brújula

  1. Luego intente cambiar searchText varias veces e intente.
  2. Incluso después de todo esto, me tomó 7 u 8 ejecuciones del mismo código para obtener resultados adecuados,
over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!