A Voyage AI se une ao MongoDB para impulsionar aplicativos de AI mais precisos e confiáveis no Atlas.

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 .

Desenvolvedor do MongoDB
Centro de desenvolvedores do MongoDB
chevron-right
Produtos
chevron-right
Atlas
chevron-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

Adicione memória ao seu aplicativo JavaScript RAG usando MongoDB e LangChain


Sep 18, 2024 | 9 min read
Tutorial

Como escolher a estratégia de chunking certa para seu aplicativo LLM


Jun 17, 2024 | 16 min read
Tutorial

MongoDB Charts incorporando SDK com React


Sep 09, 2024 | 5 min read
Tutorial

Crie uma Cocktail API com o Beanie e o MongoDB


Oct 01, 2024 | 6 min read
Sumário
  • 1. Campo Único