Análise de índice e pesquisa. Vamos nos aprofundar mais neste conceito do analisador que iniciamos a compreensão na análise de texto. Então, um analyzer, que é o conjunto de regras que nós vamos aplicar na nossa análise de texto, contém três blocos. O primeiro bloco são filtros de caracteres. Então, esse texto original recebido pelo analisador é compreendido como um fluxo de caracteres, uma sequência de caracteres. E este fluxo será alterado de alguma maneira, seja pela adição, remoção ou alteração dos caracteres. E aqui no analisador, nós podemos ter nenhum ou muitos filtros de caracteres sendo aplicados em ordem. O próximo bloco do analisador é o tokenizador. Então, o tokenizador recebe um fluxo de caracteres e vai dividir em tokens individuais, que geralmente são as palavras individuais, como a gente viu na nossa compreensão inicial no capítulo anterior. Então, o tokenizador gera um fluxo de tokens. A diferença anteriormente, nós falamos de fluxo de caracteres nos filtros de caracteres deste analyzer. E o terceiro bloco são os filtros de token. Então, o fluxo de token pode ter tokens adicionados, removidos ou alterados e zero ou muitos filtros podem ser aplicados também em ordem por este analisador. A análise de texto vai acontecer em dois momentos importantes. Em tempo de indexação, então quando o documento é indexado, se foi persistido, está sendo indexado, e quaisquer valores de campo de texto serão analisados. Então o analisador, que é o conjunto de regras de análise de texto, é chamado de analisador de índice, Index Analyzer. Então, quando você aplica um Analyzer em tempo de indexação, este é um Index Analyzer. Análise de texto também pode acontecer em tempo de pesquisa, que é o Search ou Query Time, que é aquela string de consulta, o texto que a pessoa ou usuária está procurando na nossa aplicação. Então, essa string de consulta é analisada em tempo de execução e o analisador utilizado neste momento é chamado de analisador de pesquisa, analisador de busca, que é o Search Analyzer. O mesmo analisador deve ser utilizado nos momentos de indexação e pesquisa, na maior parte das situações. Assim, os valores dos campos que a gente está buscando nos documentos e as strings que nós estamos consultando, o conteúdo da nossa barra de busca, são alterados pelo analisador no mesmo formato de tokens e, consequentemente, os tokens terão suas correspondências, porque nós estamos analisando pela mesma regra. Então, vamos a um exemplo, também um exemplo clássico que nós encontramos na documentação da Elastic. Aqui nós temos o texto, The quick-brown foxes jumped over the dock. As raposas rápidas marrons pularam sobre o cão. Então, ao usar o Index Analyzer, nós temos a conversão, normalização e retorno dos seguintes tokens desta frase, que são as palavras que compõem esse texto. Quick, Brown, Fox, Jump, Over e Dog. Se você sentiu falta do The, a primeira palavra aqui do texto, é porque aqui já foi aplicado inclusive um outro analyzer que é um stop word, que já elimina algumas palavras para otimizar essa busca. Então, por essa razão, neste exemplo aqui, o index analyzer já eliminou uma coisa que não faz muito sentido estar procurando constantemente, como os artigos num texto. Mas vamos seguir aqui no nosso exemplo. Então, esses tokens, o Quick, Brown, Fox, Jump, Over, Dog, são indexados. Então, cada uma dessas palavras vai apontar para este documento que contém a frase completa e a pessoa usuária vai buscar por Quick Fox. Então, no texto original é Quick Brown Foxes, no plural. Então, não existe uma busca exata. Sem o query analyzer, nós não vamos conseguir ter a correspondência entre Quick, com a letra Q maiúscula no começo, e o Quick totalmente maiúsculo, que é o conteúdo do documento. E da mesma maneira, não vai acontecer a correspondência do Fox com Foxes. Então, quando a Streaming de Consulta é analisada usando o mesmo analisador, a gente vai gerar para ambos os cenários o Quick e o Fox. E consequentemente nós vamos chegar nesta correspondência então pegando esta correspondência com os mesmos analyzers eu tenho o text token gerado QUICK, BROWN, FOX, JUMP, OVER, DOG tudo minúsculo e o query token gerado também é QUICK e FOX também minúsculo. E o query token gerado também é QUICK e FOX, também minúsculos. Agora sim, como o valor do nosso documento e a string de consulta foram analisadas da mesma maneira, os mesmos tokens foram gerados. E tendo os mesmos tokens, nós conseguimos ter a correspondência de Quick e Fox com as respectivas palavras. Então, aqui nessa tabela, a gente vai ver que o Quick corresponde na consulta e corresponde no texto. E da mesma maneira, Fox está correspondendo em ambos. Então, de todo o conteúdo textual, a gente teve duas correspondências. todo o conteúdo textual, a gente teve duas correspondências. Tem uma situação em que a gente vai precisar utilizar um analisador diferente, que é uma exceção, um cenário de exceção. Vamos olhar aqui o texto Apple. Então, no Index Analyzer, este conteúdo, este texto, é quebrado com A, ppp l e apple se a gente usar mais 30 consulta apple com o mesmo senhor de analisar vai ser gerado a ap app appl appl e qual é o problema que a gente tem aqui é uma correspondência errônea de Apple com Apple. Então, estou comparando a aplicação com Apple com Apple. Então, solução num cenário como esse é usar o Search Analyzer que produz um único token em vez de um conjunto de prefixos. Assim a gente conserta esse comportamento. Mas fique tranquilo que aqui é um cenário mais específico. Em geral, regra geral, você vai usar os mesmos analyzers, tanto para o tempo de indexação, quanto para o tempo de busca.