Mecanismo de pesquisa de tangseng com base no idioma Go
Clique aqui para obter conteúdo detalhado do projeto
Projeto Geral Framework & Functions
O GIN é usado como estrutura HTTP, o GRPC é usado como estrutura RPC, etcd, é usado como descoberta de serviço.
O serviço geral é dividido no用户模块,收藏夹模块,索引平台,搜索引擎(文字模块) e搜索引擎(图片模块) .
O rastreador distribuído rasteja dados e os envia para o cluster kafka e entra no banco de dados para consumir. (Embora o rastreador ainda não tenha escrito, ele não me impede de desenhar bolos ...)
A pesquisa de texto dos módulos do mecanismo de pesquisa é configurada separadamente usando o BoltDB para armazenar o índice, o MapReduce acelera a construção do índice e usa roaring bitmap para armazenar o índice.
Use Trie Tree para implementar a Associação de Entrada (a Associação de Entrada Auxiliar de Modelo de Algoritmo está planejada para ser adicionada posteriormente).
A pesquisa de imagens usa o Resnet50 para executar a consulta Vectorizada + consulta do banco de dados Milvus ou FAISS Vector (comecei ... Deeplearning é muito difícil ...).
Suporta vários recalls, recall de índice reverso no GO e recall de vetores no Python. A conexão é chamada através do GRPC para executar a fusão.
Suporta TF-IDF, BM25 e outros algoritmos.
Endereço do front-end
tudo em reação, mas ainda codificando
React-Tangseng
Planejamento futuro
Relacionada à arquitetura
Introduzir fusível de rebaixamento
Apresente Jaeger para rastreamento completo de links (vá rastreando para Python)
Introduzir Skywalking ou Prometheus para o monitoramento
Extraia o init do DAO e use a chave para obter a instância do banco de dados relevante
Separação de dados quentes e frios (consulte o esquema ES, a chave é julgar os padrões quentes e frios, que podem ser escritos no middleware?)
Atualmente, o MySQL é suficiente para armazenar o índice a termo, mas pode ser usado diretamente para o OLAP em uma etapa.
Relacionado funcional
É muito lento para criar um índice.
Compressão do índice, índice invertido, isto é, tabela de índice invertida, posteriormente muda para salvar o deslocamento, use o MMAP
O cálculo da correlação deve ser considerado, TFIDF, BM25
Use árvores de prefixo para armazenar informações de associação
Árvore de prefixo comprimido codificado de Huffman
Ao criar um índice, o endereço de transferência de arquivo é alterado para o fluxo de transferência de arquivos
Python apresenta o modelo BET para executar palavras de recomendação de segmentação de palavras e fornece interface GRPC
O armazenamento de árvores invertidas e trie suporta armazenamento consistente de hash shard
Vetor de palavras
PageRank
O processo de construção e recall de separar a árvore da trie
Adicione o particípio da palavra ao IK Word particípio
Construa uma plataforma de índice, computação e armazenamento separados, Índice separado e recall
E operação de diferença (operação de bit)
Paginação
Organizar
Consulta de entrada correta, como "Lu Jiazui" -> "Lu Jiazui"
Digite a entrada para associá -la, como "Dongfang Ming" Dicas -> "Dongfang Pearl"
Atualmente, é um método de indexação baseado em bloco.
Adicione a indexação dinâmica com base no anterior (não sei se o anterior pode ser implementado ...)
Reforma o índice reverso e use o bitmap rugindo para armazenar docid (muito difícil)
Implementar classe TF
Depois de pesquisar um, o cache não é limpo, resultando no resultado ser fundido com o anterior.
Otimização do classificador
Comece rapidamente
O ambiente começa!
make env-up
O pequeno conjunto de dados está em source_data/movies_data.csv
Python começa!
Verifique se o computador possui o Python instalado, verifique se a versão python> = 3.9, minha versão é 3.10.2
python --version
Instale o ambiente Venv
python -m venv venv
Ative o ambiente Venv Python
macos:
source venv/bin/activate
Windows:
Serei compatível depois de terminar de limpar a unidade C ... ainda não corro na vitória ...
Instale dependências de terceiros
pipinstall-rrequirements . txt
Golang começa!
Golang versão> = Go 1.16. Minha versão Go é 1.18.6
Baixe o pacote de dependência de terceiros
go mod tidy
Executar no diretório
make run-xxx(user,favortie ...)
# e.g:# make run-user# make run-favorite# 具体看makefile文件
Contribuição de código aberto
Por favor, verifique CONTRIBUTING_CN.md antes de enviar PR