Moteur de recherche Tangseng basé sur la langue GO
Cliquez ici pour un contenu détaillé du projet
Projet Cadre général et fonctions
Le GIN est utilisé comme cadre HTTP, GRPC est utilisé comme framework RPC, etcd est utilisé comme découverte de service.
Le service global est divisé en用户模块,收藏夹模块,索引平台,搜索引擎(文字模块) et搜索引擎(图片模块) .
Le Crawler distribué explore les données et les envoie au cluster Kafka, puis entre dans la base de données pour consommer. (Bien que le robot ne l'ait pas encore écrit, cela ne m'empêche pas de dessiner des gâteaux ...)
La recherche de texte des modules de moteur de recherche est configurée séparément à l'aide de BoltDB pour stocker l'index, MapReduce accélère le bâtiment d'index et utilise roaring bitmap pour stocker l'index.
Utilisez Trie Tree pour mettre en œuvre l'association d'entrée (l'algorithme Auxiliary Entry Association est prévu pour être ajouté plus tard).
La recherche d'images utilise Resnet50 pour effectuer une requête Vectorize + Query of Milvus ou FAISS Vector Base (j'ai commencé ... Deeplearning est trop difficile ...).
Prend en charge plusieurs rappels, rappel d'index inversé dans GO et rappel de vecteur dans Python. La connexion est appelée via GRPC pour effectuer la fusion.
Prend en charge TF-IDF, BM25 et d'autres tri d'algorithmes.
Adresse frontale ??
Tout en réact, mais toujours codant
react-tangseng
Planification future
Lié à l'architecture
Introduire un fusible de rétrogradation
Présentez Jaeger pour le suivi complet des liens (allez-y suivre à Python)
Introduire le skywalking ou prometheus pour la surveillance
Extraire l'initiation de DAO et utilisez la clé pour obtenir l'instance de base de données pertinente
Séparation des données chaudes et froides (voir le schéma ES, la clé est de juger les normes chaudes et froides, qui peuvent être écrites dans le middleware?)
À l'heure actuelle, MySQL est suffisant pour stocker l'indice avant, mais il peut être utilisé directement pour OLAP en une étape.
Fonctionnel
Il est trop lent pour créer un index.
Compression d'index, inversé inversé, c'est-à-dire le tableau d'index inversé, changez par la suite pour enregistrer le décalage, utilisez MMAP
Le calcul de la corrélation doit être pris en considération, TFIDF, BM25
Utilisez des arbres préfixés pour stocker les informations d'association
Huffman encodé de préfixe comprimé
Lors de la création d'un index, l'adresse de transfert de fichiers est modifiée dans le flux de transfert de fichiers
Python présente le modèle BET pour effectuer des mots de recommandation de segmentation des mots et fournit l'interface GRPC
Le stockage de l'arbre inversé et du trie prend en charge un stockage de fragment de hachage cohérent
Vecteur de mots
pagerank
Le processus de construction et de rappel de séparation de l'arbre de trie
Ajouter un participe de mots à ik word participe
Créer une plate-forme d'index, l'informatique et le stockage séparés, un index séparé et un rappel
Et opération de différence (opération de bit)
Pagination
Trier
Query d'entrée correcte, comme "Lu Jiazui" -> "Lu Jiazui"
Entrez l'entrée pour l'associer, comme les conseils "Dongfang Ming" -> "Dongfang Pearl"
Actuellement, il s'agit d'une méthode d'indexation basée sur des blocs.
Ajouter une indexation dynamique basée sur la précédente (je ne sais pas si la précédente peut être implémentée ...)
Réformer l'index inversé et utiliser le bitmap rugissant pour stocker Docid (très difficile)
Implémentez la classe TF
Après avoir cherché un, le cache n'est pas effacé, ce qui a entraîné la fusion avec la précédente.
Optimisation du trieur
Commencer rapidement
L'environnement commence!
make env-up
Le petit ensemble de données est dans source_data/movies_data.csv
Python commence!
Assurez-vous que l'ordinateur a installé Python, assurez-vous que Python version> = 3.9, ma version est 3.10.2
python --version
Installer Venv Environment
python -m venv venv
Activer l'environnement Venv Python
macOS:
source venv/bin/activate
Windows:
Je serai compatible après avoir fini de nettoyer le lecteur C ... Je n'ai pas encore couru sur la victoire ...
Installer des dépendances tierces
pipinstall-rrequirements . txt
Golang commence!
Golang Version> = GO 1.16. Ma version go est 1.18.6
Télécharger le package de dépendance tiers
go mod tidy
Exécuter dans le répertoire
make run-xxx(user,favortie ...)
# e.g:# make run-user# make run-favorite# 具体看makefile文件
Contribution open source
Veuillez vérifier CONTRIBUTING_CN.md avant de soumettre des relations publiques