Engine de busca semântica escrito em Java como um projeto universitário
Aviso
Este projeto não está absolutamente pronto para a produção . Foi desenvolvido como um projeto universitário, como prova de conceito. Se você vir esta mensagem, isso significa que já estou desenvolvendo uma nova versão deste projeto, que é baseada em uma arquitetura de microsserviços e é muito mais otimizada.
Você precisa definir alguns vars ENV:
export MILVUS_HOST=localhost MILVUS_PORT=19530 MONGODB_URI=mongodb://localhost:27017/ RABBITMQ_HOST=localhost RABBITMQ_USERNAME=user RABBITMQ_PASSWORD=pass MODEL_PATH=models/model.onnx Você precisa de um modelo de incorporação no formato ONNX. Eu usei este modelo: cointegrado/labse-en-ru. Para converter, usei o utilitário deste artigo: Exportar para Onnx. Além disso, você pode usar qualquer modelo de incorporação no formato ONNX com uma dimensão vetorial de 768. Coloque o modelo em uma pasta de modelos, como models/model.onnx
Construa e execute o projeto com:
./gradlew runA API estará disponível na porta 4567
Observação
O projeto foi escrito com ênfase no fato de que será possível executar quantos trabalhadores de indexação você quiser. Mas, devido aos prazos apertados, não havia tempo suficiente para otimização, e cada trabalhador de indexação carrega um modelo em sua memória. Corra com cautela!
Fluxograma TD
U (usuário)
A (API do usuário)
S (Serviço de Pesquisa)
I (serviço de indexação)
E (modelo de incorporação)
DM [(Mongo)]
DV [(milvus)]
R [(RabbitMQ)]
U -> | solicitação da API | UM
A -> | Envie tarefa de indexação para fila | R
R -> | Receba tarefa | EU
I -> | armazenar palavras -chave | Dm
I -> | Gere mais tarefas de indexação | R
I -> | Extrair do texto | E
E -> | armazenar incorporação | Dv
A -> | Pesquisa Solicitação | S
S -> | Extrato da consulta | E
S -> | Consulta por palavras -chave | Dm
S -> | Consulta por incorporação | Dv