-
Notifications
You must be signed in to change notification settings - Fork 0
Projekt Suche
Der search-service bietet 2 Funktionen an, um nach Projekten zu suchen. Einerseits über einen Cache im search-service und anderereseits über eine Query in der Datenbank.
Der Suchtext unterliegt folgender Struktur und Regeln:
-
Freie Wörter sind mit Leerzeichen getrennt voneinander, Feldwörter können Leerzeichen beinhalten
-
Es wird in allen Feldern und Tags nach den angegebenen freien Wörtern gesucht.
-
Um in spezifischen Feldern zu suchen, muss folgende Syntax genutzt werden:
- ="" ="" ="" ...
-
Wenn in spezifischen Feldern gesucht wird, gilt die Regeln, dass alle "Feldwörter" darin vorkommen müssen
-
Für jedes Projekt wird eine Score ermittelt, basierend auf den Suchwörtern. Basierend darauf werden die Projekte sortiert.
-
Die Rückgabe der Suche ist eine Liste von Projekten, wo nur die Projekt-id als Wert drin steht. Das Format ist "json".
-
Ein Suchtext (freies Wort oder Feldwort) muss mindestens 2 Zeichen lang sein.
Feldname | Wert |
---|---|
Beschreibung | 1 |
Kurzbeschreibung | 1 |
Betreuer | 50 |
Tag | 25 |
Titel | 50 |
Vorraussetzung | 5 |
Perfekte Übereinstimmung | * 5 |
Perfekte Tag Übereinstimmung | * 2,5 |
Wenn der Sonderfall der perfekten Übereinstimmung von Wort/Text und Feldinhalt auftritt, wird der Wert mit dem Wert des Feldes multipliziert. Bei Tags passiert dies je einzelnem Tag.
Für beide Suchfuntkionen gilt:
Zuerst werden alle Wörter ermittelt und bezogen auf die Felder in Listen gesammelt.
Der Service lädt alle Projekte aus der Datenbank. Diese werden in einem Cache verwaltet, wobei dieser bei jedem import von neuen Projekten angepasst wird.
Die gesamte Filter Logik wird in dieser Service-Klasse basierend auf dieser Liste von Projekten durchgeführt. Es gibt keine Datenbankanfrage bei der Ausführung der Suchfunktion.
Pagination wird in der Controller Funktion durchgeführt, nicht in der Service Klasse.
Der Score wird nur basierend auf freien Wörtern ermittelt, nicht basierend auf Feldwörtern.
Diese sind nur dafür da, Projekte aus der Resultat-Liste auszuschließen.
Wenn ein freies Wort in einem Feld gefunden wurde, wird der Gesamt-Score des Projekt um den spezifischen Multiplikator Wert erhöht. (Addition)
Wenn ein freies Wort eine perfekte Übereinstimmung hat mit dem Inhahlt eines Feldes wird die Gewichtgung dieses Feldes * "Perfekte Übereinstimmung" berechnet und zur Score hinzugefügt.
Es wird ein SQL prepared Statement vorbereitet und an die Datenbank gesendet. Das Ergebnis ist eine Liste von IDs. Diese Liste wird im Controller zu einer json Datei verarbeitet.
Pagination wird in der Datenbank durchgeführt, nicht in der Service-Klasse.
Alle Feldwörter müssen in den Resultat Projekten vorkommen. Der Score wird anhand aller Wörter und Feldwörter ermittelt.
Wenn ein Tag eine perfekte Übereinstimmung hat mit dem Suchtext, dann wird dieser * "Perfekte Tag Übereinstimmung" mit der Tag Gewichtung berechnet.
Wenn ein Suchtext in einem Feld gefunden wird, dann wird der Score entsprechend des Wertes erhöht. Dies gilt für jeden Fund des Suchtextes in einem Feld. Mehrmaliges Vorkommen in einem Feld bedeutet mehrmalige Erhöhung der Score.