====== Übersicht ====== Verwendete Komponenten * Auslieferung * Session Store * Einpfleger Der Herz des Systems zur Ähnlichkeitsanalyse. Ziel ist es, für ein beliebiges Objekt, die “ähnlichsten” Objekte zurückzugeben. Das System ist nicht auf Bilder beschränkt, obwohl die Domäne als Beispiel dient. Für Bilder ist ein Objekt ein Produkt. Dafür ist es notwendig, dass Objekt zu beschreiben, was durch Features geschieht. Die Ähnlichkeit wird dabei wie folgt definiert: beliebige Abstandsfunktion, oder Ähnlichkeitsfunktion auf den Objekt-Features, mit möglicher Gewichtung der einzelnen Features, inkl. pro Dimension, wobei die Gewichtung von Sitzung/Kunde/Kategorie abhängen kann. Anschließend eine optionale Filterung der Resultate. Die Frage, ob zwei Objekte identisch sind kann nur durch entsprechende Annotationen entschieden werden, oder durch eine ident-Prüfung der Features. In Normalfall sollen Rückgabelisten keine Duplikate von Objekten enthalten. Da Kategorien beliebig groß sein können, muss eine Aufteilung einer Anfrage möglich sein “teile und herrsche”. ====== Bottom-Up-Sicht ====== Eine Instanz verwaltet ein oder mehrere Kunden. Ein Kunde enthält alle Daten zur Beantwortung der Anfragen, also Meta- und Feature-Daten. Diese Daten werden niemals direkt geändert, also lediglich lesend verwendet. Ein Kunde gliedert sich in verschiedene Kategorien, die auch virtuell sein können, und jede Kategorie ist in verschiedene Produkte unterteilt. Ein Produkt kann in mehreren Kategorien vorhanden sein (“Multi-Kategorie”). Jedes Produkt wird durch eine Menge Features beschrieben und enthält, optional, auch Metadaten. Dass Produkt wird durch eine eindeutige ID referenziert. Jedes Produkt kann mit jedem Produkt verglichen werden, es sind also folgende Zuständen möglich: f(a, b) = 1 => die Produkte sind gemäß der Features identisch f(a, b) > 0 => Produkt a liegt bei Rückgabe vor Produkt b f(a, b) < 0 => Produkt a liegt bei Rückgabe hinter Produkt b Jedes Produkt muss mit Hilfe von (Kunden_ID, Produkt_ID) eindeutig einer Menge von Features zugeordnet werden können. Ausnahme ist, falls das Objekt direkt durch Features beschrieben vorliegt (“Upload eines Bildes”). In diesem Fall muss eine Einordnung in Kategorien vorliegen oder vorgenommen werden. Gültigkeitsbereich einer Anfrage ist damit die Referenz und eine Menge von Kategorien, bzw. die darin enthaltenen Objekte. Als Ausgabe wird eine -sortierte- Liste von Objekten zurückgeliefert, zusammen mit der Score bzgl. der Referenz. ====== Filter-Funktion ====== Die folgenden Filterarten müssen unterstützt werden * Bereichsanfragen “range”, z.B Preis * substring-Suche oder reguläre Ausdrücke für String-Daten * logische Operationen NOT, OR, AND auf Meta-Daten * Vergleich auf Feature-Daten * speziell binäre Filter auf Attributen, die Bestandteil der Metadaten sind * Abstufungen match any vs. all Weiterhin muss es möglich sein, Filter pro Kunde zu definieren. ====== Interface ====== Anfragen eines Produkts ''%%Lilly.get_best_matches(Kunden_ID, Produkt_ID, Sitzungs_ID, Optionen)%%'' Anfragen eines Produkts mit variablen Features ''%%Lilly.get_best_matches(Feature_Desc, Sitzungs_ID, Optionen)%%''