Explore o novo chatbot do Developer Center! O MongoDB AI chatbot pode ser acessado na parte superior da sua navegação para responder a todas as suas perguntas sobre o MongoDB .

Learn why MongoDB was selected as a leader in the 2024 Gartner® Magic Quadrant™
Desenvolvedor do MongoDB
Central de desenvolvedor do MongoDBchevron-right
Produtoschevron-right
Atlaschevron-right

Modelagem de dados em várias linguagens do Atlas Search

Ethan Steininger, Harshad Dhavale2 min read • Published Sep 07, 2022 • Updated Sep 09, 2022
AtlasPesquisa
Ícone do FacebookÍcone do Twitterícone do linkedin
Avalie esse Tutorial
star-empty
star-empty
star-empty
star-empty
star-empty
Vivemos numa economia cada vez mais globalizada. Por extensão, os usuários esperam que nossos aplicativos entendam o contexto de sua cultura e, por extensão, seu idioma.
Felizmente, a maioria dos mecanismos de busca – incluindo o Atlas Search – oferece suporte a várias linguagens. Este artigo abordará três opções de padrões de query, modelos de dados e definições de índice para atender às suas diversas necessidades de aplicativos multilíngues.
Para ilustrar as opções, criaremos um cenário fictício. Gerenciamos um aplicativo de pesquisa de receitas que oferece suporte a três países, e, por extensão, três idiomas: inglês, chinês (Kuromoji) e alemão. Nossos usuários estão localizados em todo o mundo e precisam pesquisar receitas no idioma nativo.

1. Campo Único

Temos um documento para cada linguagem na mesma coleção e, portanto, cada campo é indexado separadamente como sua própria linguagem. Isso simplifica os padrões de query e a UX às custas do armazenamento de índice inchado.
Documento:
1[
2 {"name":"すし"},
3 {"name":"Fish and Chips"},
4 {"name":"Käsespätzle"}
5]
Índice:
1{
2 "name":"recipes",
3 "mappings": {
4 "dynamic": false,
5 "fields": {
6 "name": {
7 "type": "string",
8 "analyzer": "lucene.kuromoji"
9 },
10 "name": {
11 "type": "string",
12 "analyzer": "lucene.english"
13 },
14 "name": {
15 "type": "string",
16 "analyzer": "lucene.german"
17 }
18 }
19 }
20}
Query:
1{
2 "$search": {
3 "index": "recipes",
4 "text": {
5 "query": "Fish and Chips",
6 "path": "name"
7 }
8 }
9}
Prós:
  • Uma única definição de índice.
  • Não é necessário especificar o nome ou caminho do índice com base no idioma do usuário.
  • Pode aceitar vários idiomas em uma única query.
Contras:
  • À medida que mais campos são adicionados, a definição do índice precisa mudar.
  • A carga útil da definição do índice é potencialmente muito grande (mapeamento de campo estático por idioma).
  • Campos de indexação como idiomas irrelevantes causam um tamanho de índice maior do que o necessário.

2. Múltiplas coleções

Temos uma coleção e um índice por idioma, o que nos permite isolar os diferentes idiomas das receitas. Isso pode ser útil se tivermos mais receitas em alguns idiomas do que em outros, às custas de muitas coleções e índices.
Documentos:
1recipes_jp:
2[{"name":"すし"}]
3
4recipes_en:
5[{"name":"Fish and Chips"}]
6
7recipes_de:
8[{"name":"Käsespätzle"}]
Índice:
1{
2 "name":"recipes_jp",
3 "mappings": {
4 "dynamic": false,
5 "fields": {
6 "name": {
7 "type": "string",
8 "analyzer": "lucene.kuromoji"
9 }
10 }
11 }
12}
13
14{
15 "name":"recipes_en",
16 "mappings": {
17 "dynamic": false,
18 "fields": {
19 "name": {
20 "type": "string",
21 "analyzer": "lucene.english"
22 }
23 }
24 }
25}
26
27{
28 "name":"recipes_de",
29 "mappings": {
30 "dynamic": false,
31 "fields": {
32 "name": {
33 "type": "string",
34 "analyzer": "lucene.german"
35 }
36 }
37 }
38}
Query:
1{
2 "$search": {
3 "index": "recipes_jp"
4 "text": {
5 "query": "すし",
6 "path": "name"
7 }
8 }
9}
Prós:
  • Pode copiar a mesma definição de índice para cada coleção (substituindo o idioma).
  • Isolar documentos de linguagens diferentes.
Contras:
  • Os desenvolvedores precisam fornecer antecipadamente o nome da linguagem no caminho do índice.
  • Necessidade de copiar documentos entre coleções na atualização.
  • Cada índice é um cursor de fluxo de alterações, portanto, sua manutenção pode ser cara.

3. Vários campos

Ao incorporar cada idioma em um campo pai, podemos colocalizar as traduções de cada receita em cada documento.
Documento:
1{
2 "name": {
3 "en":"Fish and Chips",
4 "jp":"すし",
5 "de":"Käsespätzle"
6 }
7}
Índice:
1{
2 "name":"multi_language_names",
3  "mappings": {
4    "dynamic": false,
5    "fields": {
6      "name": {
7        "fields": {
8          "de": {
9            "analyzer": "lucene.german",
10            "type": "string"
11          },
12          "en": {
13            "analyzer": "lucene.english",
14            "type": "string"
15          },
16          "jp": {
17            "analyzer": "lucene.kuromoji",
18            "type": "string"
19          }
20        },
21        "type": "document"
22      }
23    }
24  }
25}
Query:
1{
2 "$search": {
3 "index": "multi_language_names"
4 "text": {
5 "query": "Fish and Chips",
6 "path": "name.en"
7 }
8 }
9}
Prós:
  • Mais fácil gerenciar documentos.
  • A definição do índice é esparsa.
Contras:
  • A carga útil da definição do índice é potencialmente muito grande (mapeamento de campo estático por idioma).
  • Query e UX mais complexas.

Ícone do FacebookÍcone do Twitterícone do linkedin
Avalie esse Tutorial
star-empty
star-empty
star-empty
star-empty
star-empty
Relacionado
Tutorial

Usar a OpenAI e o MongoDB Atlas para melhorar a funcionalidade de pesquisa


Sep 18, 2024 | 5 min read
Tutorial

Como implementar fluxos de trabalho do Databricks e o Atlas Vector Search para melhorar a precisão da pesquisa de comércio eletrônico


Sep 18, 2024 | 6 min read
Tutorial

Impressione-se: sinônimos no Atlas Search


Feb 27, 2023 | 9 min read
Artigo

Ouça o Scale Up com os serviços de aplicativos do Atlas


Sep 09, 2024 | 3 min read
Sumário
  • 1. Campo Único