Pesquisa de texto completo, Full Text Search. Agora eu quero conversar com você sobre uma área muito interessante de busca textual, de indexação textual, que tem um potencial, inclusive, de ser uma disciplina completa. Vamos começar com alguns conceitos importantes. Nós precisamos falar nesse primeiro momento de análise textual ou análise de texto, que é o principal elemento ou motor que vai nos permitir alcançar o caso de uso de pesquisa de texto completo ou, como a gente está muito acostumado a ver nas ferramentas e nas documentações, o Full Text Search. O que nós temos nessa abordagem? Nós temos a transformação dos nossos registros, ou seja, são documentos que são convertidos em estrutura de dados otimizadas para a pesquisa. estrutura de dados otimizadas para a pesquisa. Quando nós falamos de indexação, nós vimos que a indexação é um processo de pegar o conteúdo deste texto e levar para uma estrut uma natureza mais sofisticada, nós também teremos estruturas mais adequadas para esse tipo de busca, de busca textual, que vai nos levar a uma série de técnicas específicas para os textos. A busca textual retorna resultados relevantes. retorna resultados relevantes então aqui eu quero destacar o seguinte um resultado relevante não é apenas uma correspondência exata quando a gente compara um inteiro contra o inteiro uma chave primária contra a chave primária ou um resto contra o resto é uma comparação exata uma comparação simples aqui nós queremos trazer relev, que é um conceito um pouco mais sofisticado. Então nós vamos ter aqui uma correlação de buscas do usuário da aplicação com os dados que estão sendo representados no índice pessoal. Vamos aprofundar um pouco mais. Vamos aprofundar um pouco mais. Temos que falar de um conceito importante, que é a tokenização ou tokenization. O que é isso? Tokenização divide o texto em partes menores, que serão chamadas de tokens. Na maior parte dos casos, estes tokens são palavras individuais. Quando a gente indexar a seguinte frase, a raposa marrom rápida salta, como uma string, e a gente tiver uma busca, ou seja, a pessoa ou usuário na aplicação pesquisar por raposa rápida, não vai encontrar este registro. Porque é uma correspondência exata que não existe. Porém, se nós aplicarmos a tokenização neste contexto, neste caso de uso, e indexarmos cada palavra separadamente, os termos na string da consulta serão pesquisados individualmente e consequentemente ao buscar por raposa rápida raposa marrom nós teremos as correspondências ainda sobre tokenização então vamos olhar esse exemplo a raposa marrom rápida salta vamos transformar esse texto em tolkien então aqui nós vamos ter uma rei com os tolkien dessa frase então a é o primeiro elemento raposa é o segundo elemento marrom é o terceiro elemento rápida é o quarto elemento e salta é o quinto elemento deste array de tokens, este conjunto que forma o texto A Raposa Marrom Rápida Salta. Este aqui é um exemplo clássico que nós vamos encontrar na documentação da Elastic. Então, vamos fazer um exemplo bem brasileiro, que é a frase Minha terra tem palmeiras onde canto o sabiá as aves que aqui gorjeiam não gorjeiam como lá. Então, os tokens de todo esse texto que, propositadamente, eu trouxe um texto mais sofisticado que representa o que nós vamos encontrar na vida real. Então, você vai ver que o conceito de tokenização é transformar essa frase quebrando em palavras. Você transforma a frase num array, ou seja, num conjunto de palavras e, consequentemente, você vai ver toda essa série de tokens. Minha é um token, primeira posição. Terra, segunda posição. Tem, a terceira posição. Palmeiras, a quarta posição, e assim sucessivamente. Vou deixar aqui um momento para você observar esta transformação de texto em tokens, que são os elementos desse texto. que são os elementos desse texto. Além da tokenização, nós também temos a normalização, ou em inglês nós vamos encontrar isso na documentação e nas ferramentas como normalization. Então, vamos entender o seguinte, a tokenização permite a correspondência em termos individuais, mas cada token ainda é correspondido literalmente. Então, para uma análise de texto ser efetiva, nós vamos precisar normalizar esses tokens em um formato padrão. Então, com isso, nós vamos combinar tokens que não são exatamente iguais àqueles termos que nós o analisador, o analyzer. E este analisador, que também faz parte do processo de análise de texto, é um conjunto de regras. Então, as etapas de uma análise de texto são mudanças no texto antes da tokenização, como esse texto é convertido nesses tokens e alterações de normalização feitas em tokens antes da indexação ou pesquisa. Então este conjunto de regras que vai fazer essas alterações são os analyzers ou analisadores.