Utiliza analizadores específicos del lenguaje para crear índices adaptados a un lenguaje particular. Cada analizador de idioma tiene funcionalidad incorporada de palabras vacías y divisiones de palabras basadas en los patrones de uso de ese idioma.
MongoDB Search ofrece los siguientes analizadores de lenguaje:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 cjk es un analizador genérico 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 con funcionalidad incorporada
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 string 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 ningún resultado al utilizar el analizador french, porque pour es una palabra vacía incorporada. Usando el analizador standard, la misma query devolvería ambos documentos.
La siguiente consulta busca la string 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." } }
MongoDB Search devuelve un documento con _id: 1 en los resultados porque la query 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 puedes crear índices para idiomas no admitidos creando un analizador personalizado con los 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 string המכוניות en el campo subject.he:
db.cars.aggregate([ { $search: { "text": { "query": "המכוניות", "path": "subject.he" } } }, { $project: { "_id": 0, "subject.he": 1 } } ])
{ subject: { he: 'עדיף לצייד את המכוניות שלנו כדי להבין את הגורמים לתאונה.' } }
MongoDB Search devuelve un documento con _id: 1 en los resultados porque la query coincidió con un token que el analizador myHebrewAnalyzer creó para el documento. El analizador myHebrewAnalyzer crea los siguientes tokens para el campo subject.he en el documento con _id: 1:
|
|
|
|
|
|
|
|
|
Ejemplo de búsqueda multilingüe
También puedes crear un índice que utilice múltiples analizadores de idioma para realizar una búsqueda multilingüe.
La siguiente definición de índice de ejemplo especifica un índice con mapeo dinámico en la colección sample_mflix.movies. La definición aplica el analizador de lenguaje lucene.italian para indexar el campo fullplot, y usa la opción multi para especificar lucene.english como un analizador de lenguaje alternativo. MongoDB Search utiliza el analizador de lenguaje por defecto lucene.english para todos los demás campos que indexa dinámicamente en la colección movies.
{ "analyzer": "lucene.standard", "mappings": { "dynamic": true, "fields": { "fullplot": { "type": "string", "analyzer": "lucene.italian", "multi": { "fullplot_english": { "type": "string", "analyzer": "lucene.english", } } } } } }
La siguiente query de búsqueda MongoDB utiliza las siguientes cláusulas del operador compuesto para consultar la colección:
mustla cláusula busca argumentos 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