Analisando analyzers para criar o índice correto do Atlas Search para seu aplicativo
Avalie esse Tutorial
“Why am I not getting the right search results?”
Então, você criou sua primeira query de pesquisa. Você está familiarizado com vários operadores do Atlas Search. Você pode até já ter tocado com modificadores de pontuação para classificar seus resultados de pesquisa. No entanto, digitar nessa grande e bonita barra de pesquisa ainda não está gerando os resultados que você espera dos seus dados. Bem, pode ser apenas a sua definição de índice de pesquisa. Ou, mais especificamente, seu analyzer.
Você pode saber que os analisadores Lucene são importantes - mas por que? Como eles funcionam? Como você escolhe o caminho certo? Se este é você, não se preocupe. Neste tutorial, analisaremos analisadores — mais especificamente, os índices do Atlas Search e os analisadores Lucene usados para construí-los. Definiremos o que eles são exatamente e como trabalham juntos para oferecer os melhores resultados para suas consultas de pesquisa.
Espere explorar as seguintes questões:
- O que é um índice de pesquisa e como ele difere de um índice tradicional do MongoDB?
- O que é um analisador? Que tipos de analisadores estão integrados ao Atlas Search e como eles se comparam para afetar os resultados da sua pesquisa?
- Como você pode criar um índice do Atlas Search usando diferentes analisadores de pesquisa?
Ofereceremos até uma ferramenta da webbacana como um recurso para demonstrar uma variedade de casos de uso diferentes com analisadores e permitir que você teste sua própria amostra.
Ao final, curado da paralisia da análise de pesquisa, você terá a confiança e o conhecimento necessários para escolher os analisadores certos para criar o melhor índice do Atlas Search para sua aplicação.
Então, o que é um índice? Geralmente, os índices são estruturas de dados especiais que permitem consultas e recuperação ultrarrápidas de documentos com base em determinados identificadores.
Cada query do Atlas Search exige um índice de pesquisa. Na verdade, é a primeira linha de cada query do Atlas Search.
Se você não vir um escrito explicitamente, a query usará o índice de pesquisa padrão. Enquanto um índice típico do MongoDB é um índice b-tree, o Atlas Search usa índices invertidos, que são muito mais rápidos, flexíveis e mais poderosos para texto.
Vamos explorar as diferenças percorrendo um exemplo. Digamos que temos um conjunto de documentos do MongoDB que se parecem com isto:
Cada documento tem um campo "_id " como identificador exclusivo para cada documento MongoDB e o campo "s " de texto. O MongoDB utiliza o campo _id para criar o índice padrão único da coleção. Os desenvolvedores também podem criar outros índices MongoDB específicos para as necessidades de queryde seu aplicativo.
Se procurarmos o texto nos campos de frase desses documentos:
"It was the best of times, it was the worst of times." - Um Conto de Duas Cidades, Charles Dickens
O Atlas Search dividiria esses dados de texto nesses sete termos individuais para nosso índice invertido:
ele - foi - o - melhor - dos - tempos - pior
Em seguida, o Atlas Search mapearia esses termos de volta para os campos _id dos documentos originais do MongoDB, conforme mostrado abaixo. A palavra "it " pode ser encontrada no documento com _id 4. Encontre "the " em documentos 2, 3, 4, etc.
Essencialmente, um índice invertido é um mapeamento entre termos e quais documentos contêm esses termos. O índice invertido contém o termo e o _id do documento, juntamente com outros metadados relevantes, como a posição do termo no documento.
Você pode pensar no índice invertido como análogo ao índice que você pode encontrar na parte de trás do livro. Lembra-se de como os índices de livros contêm palavras ou expressões e listam as páginas do livro em que são encontradas? 📖📚
Bem, esses índices invertidos usam esses termos para apontar para documentos específicos em seu banco de dados.
Imagine se você estivesse procurando a expressão “Out, damned spot” de Lady MacBeth em MacBeth de Shakespeare. Você não começaria na primeira página e leria a peça inteira, começaria? Eu iria direto ao índice para identificá-lo no Ato 5, na Cena 1 e até mesmo na página exata.
Índices invertidos tornam as pesquisas de texto muito mais rápidas do que uma pesquisa tradicional, porque você não está pesquisando em todos os documentos no momento da consulta. Em vez disso, você está consultando o índice de pesquisa que foi mapeado na criação do índice. Em seguida, seguir o roteiro com o _id para o(s) documento(s) de dados exato(s) é rápido e fácil.
Como nosso livro metafórico decide quais palavras ou expressões devem ser listadas no final? Ou, especificamente no caso do Atlas Search, como sabemos quais termos colocar em nossos índices de pesquisa? Bem, é aqui que os analisadores entram em ação.
Para tornar nosso corpus de dados pesquisável, os transformamos em termos ou "tokens " por meio de um processo chamado "analysis " feito por analisadores.
Em nosso exemplo de Charles Dickens, separamos “It was the best of times, it was the worst of times,” removendo a pontuação, colocando as palavras em minúsculas e separando o texto em caracteres que não são letras para obter nossos termos.
Estas regras são aplicadas pelo analisador lucene.standard, que é o analisador padrão do Atlas Search.
O Atlas Search também oferece outros analisadores integrados.
Um analisador de espaço em branco manterá a caixa e a pontuação, mas dividirá o texto em tokens apenas nos espaços em branco.
O analyzer inglês pega um pouco mais de peso ao tokenizar.
Ele remove palavras STOP comuns para inglês. As palavras STOP são palavras comuns, como “the,”, “a,”, “of,” e “and”, que você encontra com frequência, mas podem tornar os resultados de suas pesquisas menos significativos. Em nosso exemplo de Devices, removemos o "it, " "was, " e "the. " Além disso, ele entende plurais e palavras "stemming " para sua forma mais reduzida. A aplicação do analisador de inglês nos deixa apenas com os três tokens a seguir:
- melhor - pior - tempo
Quais mapas da seguinte forma:
Observe que você não consegue encontrar “the” ou “of” com o analisador em inglês porque essas palavras de interrupção foram removidas no processo de análise.
Interessante, não é? 🤔
Quer uma análise mais profunda do analyzer? Confira AtlasSearchIndexes.com. Aqui você encontrará uma ferramenta básica para comparar alguns dos vários analisadores construídos no Atlas:
Analisador | Descrição do processamento de texto |
Padrão | Minúsculas, remove pontuação, mantém acentos |
English | Minúsculas, remove pontuação e palavras irrelevantes, raízes para raiz, pluralização e possessivo |
simples | Minúsculas, remove pontuação, separa em não letras |
Whitespace | Mantém maiúsculas e minúsculas e pontuação, separa no espaço em branco |
Keyword | Mantém tudo exatamente intacto |
Francês | Semelhante ao inglês, mas em francês =-) |
Ao alternar entre todos os diferentes tipos de analisadores listados na barra superior, você verá o que eu chamei de regras básicas de cada um. Discutimos padrão, espaço em branco e inglês. O analisador simples remove pontuação e letras minúsculas e separa em não letras. "Keyword " é o mais fácil de lembrar, pois tudo precisa corresponder exatamente e retorna um único token. Maiúsculas, pontuação, tudo. Isso é muito útil para quando você espera um conjunto específico de opções – caixas de seleção na interface do usuário do aplicativo, por exemplo.
Com nossas regras de ouro em mente, selecione um dos textos de amostra oferecidos e veja como eles são transformados de forma diferente com cada analisador. Temos uma string básica, um endereço de e-mail, algum html e uma frase em francês.
Tente pesquisar termos específicos nessas amostras de texto usando a caixa de entrada. Eles produzem uma correspondência?
Tentando nosso primeiro texto de exemplo:
“As I was walking to work, I listened to two of Mike Lynn’s podcasts, and I dropped my keys.”
Observe pelo amarelo destacando como o analisador de inglês permite que você reconheça as bases "walk " e "listen, ", o singular "podcast " e "key. "
No entanto, nenhum desses termos corresponderá a qualquer outro analisador:
Parlez-vous français? Comment dit-on “stop word” en français?
Endereços de e-mail podem ser um desafio. Mas agora que você entende as regras para analisadores, tente procurar endereços de e-mail "mongodb" (ou Gmail, Yahoo, "fill-in-the-corporate-blank.com"). Posso combinar "mongodb " com o analisador simples, mas com nenhum outro.
Agora que você adquiriu algum conhecimento de token de analisadores, teste-o em seus próprios dados na páginaTokens de atlassearchindexes.com.
Com nosso Analyzer Analyzer instalado para ajudar a guiá-lo, você pode inserir seus próprios dados de texto de amostra na barra de entrada e clicar em enviar ✅. Depois de fazer isso, insira seu termo de pesquisa e escolha um analyzer para ver se há um resultado retornado.
Talvez você tenha algumas strings de registro ou UUIDs para tentar?
Os analisadores são importantes. Se você não estiver obtendo os resultados da pesquisa esperado, verifique o analisador usado na definição do índice.
Armados com nossa compreensão mais profunda dos analisadores, podemos dar o próximo passo em nossa viagem de pesquisa e criar um índice de pesquisa no Atlas utilizando analisadores diferentes.
Tenho um aplicativo de mecanismo de pesquisa de filmes que usa a coleção sample_mflix.movies no Atlas, então vamos para essa coleção na interface do usuário do Atlas e, em seguida, para a guia Índices de pesquisa.
Dica! Você pode baixar esses dados de amostra, bem como outros conjuntos de dados de amostra em todos os clusters do Atlas, incluindo o nível gratuito.
Podemos criar o índice de pesquisa usando o Editor Visual. Ao criar o índice do Atlas Search, podemos especificar qual analisador usar. Por padrão, o Atlas Search utiliza o analisador lucene.standard e mapeia cada campo dinamicamente.
O mapeamento dinâmico indexará automaticamente todos os campos do tipo suportado.
Isso é ótimo se o seu esquema desenvolve com frequência ou se você está experimentando o Atlas Search — mas isso ocupa espaço. Algumas opções de configuração de índice – como preenchimento automático, sinônimos, vários analisadores e documentos incorporados – podem fazer com que os índices de pesquisa ocupem uma parte significativa do espaço em disco, até mais do que o próprio conjunto de dados. Embora esse seja o comportamento esperado, você pode perceber isso com o desempenho, especialmente com collection maiores. Se estiver pesquisando apenas em alguns campos, sugiro que defina seu índice para mapear apenas esses campos.
Dica profissional! Para melhorar o desempenho da consulta de pesquisa e economizar espaço em disco, refine seu índice para:
- Mapeie apenas os campos que sua aplicação precisa.
- Defina a opção de armazenamento como falsa ao especificar um tipo de string em uma definição de índice.
Você também pode escolher analyzers diferentes para campos diferentes — e pode até aplicar mais de um analyzer ao mesmo campo.
Dica profissional! Você também pode usar seu próprio analisador personalizado - mas deixaremos os analisadores personalizados para um dia diferente.
Clique em Refinar para personalizar nossa definição de índice.
Desativarei o mapeamento dinâmico e adicionarei campo para mapear o título para o analisador padrão. Em seguida, adicione o campo fullplot para mapear com o analisador de inglês. CRIAR!
E agora, depois de apenas alguns cliques, tenho um índice de pesquisa chamado 'default' que armazenou os resultados tokenizados da análise padrão no campo do título e os resultados tokenizados do analisador lucene.english no campo do gráfico completo.
É simples assim.
E assim, agora posso usar esse índice que levou um minuto para criar para pesquisar esses campos em minha collection de filmes! 🎥🍿
Então, ao configurar seu índice de pesquisa:
- Pense primeiro nos seus dados. Conheça seus dados, como você os consultará? O que você quer que seus tokens sejam?
- Em seguida, escolha seu analyzer adequadamente.
- Especifique o melhor analisador para seu caso de uso em sua definição de índice do Atlas Search.
- Especifique esse índice ao escrever sua query de pesquisa.
Você pode criar muitos índices de pesquisa diferentes para o seu caso de uso, mas lembre-se de que só pode usar um índice de pesquisa por consulta de pesquisa.
Então, agora que analisamos os analisadores, você sabe por que escolher o analisador certo é importante. Você pode criar o índice mais eficiente do Atlas Search para obter resultados precisos e ótimos. Então Go em frente, guerreiro em busca! Digite na caixa de pesquisa do seu aplicativo com confiança, sem cruzar os dedos.