Puedes crear un índice de texto para mejorar el rendimiento de las consultas de búsqueda de texto realizadas en una colección que contiene documentos o documentos incrustados con texto en varios idiomas.
Si una colección contiene documentos o documentos incrustados que están en varios idiomas diferentes, incluya un campo llamado language y especifica el lenguaje de esos documentos como el valor del campo. Para ver los idiomas disponibles para la indexación de texto, consulte Idiomas de búsqueda de texto en implementaciones autogestionadas.
Tu operación de inserción debe parecerse a este ejemplo para admitir la indexación de texto para varios idiomas:
db.<collection>.insertOne( { <field>: <value>, language: <language> } )
Antes de comenzar
Crea una colección quotes que contenga documentos multilingües que incluyan el campo language:
db.quotes.insertMany( [ { _id: 1, language: "portuguese", original: "A sorte protege os audazes.", translation: [ { language: "english", quote: "Fortune favors the bold." }, { language: "spanish", quote: "La suerte protege a los audaces." } ] }, { _id: 2, language: "spanish", original: "Nada hay más surrealista que la realidad.", translation: [ { language: "english", quote: "There is nothing more surreal than reality." }, { language: "french", quote: "Il n'y a rien de plus surréaliste que la réalité." } ] }, { _id: 3, original: "Is this a dagger which I see before me?", translation: { language: "spanish", quote: "Es este un puñal que veo delante de mí." } } ] )
Procedimiento
La siguiente operación crea un índice de texto en los campos original y translation.quote:
db.quotes.createIndex({ original: "text", "translation.quote": "text", "default_language" : "fr" })
Nota
Inglés es el lenguaje por defecto para los índices. Si no se especifica el default_lenguaje, la query debe especificar el lenguaje con el parámetro $lenguaje. Para obtener más información, consulta Especificar lenguaje para índices de texto en MongoDB autogestionado.
Resultados
El índice resultante admite consultas de búsqueda de texto para los documentos y documentos incrustados que contienen los campos original y translation.quote. El índice de texto sigue diferentes reglas de derivación de sufijos e ignora las palabras vacías específicas de cada lenguaje, según el valor en el campo language.
Por ejemplo, la siguiente query busca la palabra french réalité.
db.quotes.find( { $text: { $search: "réalité" } } )
Salida:
[ { _id: 2, language: 'spanish', original: 'Nada hay más surrealista que la realidad.', translation: [ { language: 'english', quote: 'There is nothing more surreal than reality.' }, { language: 'french', quote: "Il n'y a rien de plus surréaliste que la réalité." } ] } ]
Para los documentos incrustados que no contienen el campo language,
Si el documento que lo contiene tiene el campo
language, entonces el índice utiliza el lenguaje del documento para los documentos incrustados.De lo contrario, el índice utiliza el idioma predeterminado para los documentos incrustados.
Para los documentos que no contienen el campo language, el índice emplea el lenguaje por defecto, que es el inglés.
Obtén más información
Para especificar el idioma del índice de texto en un campo que no sea
language, consulte Especificar el idioma del índice de texto en despliegues autogestionados.Para aprender a especificar el idioma predeterminado para un índice de texto, consulta Especificar idioma para los índices de texto en MongoDB autoadministrado.
Para obtener más información sobre otras propiedades del índice de texto, consulta Propiedades de índice de texto en implementaciones autogestionadas.