Dica
Se você tiver alguma dúvida sobre o funcionamento e implementação deste projeto, ou se tiver melhores sugestões de otimização para este projeto, pode entrar em contato diretamente comigo ou deixar um problema no repositório.
Este projeto é uma implementação de mecanismo de busca baseado na biblioteca Boost, com o objetivo de fornecer um sistema de busca eficiente e preciso especificamente para busca de documentos Boost. Ao elaborar o processo de construção do mecanismo de busca, desde o pré-processamento de dados até a criação do índice, até o processamento da consulta de pesquisa e apresentação dos resultados, este projeto mostra como construir um sistema completo de mecanismo de busca. A pilha de tecnologia abrange C++, biblioteca Boost, Html, CSS e JavaScript, realizando a construção de índice back-end e a interação do usuário front-end. As funções básicas do projeto são abrangentes e foram adicionados recursos avançados, como estatísticas de frequência de palavras, índices atualizados dinamicamente e classificação de prioridade de resultados de pesquisa, o que melhora significativamente a eficiência e a precisão da pesquisa. Isso torna o mecanismo de busca particularmente adequado para que os desenvolvedores encontrem rapidamente os documentos técnicos necessários ao usar as bibliotecas Boost, melhorando significativamente a eficiência do desenvolvimento e a acessibilidade dos documentos.
A pesquisa de um grande número de documentos e do conteúdo contido nos documentos é obviamente um comportamento muito demorado e trabalhoso. Se você atravessá-los diretamente e acessá-los um por um, o serviço basicamente não responderá por um longo tempo. Por esse motivo, é necessária uma maneira mais rápida e conveniente de planejar e gerenciar uma grande quantidade de dados para obter uma pesquisa rápida. Construir um índice é a essência da solução desse problema.
O chamado índice serve para anexar uma etiqueta ao documento e pesquisar rapidamente com base na etiqueta. Gerenciar etiquetas é muito menos estressante do que gerenciar documentos, razão essencial para a construção de um índice.
Biblioteca Boost é um termo geral para algumas bibliotecas C++ que fornecem extensões para a biblioteca padrão da linguagem C++. É desenvolvido e mantido pela comunidade Boost. A biblioteca Boost pode funcionar perfeitamente com a biblioteca padrão C++ e fornecer funções estendidas para ela. O site boost disponibiliza um grande número de documentos. A implementação de um mecanismo de busca pode nos ajudar a encontrar os documentos que precisamos com precisão e rapidez em um grande número de documentos.
Back-end: C/C+, C++11, STL, Boost, Jsoncpp, cppjieba, cpp-httplib
Front-end: html5, css, js, jQuery, Ajax
Efeito:
Efeitos de back-end:
Como o projeto não implementa serviços de crawler, aqui é adotado o método de download de dados para o computador local. O arquivo ou diretório HTML de dados pode ser colocado no seguinte diretório.
Etapas específicas podem ser encontradas em: word.md-chapter
boost-search-engine/search-engine/data/input
[!NOTE] O ambiente que uso é:
Linux ubuntu-linux-22-04-desktop 5.15.0-113-generic #123-Ubuntu SMP Mon Jun 10 08:16:46 UTC 2024 aarch64 aarch64 aarch64 GNU/Linux
Instale o CMake:
Instale o Visual Studio:
Instale a biblioteca Boost:
C:Librariesboost_1_75_0
cd C:Librariesboost_1_75_0
.bootstrap.bat
.b2.exe
BOOST_ROOT
para o diretório onde o Boost está instalado.Instale o jsoncpp:
vcpkg install jsoncpp
Configure o projeto CMake:
BOOST_ROOT
).Instale o Homebrew:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
Instale o CMake e bibliotecas dependentes:
brew install cmake boost jsoncpp
Configure o projeto CMake:
mkdir build && cd build
cmake ..
make
Linux (Ubuntu, CentOS)
sudo apt-get update
sudo apt-get install cmake g++ libboost-all-dev libjsoncpp-dev
sudo yum install cmake gcc-c++ boost-devel jsoncpp-devel
Configure o projeto CMake:
mkdir build && cd build
cmake ..
make
Você também pode usar makefile
para compilar diretamente:
make
[!DICA]
- Certifique-se de que os caminhos estejam configurados corretamente em todas as plataformas, especialmente no Windows, onde pode ser necessário definir manualmente os caminhos para algumas bibliotecas.
- Para diferentes distribuições do Linux, os comandos de instalação e os pacotes disponíveis podem ser ligeiramente diferentes, portanto ajuste-os de acordo.
- Ao compilar no Windows com o Visual Studio, selecione a arquitetura correta (x86 ou x64) para corresponder à versão da biblioteca.
Links Oficiais:
https://github.com/yanyiwu/cppjieba
Vincule o diretório cppjieba
ao diretório boost-search-engine/search-engine/include
do projeto.
Entre no diretório cppjieba
Vincule o componente da biblioteca de dicionário dict
e o componente limonp
em cppjieba
.
Analise os dados.
./parser
Conforme mostrado na figura, a operação foi bem-sucedida. Se a operação falhar, você poderá verificar a mensagem de erro. Pode ser que a configuração do caminho esteja incorreta. Você mesmo pode configurar o caminho no código.
Inicie o serviço:
Conforme mostrado na figura, a inicialização foi bem-sucedida.
Obviamente, outros métodos também podem ser usados para implantar o serviço em segundo plano, como:
nohup ./server > log/log.txt 2>&1 &
Você também pode usar alguns outros métodos, como tmux, etc.
Use um navegador para acessar o número da porta 8081 do IP. O número da porta é definido em ./src/server.cc
.
A parte do log pode ser melhorada ainda mais.