Moteur de recherche sémantique écrit en Java en tant que projet universitaire
Avertissement
Ce projet n'est absolument pas prêt à la production . Il a été développé comme un projet universitaire, comme preuve de concept. Si vous voyez ce message, cela signifie que je développe déjà une nouvelle version de ce projet, qui est basé sur une architecture de microservice, et est beaucoup plus optimisée.
Vous devez définir certains envars 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 Vous avez besoin d'un modèle d'intégration au format ONNX. J'ai utilisé ce modèle: COINTÉRÉ / LABSE-EN-RU. Pour convertir, j'ai utilisé l'utilitaire de cet article: Exporter vers ONNX. Vous pouvez également utiliser n'importe quel modèle d'intégration au format ONNX avec une dimension vectorielle de 768. Mettez le modèle dans un dossier de modèles, comme models/model.onnx
Construisez et exécutez le projet avec:
./gradlew runL'API sera disponible sur le port 4567
Note
Le projet a été écrit en mettant l'accent sur le fait qu'il sera possible d'exécuter autant de travailleurs d'indexation que vous le souhaitez. Mais, en raison des délais serrés, il n'y avait pas assez de temps pour l'optimisation, et chaque travailleur d'indexation charge un modèle dans sa mémoire. Courez avec prudence!
Organigramme TD
U (utilisateur)
A (API utilisateur)
S (service de recherche)
I (service d'indexation)
E (modèle d'intégration)
DM [(Mongo)]
Dv [(milvus)]
R [(Rabbitmq)]
U -> | demande d'API | UN
A -> | Envoyer une tâche d'indexation à la file d'attente | R
R -> | Recevoir la tâche | je
I -> | Stocker les mots clés | DM
I -> | Générer plus de tâches d'indexation | R
I -> | Extrait du texte | E
E -> | Stocker Imagedding | Dv
A -> | Demande de recherche | S
S -> | Extrait de la requête | E
S -> | requête par mots clés | DM
S -> | Requête par intégration | Dv