Utilice analizadores específicos para cada idioma para crear índices adaptados a él. Cada analizador incorpora palabras vacías y divisiones de palabras según los patrones de uso de ese idioma.
MongoDB Search ofrece los siguientes analizadores de lenguaje:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 cjk Es un analizador genérico de chino, japonés y coreano.
2 kuromoji es un analizador japonés
3 morfologik es un analizador polaco
4 nori es un analizador coreano
5 smartcn es un analizador chino
Ejemplos
Considere una colección llamada cars con los siguientes documentos:
{ "_id": 1, "subject": { "en": "It is better to equip our cars to understand the causes of the accident.", "fr": "Mieux équiper nos voitures pour comprendre les causes d'un accident.", "he": "עדיף לצייד את המכוניות שלנו כדי להבין את הגורמים לתאונה." } }
{ "_id": 2, "subject": { "en": "The best time to do this is immediately after you've filled up with fuel", "fr": "Le meilleur moment pour le faire c'est immédiatement après que vous aurez fait le plein de carburant.", "he": "הזמן הטוב ביותר לעשות זאת הוא מיד לאחר שמילאת דלק." } }
Ejemplo de analizador de lenguaje integrado
La siguiente definición de índice de ejemplo especifica un índice en el campo subject.fr utilizando el analizador french:
{ "mappings": { "fields": { "subject": { "fields": { "fr": { "analyzer": "lucene.french", "type": "string" } }, "type": "document" } } } }
La siguiente consulta busca la cadena pour en el campo subject.fr:
db.cars.aggregate([ { $search: { "text": { "query": "pour", "path": "subject.fr" } } }, { $project: { "_id": 0, "subject.fr": 1 } } ])
La consulta anterior no devuelve resultados al usar el analizador french, ya que pour es una palabra vacía integrada. Con el analizador standard, la misma consulta devolvería ambos documentos.
La siguiente consulta busca la cadena carburant en el campo subject.fr:
db.cars.aggregate([ { $search: { "text": { "query": "carburant", "path": "subject.fr" } } }, { $project: { "_id": 0, "subject.fr": 1 } } ])
{ subject: { fr: "Le meilleur moment pour le faire c'est immédiatement après que vous aurez fait le plein de carburant." } }
La búsqueda de MongoDB devuelve un documento con _id: 1 en los resultados porque la consulta coincidió con un token que el analizador lucene.french creó para el documento. El analizador lucene.french crea los siguientes tokens para el campo subject.fr en el documento con _id: 1:
|
|
|
|
|
|
|
|
|
Ejemplo de analizador de lenguaje personalizado
También puede crear índices para idiomas no admitidos mediante la creación de un Analizador personalizado con filtros de tokens icuFolding y stopword.
La siguiente definición de índice de ejemplo especifica un índice en el subject.he campo utilizando un analizador personalizado llamado myHebrewAnalyzer para analizar y crear tokens para texto hebreo:
{ "analyzer": "lucene.standard", "mappings": { "dynamic": false, "fields": { "subject": { "fields": { "he": { "analyzer": "myHebrewAnalyzer", "type": "string" } }, "type": "document" } } }, "analyzers": [ { "charFilters": [], "name": "myHebrewAnalyzer", "tokenFilters": [ { "type": "icuFolding" }, { "tokens": [ "אן", "שלנו", "זה", "אל" ], "type": "stopword" } ], "tokenizer": { "type": "standard" } } ] }
La siguiente consulta busca la cadena המכוניות en el campo subject.he:
db.cars.aggregate([ { $search: { "text": { "query": "המכוניות", "path": "subject.he" } } }, { $project: { "_id": 0, "subject.he": 1 } } ])
{ subject: { he: 'עדיף לצייד את המכוניות שלנו כדי להבין את הגורמים לתאונה.' } }
La búsqueda de MongoDB devuelve un documento con _id: 1 en los resultados porque la consulta coincidió con un token que el analizador myHebrewAnalyzer creó para el documento. El analizador myHebrewAnalyzer crea los siguientes tokens para el campo subject.he del documento con _id: 1:
|
|
|
|
|
|
|
|
|
Ejemplo de búsqueda multilingüe
También puede crear un índice que utilice múltiples analizadores de idiomas para realizar una búsqueda multilingüe.
El siguiente ejemplo de definición de índice especifica un índice con asignación dinámica en la sample_mflix.movies colección. La definición aplica el lucene.italian analizador de lenguaje para indexar el fullplot campo y utiliza la opción multi para especificar lucene.english como analizador de lenguaje alternativo. MongoDB Search utiliza el lucene.english analizador de lenguaje predeterminado para todos los demás campos que indexa dinámicamente en la movies colección.
{ "analyzer": "lucene.standard", "mappings": { "dynamic": true, "fields": { "fullplot": { "type": "string", "analyzer": "lucene.italian", "multi": { "fullplot_english": { "type": "string", "analyzer": "lucene.english", } } } } } }
La siguiente consulta de búsqueda de MongoDB utiliza las siguientes cláusulas de operador compuesto para consultar la colección:
mustLa cláusula busca tramas de películas en inglés e italiano que contengan el términoBellautilizando el operador de textomustNotLa cláusula excluye las películas estrenadas entre los años 1984 y 2016 utilizando el operador de rangoshouldLa cláusula especifica la preferencia por elComedygénero utilizando el operador de texto
[ { $search: { "index": "multilingual-tutorial", "compound": { "must": [{ "text": { "query": "Bella", "path": { "value": "fullplot", "multi": "fullplot_english" } } }], "mustNot": [{ "range": { "path": "released", "gt": ISODate("1984-01-01T00:00:00.000Z"), "lt": ISODate("2016-01-01T00:00:00.000Z") } }], "should": [{ "text": { "query": "Comedy", "path": "genres" } }] } } } ]
SCORE: 3.909510850906372 _id: "573a1397f29313caabce8bad" plot: "He is a revenge-obssessed stevedore whose sister was brutally raped an…" genres: 0: "Drama" runtime: 137 fullplot: "In Marseilles, a woman commits suicide after she is raped in an alley.…" released: 1983-05-18T00:00:00.000+00:00 SCORE: 3.4253346920013428 _id: "573a1396f29313caabce5735" plot: "Giovanna e' una bella ragazza, ma ha qualche problema con gli uomini: …" genres: 0: "Comedy" runtime: 100 fullplot: "Giovanna e' una bella ragazza, ma ha qualche problema con gli uomini: …" released: 1974-11-15T00:00:00.000+00:00 SCORE: 3.363344430923462 _id: "573a1395f29313caabce13cf" plot: "Gerardo è un attore o almeno cerca di esserlo, ma il pubblico non è de…" genres: 0: "Comedy" runtime: 95 fullplot: "Gerardo è un attore o almeno cerca di esserlo, ma il pubblico non è de…" released: 1960-02-10T00:00:00.000+00:00 SCORE: 1.9502882957458496 _id: "573a1396f29313caabce5299" plot: "Dr Tremayne is an enigmatic Psychiatrist running a Futuristic asylum h…" genres: 0: "Horror" runtime: 90 fullplot: "Dr Tremayne is an enigmatic Psychiatrist running a Futuristic asylum h…" released: 1973-10-31T00:00:00.000+00:00