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" } } } }
The following MongoDB Search query searches for the string pour in the subject.fr field. To run this query, connect to your cluster using mongosh and switch to the database that contains the cars collection.
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.
The following MongoDB Search query searches for the string carburant in the subject.fr field. To run this query, connect to your cluster using mongosh and switch to the database that contains the cars collection.
db.cars.aggregate([ { $search: { "text": { "query": "carburant", "path": "subject.fr" } } }, { $project: { "_id": 0, "subject.fr": 1 } } ])
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 não suportados criando um analisador customizado 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" } } ] }
The following MongoDB Search query searches for the string המכוניות in the subject.he field. To run this query, connect to your cluster using mongosh and switch to the database that contains the cars collection.
db.cars.aggregate([ { $search: { "text": { "query": "המכוניות", "path": "subject.he" } } }, { $project: { "_id": 0, "subject.he": 1 } } ])
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", } } } } } }
The following MongoDB Search query uses the compound operator to query the collection in multiple languages. To run this query, connect to your cluster using mongosh and switch to the sample_mflix database.
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" } } } ])