MongoDB Búsqueda de texto completo

La búsqueda de texto completo crea un índice para cada palabra, indicando el número de veces y la posición de la palabra en el artículo. Cuando el usuario realiza una consulta, el programa de búsqueda busca según el índice preestablecido y devuelve los resultados al usuario.

Este proceso es similar al de buscar caracteres en la tabla de índices de un diccionario.

MongoDB admite la búsqueda de texto completo desde la versión 2.4. Actualmente admite índices de texto completo para 15 idiomas.

  • danish
  • dutch
  • english
  • finnish
  • french
  • german
  • hungarian
  • italian
  • norwegian
  • portuguese
  • romanian
  • russian
  • spanish
  • swedish
  • turkish

Habilitar la búsqueda de texto completo

MongoDB tiene la búsqueda de texto completo habilitada por defecto desde la versión 2.6. Si usas una versión anterior, necesitas usar el siguiente código para habilitarla:

>db.adminCommand({setParameter:true,textSearchEnabled:true})

O usar el comando:

mongod --setParameter textSearchEnabled=true

Crear un índice de texto completo

Considera los siguientes datos de documentos de la colección posts, que contienen el contenido del artículo (post_text) y las etiquetas (tags):

{
   "post_text": "enjoy the mongodb articles on Ejemplo",
   "tags": [
      "mongodb",
      "ejemplo"
   ]
}

Podemos crear un índice de texto completo en el campo post_text, así podemos buscar el contenido del artículo:

>db.posts.ensureIndex({post_text:"text"})

Usar un índice de texto completo

Ahora que hemos creado un índice de texto completo en post_text, podemos buscar la palabra clave ejemplo en el artículo:

>db.posts.find({$text:{$search:"ejemplo"}})

El siguiente comando devuelve los datos de documentos que contienen la palabra clave ejemplo:

{ 
   "_id" : ObjectId("53493d14d852429c10000002"), 
   "post_text" : "enjoy the mongodb articles on Ejemplo", 
   "tags" : [ "mongodb", "ejemplo" ]
}

Si usas una versión anterior de MongoDB, puedes usar el siguiente comando:

>db.posts.runCommand("text",{search:"ejemplo"})

El uso de índices de texto completo puede mejorar la eficiencia de búsqueda.


Eliminar un índice de texto completo

Para eliminar un índice de texto completo existente, puedes usar el comando find para buscar el nombre del índice:

>db.posts.getIndexes()

Obtén el nombre del índice con el comando anterior. En este ejemplo, el nombre del índice es post_text_text. Ejecuta el siguiente comando para eliminar el índice:

>db.posts.dropIndex("post_text_text")
Otras extensiones