Use analisadores específicos de idioma para criar índices personalizados para um idioma específico. Cada analisador de idioma tem palavras vazias e divisões de palavras integradas com base nos padrões de uso desse idioma.
O MongoDB Search oferece os seguintes analisadores de idioma:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 cjk é um analisador genérico de chinês, Japonês e Coreano
2 kuromoji é um analisador Japonês
3 morfologik é um analyzer polonês
4 nori é um analisador coreano
5 smartcn é um analisador chinês
Exemplos
Considere uma coleção denominada cars com os seguintes 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": "הזמן הטוב ביותר לעשות זאת הוא מיד לאחר שמילאת דלק." } }
Exemplo de analisador de idioma integrado
A seguinte definição de índice de exemplo especifica um índice no campo subject.fr utilizando o analisador french :
{ "mappings": { "fields": { "subject": { "fields": { "fr": { "analyzer": "lucene.french", "type": "string" } }, "type": "document" } } } }
A query do MongoDB Search a seguir procura a string pour no subject.fr campo. Para executar esta query, conecte-se ao seu cluster usando o e alterne mongosh para o banco de dados que contém a cars coleção.
db.cars.aggregate([ { $search: { "text": { "query": "pour", "path": "subject.fr" } } }, { $project: { "_id": 0, "subject.fr": 1 } } ])
A query anterior não retorna resultados ao usar o analisador french , pois pour é uma palavra vazia embutida. Usando o analisador standard , a mesma query retornaria os dois documentos.
A query do MongoDB Search a seguir procura a string carburant no subject.fr campo. Para executar esta query, conecte-se ao seu cluster usando e alterne para o banco de dados que contém mongosh a cars coleção.
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." } }
A pesquisa do MongoDB retorna um documento com _id: 1 nos resultados porque a query correspondeu a um token que o analisador lucene.french criou para o documento. O analisador lucene.french cria os seguintes tokens para o campo subject.fr no documento com _id: 1:
|
|
|
|
|
|
|
|
|
Exemplo de analisador de idioma personalizado
Você também pode criar índices para idiomas sem suporte criando um analisador personalizado com os filtros de token icuFolding e stopword.
O exemplo de definição de índice a seguir especifica um índice no campo subject.he usando um analisador personalizado chamado myHebrewAnalyzer para analisar e criar tokens para texto hebraico:
{ "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" } } ] }
A query do MongoDB Search a seguir procura a string המכוניות no subject.he campo. Para executar esta query, conecte-se ao seu cluster usando e alterne para o banco de dados que contém mongosh a cars coleção.
db.cars.aggregate([ { $search: { "text": { "query": "המכוניות", "path": "subject.he" } } }, { $project: { "_id": 0, "subject.he": 1 } } ])
{ subject: { he: 'עדיף לצייד את המכוניות שלנו כדי להבין את הגורמים לתאונה.' } }
O MongoDB Search retorna um documento com _id: 1 nos resultados porque a query correspondeu a um token que o analisador myHebrewAnalyzer criou para o documento. O analisador myHebrewAnalyzer cria os seguintes tokens para o campo subject.he no documento com _id: 1:
|
|
|
|
|
|
|
|
|
Exemplo de pesquisa multilíngue
Você também pode criar um índice que usa vários analisadores de linguagem para executar uma pesquisa multilíngue.
A seguinte definição de índice de exemplo especifica um índice com mapeamento dinâmico na coleção sample_mflix.movies. A definição aplica o analisador de idioma lucene.italian para indexar o campo fullplot e usa a opção multi para especificar lucene.english como um analisador de idioma alternativo. O MongoDB Search usa o analisador de idioma lucene.english padrão para todos os outros campos que ele indexa dinamicamente na coleção movies.
{ "analyzer": "lucene.standard", "mappings": { "dynamic": true, "fields": { "fullplot": { "type": "string", "analyzer": "lucene.italian", "multi": { "fullplot_english": { "type": "string", "analyzer": "lucene.english", } } } } } }
A query do MongoDB Search a seguir usa o operador composto para consultar a collection em vários idiomas. Para executar esta query, conecte-se ao seu cluster usando e alterne para mongosh o sample_mflix banco de dados.
O operador composto contém as seguintes cláusulas:
mustcláusula pesquisa tramas de filmes em inglês e italiano que contêm o termoBellausando o operador de textomustNotcláusula exclui filmes lançados entre os anos 1984 a 2016 usando o operador de intervaloshouldcláusula especifica preferência pelo gêneroComedyusando o operador de texto
db.movies.aggregate([ { $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" } }] } } }, { $project: { "_id": 0, "title": 1, "plot": 1, "genres": 1, "runtime": 1, "fullplot": 1, "released": 1, "score": { "$meta": "searchScore" } } } ])
[ { plot: "Giovanna e' una bella ragazza, ma ha qualche problema con gli uomini: tutti la vogliono solo usare, anche il suo fidanzata Claudio. Trovera' una via d'uscita diventando vigile urbano. Come ...", genres: [ 'Comedy' ], runtime: 100, title: 'Policewoman', fullplot: "Giovanna e' una bella ragazza, ma ha qualche problema con gli uomini: tutti la vogliono solo usare, anche il suo fidanzata Claudio. Trovera' una via d'uscita diventando vigile urbano. Come Giovanna d'Arco, il suo idolo, non guardera' in faccia a nessuno e con l'aiuto del pretore Patane', innamorato di lei, smascherera' una serie di intrallazzi e corruzione denunciando perfino il suo capo, Marcellini. I due paladini della giustizia coroneranno il loro sogno d'amore, trasferiti in una lontana isoletta a sud della Sicilia, ma i corrotti resteranno al loro posto.", released: ISODate('1974-11-15T00:00:00.000Z'), score: 3.4109344482421875 }, { plot: `Gerardo è un attore o almeno cerca di esserlo, ma il pubblico non è del suo parere. Cosè, per arrotondare gli introiti, aiuta l'amico Lallo in un suo "lavoretto". Questo gli costa perè la ...`, genres: [ 'Comedy' ], runtime: 95, title: 'Love and Larceny', fullplot: `Gerardo è un attore o almeno cerca di esserlo, ma il pubblico non è del suo parere. Cosè, per arrotondare gli introiti, aiuta l'amico Lallo in un suo "lavoretto". Questo gli costa perè la prigione, dove incontra Chinotto e Gloria Patri. Uscito inizia, con l'opposizione di Annalisa che lo vuole sposare, una carriera come truffatore, dapprima in societè con Chinotto e quindi con la bella Elena. Tutto sembra filare a gonfie vele, e le truffe divengono sempre piè grosse e di successo. Ma a volte è destino che il ragno resti preso dalla stessa tela che tesse.`, released: ISODate('1960-02-10T00:00:00.000Z'), score: 3.3489856719970703 }, { plot: 'He is a revenge-obssessed stevedore... She is a wealthy, elusive woman. They try hard to get together... or do they?', genres: [ 'Drama' ], runtime: 137, title: 'The Moon in the Gutter', fullplot: "Nightly, Gerard broods in an alley hoping to catch his sister's attacker. He lives with his lover Bella whom he neglects, an alcoholic brother who lurks about, and his father who's stayed drunk since the daughter's death, ignoring work and his own companion. At a seedy bar, Gerard meets a wealthy, nihilistic hedonist and his beautiful sister. Gerard flips for her and thinks she's his ticket out of the slum...", released: ISODate('1983-05-18T00:00:00.000Z'), score: 3.2985665798187256 }, { plot: 'Dr Tremayne is an enigmatic Psychiatrist running a Futuristic asylum housing four very special cases. Visited by colleague Nicholas, Tremayne explains his amazing and controversial theories...', genres: [ 'Horror' ], runtime: 90, title: 'Tales That Witness Madness', fullplot: "Dr Tremayne is an enigmatic Psychiatrist running a Futuristic asylum housing four very special cases. Visited by colleague Nicholas, Tremayne explains his amazing and controversial theories as to why each of the four patients went mad... cue four distinct tales each with a different set of characters: 'Mr Tiger' tells of Paul, the sensitive and troubled young son of prosperous but constantly bickering and unlovely parents, and the boy's 'imaginary' friend, a tiger. 'Penny Farthing' tells of Timothy, an antique store owner propelled backwards in time by a penny-farthing bicycle in his shop, all the while being watched over by the constantly changing photograph of Uncle Albert, which endangers the lives of both Timothy and his beautiful wife, Ann. 'Mel' tells of Brian, a man who brings home an old dead tree and prominently displays it in his living room as a work of art. His fiery wife Bella soon becomes jealous of the tree, which the husband has lovingly named Mel, and it seems to be developing a will of its own. 'Luau' tells of Auriol, a flamboyant and ambitious literary agent who will do anything to impress her sinister new client, though he seems more interested in Auriol's beautiful and precocious young daughter Ginny. Ginny sneaks off on holiday while Auriol plans a sumptuous feast for her client.", released: ISODate('1973-10-31T00:00:00.000Z'), score: 1.9504895210266113 } ]