Skip to content
This repository has been archived by the owner on Sep 7, 2020. It is now read-only.

Projekt Suche

Stephan edited this page Oct 22, 2019 · 3 revisions

Suche nach Projekten

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.

Regeln der Suche

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.

Multiplikator-Werte
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.

Allgemein

Für beide Suchfuntkionen gilt:

Zuerst werden alle Wörter ermittelt und bezogen auf die Felder in Listen gesammelt.

Suche von Projeken im Cache

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.

Suche von Projekten mittels SQL

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.