Estoy buscando en Google ya que los días y he intentado muchas cosas pero todavía no se puede realizar una buena búsqueda de texto completo en mi colección de usuario.

Traté de ElasticSearch pero era bastante imposible de consulta y paginas…

He probado muchos plugins para Mangosta como ElMongo, mangosta-texto completo, Mongoosastic, etc… todo el mundo está muy mal documentado y no sé cómo realizar una buena búsqueda de texto completo.

Así, 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 simple POST, si escribo hello world lo que necesito es buscar en toda la colección de campos de la coincidencia de las palabras de mi consulta de búsqueda y obtener los resultados.

Que va a ser muy bueno también tener opciones para manejar una paginación como 10 elementos por página o algo…

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

Gracias.

InformationsquelleAutor Ayeye Brazo | 2015-02-27

2 Comentarios

  1. 129

    Puede agregar un índice de texto a su Mangosta definición de esquema que permite utilizar el $texto operador en su find consultas para buscar en todos los campos incluidos en el índice de texto.

    Para crear un índice para apoyar la búsqueda de texto en, digamos, 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, utilice el '$**' comodín:

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

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

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

    Para más detalles, lea el pleno MongoDB Los Índices De Texto documentación.

    • Gracias por tu respuesta. No baja la MongoDB rendimiento haciendo esto? Una pregunta más, por favor: ¿puedo elegir los campos de índice?
    • He actualizado el anser para mostrar cómo elegir los campos de índice. La adición de cualquier índice aumenta la sobrecarga durante inserciones y actualizaciones, así como los requisitos de almacenamiento, por lo que siempre debe ser considerada.
    • después de una larga búsqueda, su respuesta es el rey!
    • Hay posibilidad de hacer «wordA Y wordB» búsqueda? Y de búsqueda de la parte de las palabras?
    • verificar docs.mongodb.com/manual/reference/operator/query/text/… para el caso sensibles de búsqueda
  2. -20

    Para la consulta de búsqueda que usted puede utilizar Elasticsearch plugin. En Elasticsearch usted puede hacer su propia búsqueda personalizada de consulta para la búsqueda de cualquier texto en particular y de la cadena con la duración de tiempo especificado en el tiempo real.

    Pero antes de que usted tiene que hacer indexación de su json docs que residen en MongoDB. Usted tiene que conectar MongoDB con Elasticsearch servidor.a continuación, utilizando el río de la funcionalidad de Elasticsearch que tiene que hacer la indexación en Elasticsearch servidor de datos, entonces sólo usted puede hacer su consulta personalizada para la búsqueda.

Dejar respuesta

Please enter your comment!
Please enter your name here