Package de.pk86.bf

Keyword-Algorithmus (de.pk86.bf)

Einleitung / Problemstellung Jeder benutzt bei der Recherche im Internet die gängigen Suchmaschinen auf inzwischen selbstverständliche Art und Weise:  
Aus der Menge aller Web-Sites möchte ich all die haben, bei denen die Begriffe "bla" und "blub" aufgeführt sind, aber es sollen alle weglassen werden, die "blob" enthalten: "bla blub -blob"
(Das gab letztens mit Google 227.

See: Description

Package de.pk86.bf Description

Keyword-Algorithmus (de.pk86.bf)


Einleitung / Problemstellung

Jeder benutzt bei der Recherche im Internet die gängigen Suchmaschinen auf inzwischen selbstverständliche Art und Weise:  
Aus der Menge aller Web-Sites möchte ich all die haben, bei denen die Begriffe "bla" und "blub" aufgeführt sind, aber es sollen alle weglassen werden, die "blob" enthalten: "bla blub -blob"
(Das gab letztens mit Google 227.000 Resultate bei 0.39 Sekunden Suchdauer.)

Daß die Suchmaschinen recht flott Ergebnisse liefern - selbst bei komplizierten Abfragen und großen Datenmengen - wird als selbstverständlich angesehen und ist die Voraussetzung für ihren Erfolg.

Nur wie funktioniert sowas?

Die Aussage "Wird irgendeine große Datenbank sein!" ist richtig und falsch zu gleich:
Daten in einer Datenbank vorzuhalten ist immer eine gute Idee;
aber wie sieht das mit dem Zugriff auf die Daten aus?

Die Überraschung besteht darin, daß für die Formulierung derartiger Such-Abfragen eine relationale Datenbank mit SQL ungeeignet ist, weil viel zu langsam.

Features

Der hier in Java realisierter Suchalgorithmus ist auf Geschwindigkeit optimiert. Jede beliebige Abfrage dauert nicht länger als wenige Millisekunden.

Es können beliebige "Objekte" definiert werden, die mit beliebigen "Eigenschaften" versehen sind.

Auf dieser Basis könne Abfragen bezüglich der "Eigenschaften" formuliert und die Ergebnismenge der "Objekte" wird geliefert.

Welcher Art die Objekte und ihre Eigenschaften dabei sind, bleibt der Phantasie des Anwenders überlassen. Hier ist ein "Objekt" lediglich über eine numerische Object-ID definiert, und eine "Eigenschaft" als eine Zeichenkette von beliebig vielen Zeichen1.

Begrenzungen

In einem logischen Ausdruck können keine Eigenschaften mit Wildcards eingesetzt werden; also "bl*" für bla, blub, blob etc.

Die Aufeinanderfolge von Eigenschaften ist dem System unbekannt, es sei denn, es wird eine Eigenschaft entsprechend definiert:
Eigenschaften dürfen hier auch White Space enthalten: "Meine Eigenschaft"; auf diese Art können auch beliebte englische Ausdrücke als Eigenschaft definiert werden: "open source"

Die Vergleichbarkeit dieser "kleinen" Suchmaschine mit den "großen" endet damit, daß derartig riesige Datenmengen nicht problemlos gehandhabt werden können.

Es wird vermutet, daß mit diesem Algorithmus bis zu 5 Millionen Objekte mit 100.000 Eigenschaften zuverlässig und schnell verarbeitet werden können. Die Datenbank wird dann ca. 3 bis 4 GB umfassen.

Alles was darüber hinaus geht ist eher ein Problem der darunter liegenden Datenbank, sehr große Datenbestände zu handhaben; vor allem die Datenbestände auf mehrere Rechner zu verteilen. Google behauptet 3 Mrd Sites indiziert zu haben; es ist unbekannt, wieviele "Eigenschaften" es dabei gibt (alle Worte aus allen Sprachen dieser Welt!). Das dürfte dann wohl im zweistellig TB-Bereich liegen....

Installation

Das Framework wurde bisher mit Postgres getestet; im Kern ist jede Datenbank geeignet, die über die Möglichkeit der Komprimierung verfügt.



1Bei Einsatz von PostgreSQL sind das 1GB