Verschiedene Möglichkeiten, einen Lucene-Suchindex via PHP einzubinden

Lucene – Ein Suchindex in der Praxis
Kommentare

Falls man die Funktion zum Löschen eines Eintrags sucht, sollte man im Hinterkopf haben, dass man eigentlich nicht aus einem Suchindex löscht. Intern werden gelöschte Einträge in einer separaten Datei

Falls man die Funktion zum Löschen eines Eintrags sucht, sollte man im Hinterkopf haben, dass man eigentlich nicht aus einem Suchindex löscht. Intern werden gelöschte Einträge in einer separaten Datei gehalten. Bei größeren Löschaktionen sollte man den Index neu aufbauen.

Differenziert suchen

Wer sich für den Einsatz eines auf Lucene basierenden Suchindexes entscheidet, entscheidet im gleichen Zug auch, dass die Daten auf verschiedenste Art wieder gesucht werden können. Die meisten Nutzer kennen nur das Eingabefeld, in das man ein oder zwei Wörter eintippt, aber dass man mitunter auch sehr differenziert suchen kann, ist ihnen nicht bewusst. Hier hilft nur konsequente Aufklärung – denn Lucene kennt sowohl Term- und Phrasensuche mit Booleschen Operatoren als auch eine Wildcard-Suche, Fuzzy-Suche oder Bereichsanfragensuche. Eine Übersicht findet sich in Tabelle 2: Die Lucene Suchabfragesyntax.

border=“1″ cellpadding=“2″ cellspacing=“2″> Phrasensuche php: Sucht genau das Wort php in allen indexierten Feldern und „PHP Java“ sucht genau die Zeichenfolge PHP Java Feldersuche titel: Framework: Sucht nur in den Feldern titel nach dem Wort Framework Boolesche Logik and, or, not, () titel:Zend AND autor:Müller oder +titel:Zend + autor:Müller: Dieser Ausdruck sucht in dem Feld titel nach dem Wort Zend und in dem Feld autor nach dem Wort Müller, und nur wenn beides in einem Dokument gefunden wird, ist es ein Treffer Wildcards p?p: Ein Fragezeichen ist ein Platzhalter für genau einen Buchstaben, und ein p*p sucht nach allem, was mit p anfängt und mit p aufhört. Achtung: Ein Wildcard darf nie am Anfang eines Wortes stehen. Verstärkungsfaktor Der Verstärkungsfaktor wirkt sich die Reihenfolge der Suchtreffer beim Retrieval aus: php^4 java bewirkt, dass die Treffer mit php um den Faktor vier höher gewichtet werden als die mit java. Fuzzy-Suche (nach dem Levenshtein-Distanz-Algorithmus) Der Algorithmus ermittelt die Anzahl der Operationen, die nötig sind, um von einem Wort auf ein anderes zu kommen. Also findet die Suche Framework auch Flamework oder Frammwerk. (Die Fuzzy-Suchergebnisse werden mit dem Verstärkungsfaktor 0,2 gewichtet.) Distanzsuche „php java~7: Sucht einen Treffer, bei dem die Wörter php und java nicht weiter als sieben Wörter entfernt sind. Bereichssuche mod_date:[20010101 TO 20030101] sucht in einem Bereich inklusiv der beiden Bereichswerte und z.B. title:{Apfel TO Birne} sucht exklusiv der beiden Werte Syntaxausschluss (1+1):2: Findet genau den Ausdruck (1+1):2. Reserviert sind: esc + – || ! ( ) { } [ ] ^ “ ~ * ? : }
Tabelle 2: Die Lucene-Suchabfragesyntax
Die drei Fragezeichen

Derzeit existieren drei Möglichkeiten, um sich Lucene zu Nutze zu machen, und die drei Möglichkeiten könnten nicht unterschiedlicher sein. Dabei sollte noch erwähnt werden, dass hier keine Lösungen berücksichtigt werden, bei denen eine Middleware-Kommunikation via SOAP oder XML-PRC eingesetzt wird, denn diese Art des Datenaustausches ist zwar nach wie vor möglich, stellt aber aufgrund des nicht zu vernachlässigenden Kommunikations-Overheads zwischen den Objekten die langsamste und somit auch die schlechteste Alternative dar. Im Folgenden sollen die drei sinnvollen Wege kurz erläutert werden.

Original Lucene mit PHP-Java-Bridge

Die PHP-Java-Bridge (PJB) ist eine Entwicklung, mit der man Java-Programme starten kann und die dann zu diesen Prozessen eine Kommunikation via JSR 223 herstellt. Dabei existiert die PJB schon sehr lange und wurde früher als Extension in PHP eingebunden. Inzwischen ist das nicht mehr notwendig und die Software installiert sich komplett neben einer PHP-Installation. Dazu baut die Brücke einen Kommunikationsserver auf localhost:8080 (oder einem anderen Port) auf, und auf der PHP-Seite werden über ein PHP-include() entsprechende Kommunikationsroutinen bereitgestellt. Die PJB als solche benötigt mindestens Java 1.4 und kann auch ohne Apache oder Tomcat laufen. Die Anwendung von Lucene ist nur eine Einsatzmöglichkeit. Für Windows-Benutzer gibt es einen kleinen „HowTo“-Film auf der Homepage der Entwickler und im Programmpaket haben die Entwickler zwei Beispielprogramme für den Einsatz von Lucene beigefügt.

Die Vorteile dieser Lösung sind, dass die Installation parallel zu einem schon existierenden System vorgenommen werden kann und man Zugriff auf alle von Lucene bereitgestellten Java-Klassen hat. Ferner kann man somit immer das aktuelle Lucene-Release verwenden. Der Nachteil ist, dass man sich doch ein wenig in Java auskennen muss und die Kommunikation über einen Zwischenserver läuft. Als etwas aufwändigere Alternative existiert noch die freie PHP-Java-Brücke der Firma CosmoCode, die aber mehr eine Interprozesskommunikation zwischen Java- und PHP-Objekten darstellt. Hier muss der Benutzer sich selber um die Programmierung und den Aufbau des PHP-Frontend und des Java-Backends kümmern.

Unsere Redaktion empfiehlt:

Relevante Beiträge

Meinungen zu diesem Beitrag

X
- Gib Deinen Standort ein -
- or -