De plataformas de eCommerce a sistemas de gerenciamento de conteúdo (CMSs), aplicativos web geram e manipulam enormes quantidades de dados. Extrair informações relevantes desses dados de maneira eficiente é crucial para uma experiência do usuário sem problemas. Portanto, a funcionalidade de pesquisa tradicional que utiliza correspondência de consulta literal, palavra por palavra, não é suficiente. Você precisa de uma pesquisa de texto completo.

Uma pesquisa de texto completo examina o conteúdo completo de documentos ou bancos de dados, permitindo que você recupere informações relevantes de grandes conjuntos de dados com base em palavras ou frases específicas. Ela leva em conta fatores como frequência de ocorrência e conteúdo multilíngue, produzindo resultados de pesquisa mais precisos e abrangentes.

O Meilisearch é um dos pioneiros nessa classe de mecanismos de pesquisa, aproveitando o poder da pesquisa de texto completo para oferecer uma ferramenta flexível e avançada, criada com os desenvolvedores e usuários finais em mente.

Este tutorial demonstra como você pode integrar o Meilisearch em um projeto web do Node.js.

O que é o Meilisearch?

O Meilisearch é um mecanismo de pesquisa de código aberto que fornece resultados de pesquisa rápidos e relevantes para os usuários finais. Ele é tolerante a erros de digitação e funciona imediatamente com configurações padrão para acomodar a maioria dos projetos.

O Meilisearch também é altamente personalizável, oferecendo vários recursos para ajustar a relevância dos resultados da pesquisa. Entre esses recursos, o mais notável são as regras de classificação, que você pode personalizar para se adequar ao seu projeto.

Ele oferece uma API RESTful intuitiva para uma integração perfeita em praticamente qualquer site comercial. Você pode hospedá-lo por conta própria ou usar sua solução oficial hospedada na nuvem, o Meilisearch Cloud, para começar rapidamente e sem esforço. Este tutorial utiliza o Meilisearch Cloud.

Pré-requisitos

Para acompanhar, você precisa de:

Como configurar o Meilisearch

  1. Navegue até o Meilisearch Cloud e crie uma conta ou faça login. Certifique-se de que você confirmou seu endereço de e-mail.
  2. Em seguida, clique em Create a project, um servidor que executa uma instância do Meilisearch – onde você adicionará os conjuntos de dados do seu site.
  3. Adicione um nome para o projeto (por exemplo, book-app) e escolha a região de sua preferência. Em seguida, clique em Create (Criar). Depois de criar o projeto, você pode clicar em Settings (Configurações) para ver detalhes sobre o projeto, como a URL para acessar os conjuntos de dados, as chaves API para proteger a instância do Meilisearch e outras informações.
    A página de visão geral do projeto book-app.
    A página de visão geral do projeto book-app.

    Há três chaves API, cada uma representando um nível de autorização diferente:

    • Chave mestra – Essa chave desbloqueia todas as rotas e é a única com acesso aos endpoints para criar e excluir chaves API. Use a chave mestra somente para gerenciar chaves API em um ambiente protegido.
    • Chave API de pesquisa padrão – Essa chave concede acesso apenas à rota de pesquisa. Você pode usá-la no código do lado do cliente.
    • Chave padrão da API de administrador – Essa chave acessa todas as rotas de API, exceto /keys, que serve para criar e excluir chaves API. Você só pode usar essa chave em um ambiente protegido.

Como indexar dados com o Meilisearch

Os índices são os principais componentes que armazenam e organizam dados pesquisáveis. Eles atuam como contêineres para documentos, objetos que contêm um ou mais campos.

Cada índice no Meilisearch é independente e personalizável, o que permite que você tenha regras de classificação de pesquisa e opções de filtragem individualizadas.

Como criar um índice e adicionar documentos

  1. Na barra de navegação, clique na aba Indexes em seu projeto.
  2. Clique em Create an index. Em seguida, insira um nome de índice (por exemplo, livros) e clique em Create index.
  3. Selecione como deseja importar os documentos. Para este guia, importe um arquivo JSON, que inclui 13 entradas de livros da API do Google Book.
  4. Clique em File upload e faça o upload do arquivo JSON e, em seguida, clique em Import documents.

Como atualizar e excluir documentos

Atualmente, o Meilisearch Cloud não inclui uma maneira de modificar ou excluir documentos, mas você pode usar as rotas da API REST ou o SDK. O código abaixo demonstra como você pode atualizar ou excluir documentos usando os endpoints da API REST. Este tutorial usa o cURL para trabalhar com as rotas, mas você também pode usar uma plataforma de API como o Postman.

  1. Para atualizar documentos, envie uma solicitação PUT na seguinte rota:
    /indexes/{index_uid}/documents

    O index_uid acima é o nome do índice do seu projeto:

    Nome do índice destacado.
    Nome do índice destacado.

  2. Com essa rota, você pode adicionar ou atualizar uma lista de documentos se eles já existirem. Para atualizar um documento, você deve anexar sua chave primária. O documento antigo passa por uma atualização parcial com base nos campos do novo documento. A atualização preserva todos os campos não incluídos no novo documento, permitindo que eles permaneçam inalterados. Abaixo está um exemplo de como atualizar o título de um documento no índice do livro JavaScript for Kids para JavaScript Coding for Kids e adicionar um campo de editor:
    curl \
        -X PUT '/indexes/books/documents' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: Bearer ' \
            --data-binary '[
            {
                "id": "71nDBQAAQBAJ",
                "title": "JavaScript Coding for Kids",
                "publisher": "No Starch Press"
            }
        ]'
  3. Substitua <your-project-url> e <your-admin-api-key> pelos valores correspondentes na página Project overview:
    "taskUid": 26, "indexUid": "books", "status": "enqueued", "type": "documentAdditionOrUpdate", "equeuedAt": "2023-05-26T07:52:24.127920065Z"
  4. Para excluir documentos, o Meilisearch inclui três rotas (endpoints):
    /indexes/{index_uid}/documents // Deleting all documents
    /indexes/{index_uid}/documents/{document_id} // Deleting a single document
    /indexes/{index_uid}/documents/delete-batch // Deleting a selection of  
    documents

    Você pode obter o document_id a partir dos dados originais do arquivo books.json depois de buscar o documento no MeiliSearch Cloud ou no seu banco de dados.

Abaixo está um exemplo de como excluir o livro que você atualizou acima:

curl \
    -H 'Authorization: Bearer ' \
    -X DELETE '/indexes/books/documents/71nDBQAAQBAJ'

Após enviar a solicitação, sua resposta deverá ser semelhante a esta:

"taskUid": 10, "indexUid": "books", "status": "enqueued", "type": "documentDeletion", "equeuedAt": "2023-05-26T07:20:11.1291066"

Como adicionar o MeiliSearch a um serviço web

  1. Comece clonando o projeto inicial do GitHub, executando os seguintes comandos em seu terminal:
    git clone https://github.com/Tammibriggs/meilisearch-app.git
    cd meilisearch​-app
    npm install

    Se você verificar o arquivo package.json, deverá ver o comando start. Execute npm start para executar o projeto Node.js na porta 3000 do host local. Quando você digitar http://localhost:3000/ no seu navegador, deverá ver o seguinte:

    Aplicativo inicial de demonstração do Meilisearch.
    Aplicativo inicial de demonstração do Meilisearch.

  2. Quando o aplicativo estiver em funcionamento, você poderá adicionar o Meilisearch a ele para que o formulário de pesquisa comece a retornar os resultados do Meilisearch quando enviado. Para fazer isso, instale o Meilisearch executando o seguinte comando no terminal:
    npm install meilisearch
  3. Você também precisa instalar o pacote dotenv npm para carregar credenciais confidenciais de um arquivo .env. Execute o seguinte comando no terminal:
    npm install dotenv
  4. Crie um arquivo .env na pasta raiz do projeto e adicione o seguinte:
    YOUR_PROJECT_URL= '<your-project-url>'
    YOUR_SEARCH_API_KEY= '<your-admin-api-key>'

    Certifique-se de substituir <your-project-url> e <your-admin-api-key> por seus valores correspondentes.

  5. Em seguida, importe meilisearch e o pacote dotenv para o arquivo server.js e configure dotenv:
    import {MeiliSearch} from 'meilisearch'
    import dotenv from 'dotenv';
    dotenv.config();
  6. Em seguida, inicialize o Meilisearch para que você possa começar a trabalhar no seu projeto books-app. Navegue até o arquivo server.js e adicione o seguinte código após a definição da variável searchValue:
    const client = new MeiliSearch({ host: process.env.YOUR_PROJECT_URL, apiKey: process.env.YOUR_SEARCH_API_KEY })
  7. Uma funcionalidade importante é buscar através do seu índice de livros no Meilisearch usando o valor de busca anexado à URL ao enviar o formulário. Para habilitar essa funcionalidade, adicione o seguinte código após a definição da variável client:
    const index = client.index('books')  
    const searchResults = !!searchValue && await index.search(searchValue)

    Este código cria uma referência ao índice do livro. Em seguida, ele usa o método search() para buscar documentos que correspondam ao valor de pesquisa no índice do livro, caso você defina searchValue.

  8. Por fim, para exibir os resultados da pesquisa, modifique o método render() da seguinte forma:
    res.render('index', {
        books: searchResults ? searchResults.hits : [],
        searchValue
    })

    Agora você está pronto para começar a pesquisar no índice do livro:

    Pesquisando no índice
    Pesquisando no índice “books” com o formulário de pesquisa.

  9. Depois de adicionar os códigos acima, seu arquivo server.js deverá ter a seguinte aparência:
    import express from 'express';
    import { MeiliSearch } from 'meilisearch';
    import dotenv from 'dotenv';
    dotenv.config();
    
    const app = express();
    const PORT = process.env.PORT || 3000;
    
    app.set('view engine', 'ejs');
    app.use(express.static('public'));
    
    app.get('/', async (req, res) => {
    	const searchValue = req.query.search;
    	const client = new MeiliSearch({
    		host: process.env.YOUR_PROJECT_URL,
    		apiKey: process.env.YOUR_SEARCH_API_KEY,
    	});
    	const index = client.index('books');
    	const searchResults = !!searchValue && (await index.search(searchValue));
    
    	res.render('index', {
    		books: searchResults ? searchResults.hits : [],
    		searchValue,
    	});
    });
    
    app.listen(PORT, () => {
    	console.log(`listening at http://localhost:${PORT}`);
    });

Você pode acessar o código completo deste tutorial no GitHub.

Resumo

O Meilisearch é uma excelente solução de mecanismo de pesquisa que aprimora os recursos de pesquisa e a experiência do usuário de um site. Sua velocidade excepcional, o algoritmo de classificação focado na relevância e o processo de integração perfeito fazem dele uma ferramenta inestimável se você quiser otimizar a funcionalidade de pesquisa do seu site.

O serviço de Hospedagem de Aplicativos da Kinsta eleva perfeitamente o desempenho dos aplicativos com base no Meilisearch. Com uma infraestrutura robusta e ambientes de servidor simplificados, a Kinsta garante uma rápida funcionalidade de pesquisa, aprimorando a experiência do usuário. A escalabilidade da plataforma acomoda as demandas do Meilisearch, garantindo operações de pesquisa confiáveis e eficientes.

Em qual mecanismo de pesquisa você confia para seus projetos? Conte-nos na seção de comentários!

Jeremy Holcombe Kinsta

Editor de Conteúdo & Marketing na Kinsta, Desenvolvedor Web WordPress e Escritor de Conteúdo. Fora do universo WordPress, eu curto praia, golfe e filmes. Também enfrento problemas de gente alta ;).