Versionen im Vergleich

Schlüssel

  • Diese Zeile wurde hinzugefügt.
  • Diese Zeile wurde entfernt.
  • Formatierung wurde geändert.

Christof Mainberger, 21.11.2024

Vor einiger Zeit kam aus der Staatlichen Kunsthalle Karlsruhe der Vorschlag, mit der ExpoDB nach Sammlungsobjekten mit bestimmten Farben zu suchen.
Leider kam es bislang lediglich dazu, dass wir uns dazu ein Konzept überlegt haben. Wir haben es noch nicht implementiert und insofern gesichert, dass es überhaupt funktioniert.
Im Folgenden soll jedoch das Konzept veranschaulicht werden, da die Frage Probleme des Indexierens und Suchens generell verdeutlicht.


Ein sinnfälliges Modell für eine Suchmaschine wie Solr, das in der ExpoDB verwendet wird, ist ein Kochbuch. Stellen wir uns vor, wir hätten Rotkraut und überlegen uns, was wir nun damit kochen wollen.
Außerdem haben wir den Kochbuch-Klassiker "Ich helf dir kochen". Wie würden wir vorgehen? Sicher nicht bei Seite 1 aufschlagen und Seite für Seite durchgehen, ob das Stichwort "Rotkraut" auftaucht
(besser wäre es schon, sich auf das Kapitel Gemüse zu beschränken). Nein, die Autorin hat hinten im Buch Indexe für uns vorbereitet.

Wir wählen nun nicht den Index mit den Rezeptnamen. In Rezeptnamen ist "Rotkraut" ggf. vielleicht erwähnt, aber nicht zuverlässig immer, wenn Rotkraut drin ist.
Sondern wir wählen den Index zu den Zutaten und richtig: Wenn wir nun statt nach "Rotkraut" nach "Rotkohl" suchen, sind dort eine ganze Reihe Seitenzahlen zu all jenen Rezepten vermerkt, wo Rotkohl verwendet wird:
ein paar Gemüse-Beilagen und vielleicht noch Gerichte, wo wir es gar nicht erwartet hätten. 

Ebenso ist es bei der Indexierung für die ExpoDB: Es ist nicht möglich, zum Suchzeitpunkt den Datenbestand von ersten Datensatz bis zum letzten durchzugehen und den Suchbegriff mit den Datensatz zu vergleichen.
Wir müssen vorab einen Index erstellen, der uns dann später einen schnellen Zugriff auf die relevanten Datensätze ermöglicht. Dabei ist hilfreich, nicht nur Indexe "mit allem" zu erstellen, sondern spezialisierte Indexe für spezifische Aufgaben.
Und es ist sinnvoll, die Begrifflichkeit einer "Normalisierung" (von Rotkraut zu Rotkohl) zu unterziehen. Dies müssen wir dann bei Suchen auch mit den Suchbegriffen machen, damit wieder alles zusammenpasst. 

Kommen wir zu den Farben: Es ist nicht möglich zum Zeitpunkt, wenn jemand eine Farbe zum Suchen eingibt, alle Bilder nacheinander hervorzuholen, sie irgendwie alle mit dieser Farbe zu vergleichen und  dann eine nach Ähnlichkeit sortierte Liste auszugeben.


Auch hier müssen wir vorab einen passenden spezialisierten Index erstellen und - nachdem wir Solr einsetzen - muss sich dieser Index in die sonst eingesetzte Technologie von Solr und der ExpoDB einordnen. 

Ein digitales Bild besteht aus Pixel, die (im RGB-Farbraum) eine Farbcodierung in Form von drei Zahlen zwischen 0 und 255 tragen. Wir können nun jeder der damit kodierbaren 16 Mio. Farbwerte als unterschiedliche Wörter

ansehen
und

ansehen und das Bild sozusagen als einen Text, in dem diese Wörter verwendet werden. Mit dieser Vorstellung bewegen wir uns bereits in dem Feld, das wir in der ExpoDB sonst auch mit Solr behandeln: die Suche nach Wörtern in Texten. 

Nun können Bilder viele Pixel enthalten, also dann ziemlich langen Texten entsprechen. Trotz der Effizienz von Solr führt dies evtl. zu viel Speicherbedarf und Rechenzeit.
Um diesen Aufwand zu reduzieren, können wir auf die gängigen Algorithmen zur Verkleinerung von Bildern zurückgreifen.
Diese "verpixeln" zwar das Bild, so dass Konturen verzerren und verschwimmen, aber sie erhalten die Farben, um die es hier geht, bzw. reduzieren diese systematisch.
Wir könnten also Kopien zu den Bildern für die Indexierung einheitlich auf 64 * 64 verkleinern - das erscheint klein, es wären dann immer noch "Texte" mit 4096 "Wörtern".
Diese enthalten zu den ursprünglichen Farben ähnliche Farben und zwar in ähnlichen Mengenverhältnissen. 

Beim Suchen sind nicht die Treffer zu genau einer der 16 Mio. Farben relevant, sondern auch die zu ihr "ähnlichen" benachbarten Farben.
Sprich, man sucht nicht nur genau nach Kobaltblau, sondern auch Dunkelblau, Himmelblau, Azurblau, Blau überhaupt...

Wie können wir also Farbähnlichkeit einbauen?
Wir könnten statt alle Farbwerte zwischen 0 und 255 (als Hexadezimalzahlen 00 bis FF) nur noch jeden 16sten Wert berücksichtigen und alle dazwischen auf den nächsten von jenen 16 Werten abbilden.
Das würde von Farbcodes in Hexadezimalschreibweise, z.B. A23B67 zu A36 führen, also zu kompakteren "Worten" mit 3 statt 6 Buchstaben. Es wäre auszuprobieren, ob diese Reduktion zu passenden Ergebnissen führt.
Sonst wäre eine Strategie, jeden Farbwert nicht nur auf einen einzigen gemittelten Farbwert abzubilden, sondern zu mehreren in der Umgebung im Farbraum. 

Bei der Suche müssten die zu suchenden Farben der gleichen Behandlung unterzogen werden, wie die der Bilder bei der Indexierung.
Nach dem oben skizzierten Ansatz könnte statt nach 16 Mio. Farbwerten im Hintergrund nur noch nach 4096 vielen gesucht werden. Mutmaßlich wäre dies für beabsichtigte Anwendung völlig ausreichend. 

Was passiert nun also zusammengefasst bei der Suche?
Die Nutzer*in wählt (z.B. mit einer "Farbpipette") eine Farbe aus, zu der sie passende Sammlungsobjekte finden möchte: Diese Farbe wird auf die nächst benachbarte der 4096 Farben gemappt, die auch bei der Indexierung der Bilder vorab genutzt wurden.
Mit dem Ergebnis als "Suchterm" wird dann im Index gesucht: Um so öfters der gesuchte "Suchterm" (im Verhältnis zu allen Wörtern) in dem "Text" vorkommt, der im Index das Bild repräsentiert, um so höher wird dieser Treffer im Ergebnis gerankt.
Sofern sich die Annahmen über die Verkleinerung von Bildern und die Abbildung auf "benachbarte" Farben bewahrheitet, müsste die Nutzer*in performant eine Trefferliste erhalten, deren Bilder ihrer Suchfarbe möglichst gut entsprechen.

Wie gesagt ist all dieses bislang noch nicht implementiert. Ob die skizzierten Konzepte tragfähig sind, müsste erst noch erwiesen werden. Immerhin würden sie sich nahtlos in die bisherigen Technologien und Schnittstellen der ExpoDB einfügen.
Sicherlich gibt es auch andere, spezialisierte und leistungsfähigere Ansätze für Farben in Suchmaschinen - auch diesen Ansatz haben wir nicht selbst erfunden, sondern nur im Internet gefunden.
Als ein Aspekt muss immer dabei beachtet werden, wie hoch sich der Aufwand in unserem konkreten Zusammenhang ExpoDB darstellt.

Für die ja durchaus bunte Perspektive "Farbsuche" erscheint der Aufwand akzeptabel, sofern sich das oben skizzierte Vorgehen so verwirklichen lässt.