Social Software powered by Instant Communities
Springe direkt: zur Navigationzum Inhaltzur Sidebar

Archiv für 'Lucene'

Zend_Search_Lucene und Symfony – Teil 2

27.07.2007

Die Daten, die in unserem Anwendungsfall indexiert werden, sind Daten, die für grundsätzliche Zwecke innerhalb der Applikation in einer Datenbank gehalten werden, z. B. der Vor- und Nachname eines Nutzers.

Das inkrementelle Aufbauen bzw. Updating des Indexes hat den Vorteil, dass die Datenbank und der Index nicht durch umfangreiche Reindexing-Prozesse zu bestimmten Zeiten zwecks Aktualisierung belastet werden. Zu indexierende Daten werden, wie im ersten Teil erwähnt, in einer Queue, eine Tabelle in der Datenbank, geparkt und von einem Batch-Script in regelmäßigen kurzen Abständen weiterverarbeitet. Somit sind lediglich kleine Datenmengen zu lesen und zu schreiben. Der Prozess ist also folgender:

  1. Daten in die Queue schreiben.
  2. Queue auslesen.
  3. Lucene document mit ausgelesenen Daten erstellen.
  4. Anhand einer definierten ID prüfen, ob document für ausgelesene Daten bereits existiert.
  5. Document ggf. aus dem Index entfernen (bzw. als deletable markieren).
  6. Document dem Index hinzufügen.
  7. Ausgelesene Daten aus der Queue entfernen.

Zusätzlich wird der Index in regelmäßigen Intervallen optimiert (siehe auch Teil 1).

Die Queue wird mit einer Tabelle in der Datenbank realisiert. Die Daten in der Queue bestehen lediglich aus serialisierten Objekten; deren Attribute werden letztendlich indexiert. Die Tabelle ist entsprechend simpel und bietet durch die Serialisierung dennoch absolute Flexibilität bzgl. irgendwelcher Daten:

CREATE TABLE `index_user_queue` (
`id` bigint(20) NOT NULL auto_increment,
`serialized` text collate utf8_unicode_ci,
PRIMARY KEY (`id`)
)

(more…)

Zend_Search_Lucene und Symfony – Teil 1

10.07.2007

Mit Zend_Search_Lucene als Teil des Open Source Frameworks von Zend steht für PHP5 eine Index-basierte Textsuche zur Verfügung. Zend_Search_Lucene ist abgeleitet vom Apache Lucene Projekt. Die Indexdateiformate sind mit Apache Lucene Version >1.4 kompatibel.

Lucene bzw. dessen Indexdateiformat unterstützt keine Aktualisierung von Dokumenten. Will man ein document bzw. enthaltene Daten aktualisieren, muss das betreffende document erst gelöscht und dann mit den neuen Daten wieder indexiert werden. Ohne (regelmäßige) Optimierung des Indexes über $index->optimize() fragmentiert so der Index, was zu Einbußen in der Performance führt. Es empfiehlt sich zudem, den Abschnitt im Zend-Manual zur automatischen Indexoptimierung zu lesen.

UTF-8 wird von Zend_Search_Lucene unterstützt, jedoch werden die Daten case-sensitive behandelt.

Die Integration von Zend_Search_Lucene in das PHP-Framework Symfony, siehe auch der Artikel von Andreas Stephan, ist sehr einfach, wählt man den Weg, den Peter Van Garderen beschreibt. Nach dem Kopieren der benötigten Klassen in den lib-Ordner des jeweiligen Symfony-Projektes steht Lucene global in der Applikation zur Verfügung. Es bietet sich natürlich an, eine Klasse, welche die Funktionalität zur Bearbeitung des Indexes und zur Suche bereitstellt, ebenfalls in lib anzulegen. Die Erstellung eines Indexes ist simpel:

$index = Zend_Search_Lucene::create(self::getIndexLocation($indexName));

In diesem Beispiel können über getIndexLocation($indexName) an mehreren definierten Zielorten auf dem Server Indexe erstellt und angesprochen werden. (more…)

You are currently browsing the archives for the Lucene category.

Creative Commons License
This work is licensed under a
Creative Commons Attribution-Share Alike 2.5 License.
t8d blogged mit WordPress