Klicken Sie hier, um detaillierte Inhalte des Projekts zu erhalten
Projekt Allgemeine Framework & Funktionen
Gin wird als HTTP -Framework verwendet, GRPC wird als RPC -Framework usw. als Service Discovery verwendet.
Der Gesamtdienst ist in用户模块,收藏夹模块,索引平台,搜索引擎(文字模块) und搜索引擎(图片模块) unterteilt.
Der verteilte Crawler kriecht Daten und sendet sie an den Kafka -Cluster und gibt dann die Datenbank ein, um sie zu konsumieren. (Obwohl der Crawler es noch nicht geschrieben hat, hindert es mich nicht daran, Kuchen zu zeichnen ...)
Die Text Suche nach Suchmaschinenmodulen wird separat mit BoltDB eingerichtet, um den Index zu speichern. MapReduce beschleunigt das Indexgebäude und verwendet roaring bitmap , um den Index zu speichern.
Verwenden Sie Trie Tree, um die Einstiegsvereinigung zu implementieren (das Algorithmus -Modell Auxiliary Entry Association soll später hinzugefügt werden).
Die Bildsuche verwendet ResNet50, um eine vektorisierte Abfrage + Abfrage der Milvus- oder Faiss -Vektor -Datenbank durchzuführen (ich habe angefangen ... DeepLearning ist zu schwierig ...).
Unterstützt mehrere Rückrufe, Reverse Index -Rückruf in Go und Vector Recall in Python. Die Verbindung wird durch GRPC aufgerufen, um Fusion durchzuführen.
Unterstützt TF-IDF, BM25 und andere Algorithmus-Sortierungen.
Front-End-Adresse
alles in reagieren, aber immer noch codieren
React-Tangseng
Zukünftige Planung
Architekturbezogen
Downgrade -Sicherung einführen
Vorstellen von Jaeger für die vollständige Linkverfolgung (GO Tracking to Python)
Einführung von Skywalking oder Prometheus zur Überwachung
Extrahieren Sie den Init aus DAO und verwenden Sie den Schlüssel, um die entsprechende Datenbankinstanz zu erhalten
Trennung von heißen und kalten Daten (siehe das ES -Schema, der Schlüssel besteht darin, die heißen und kalten Standards zu beurteilen, die in der Middleware geschrieben werden können?)
Gegenwärtig reicht MySQL aus, um den Vorwärts-Index zu speichern, aber es kann direkt in einem Schritt olap verwendet werden.
Funktional verwandt
Es ist zu langsam, einen Index zu erstellen.
Indexkomprimierung, invertierter Index, dh, invertierte Index -Tabelle, anschließend ändern, um Offset zu speichern, verwenden Sie MMAP
Die Berechnung der Korrelation sollte berücksichtigt werden, tfidf, bm25
Verwenden Sie Präfixbäume, um Verbandsinformationen zu speichern
Huffman codiert komprimiertes Präfixbaum
Beim Erstellen eines Index wird die Dateiübertragungsadresse in den Dateiübertragungsstrom geändert
Python führt das BET -Modell ein, um Wörter für Wortsegmentierungsempfehlungen durchzuführen, und bietet eine GRPC -Schnittstelle
Die Speicherung von umgekehrten und Trie -Baum unterstützt eine konsistente Hash -Shard -Aufbewahrung
Wortvektor
PageRank
Der Bau- und Rückrufprozess der Trennung des Triebaums
Fügen Sie Wort Partizip hinzu, um das Wort Partizip zu tun
Erstellen Sie eine Indexplattform, separate Computer und Speicher, separater Index und Rückruf
Und Differenzbetrieb (Bitbetrieb)
Pagination
Sortieren
Richtige Eingabebestand wie "Lu Jiazui" -> "Lu Jiazui"
Geben Sie den Eintrag ein, um ihn zu verbinden, wie "Dongfang Ming" -Tipps -> "Dongfang Pearl"
Derzeit handelt es sich um eine blockbasierte Indexierungsmethode.
Fügen Sie dynamische Indexierung basierend auf der vorherigen hinzu (ich weiß nicht, ob die vorherige implementiert werden kann ...)
Reform den Reverse Index und verwenden Sie brüllende Bitmap, um Docid zu speichern (sehr schwierig)
TF -Klasse implementieren
Nach der Suche wird der Cache nicht gelöscht, was dazu führt, dass das Ergebnis mit dem vorherigen zusammengeführt wird.
Sortieroptimierung
Fangen Sie schnell an
Umwelt beginnt!
make env-up
Der kleine Datensatz befindet sich in source_data/movies_data.csv
Python beginnt!
Stellen Sie sicher, dass der Computer Python installiert hat. Stellen Sie sicher, dass die Python -Version> = 3.9, meine Version 3.10.2 ist
python --version
Installieren Sie die Venv -Umgebung
python -m venv venv
Aktivieren Sie die Venv Python -Umgebung
macos:
source venv/bin/activate
Fenster:
Ich werde kompatibel sein, nachdem ich das C -Laufwerk fertiggestellt habe ... Ich bin noch nicht mit dem Sieg gefahren ...
Installieren Sie Abhängigkeiten von Drittanbietern
pipinstall-rrequirements . txt
Golang beginnt!
Golang -Version> = go 1.16. Meine GO -Version ist 1.18.6
Laden Sie das Abhängigkeitspaket von Drittanbietern herunter
go mod tidy
Im Verzeichnis ausführen
make run-xxx(user,favortie ...)
# e.g:# make run-user# make run-favorite# 具体看makefile文件
Open Source -Beitrag
Bitte überprüfen Sie CONTRIBUTING_CN.md bevor Sie PR einreichen