Lucene-Index: Unterschied zwischen den Versionen

Aus SiteparkWiki
Zur Navigation springen Zur Suche springen
K
 
(4 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
 +
__TOC__
 
Der IES bietet interne Funktionen zur Erstellung und Verwaltung eines Lucene-Index. Apache-Lucene (http://lucene.apache.org) ist eine ''hochperformante, hochfunktionale, textbasierte Suchmachine''. Dabei handelt es sich im wesentlichen um eine Definition, wie Daten für Volltext-Suchen organisiert werden.
 
Der IES bietet interne Funktionen zur Erstellung und Verwaltung eines Lucene-Index. Apache-Lucene (http://lucene.apache.org) ist eine ''hochperformante, hochfunktionale, textbasierte Suchmachine''. Dabei handelt es sich im wesentlichen um eine Definition, wie Daten für Volltext-Suchen organisiert werden.
  
 
Ein solcher Index wird innerhalb eines eigenen Ordners im Dateisystem über mehrere Dateien organisiert. Das ermöglicht die transparente Verteilung auf unterschiedliche Systeme über Standard-Mechanismen. Der Zugriff auf den einen solchen Index ist über eine Vielzahl von Programmiersprachen möglich:
 
Ein solcher Index wird innerhalb eines eigenen Ordners im Dateisystem über mehrere Dateien organisiert. Das ermöglicht die transparente Verteilung auf unterschiedliche Systeme über Standard-Mechanismen. Der Zugriff auf den einen solchen Index ist über eine Vielzahl von Programmiersprachen möglich:
  
* Java
+
* Lucene Java
* IES (nativ)
+
* Sitepark IES (nativ)
* PHP (über das Zend-Framework: http://www.framework.zend.com)
+
* Zend Search - Lucene Implementierung mit dem Zend Framework für PHP 5
* C# and .NET
+
* CLucene - Lucene Implementierung in C++
* C (mit Hilfe von Perl und Ruby)
+
* Lucene.Net - Lucene Implementierung in .NET
* Python
+
* Lucene4c - Lucene Implementierung in C
* ...
+
* LuceneKit - Lucene Implementierung in Objective-C (Cocoa/GNUstep support)
 +
* Lupy - Lucene Implementierung in Python (wird nicht weiter entwickelt)
 +
* NLucene - eine andere Lucene Implementierung in .NET (veraltet)
 +
* Plucene - Lucene Implementierung in Perl
 +
* KinoSearch - eine neue Lucene Implementierung in Perl
 +
* PyLucene - GCJ-kompilierte version von Java Lucene integriert mit Python
 +
* MUTIS - Lucene Implementierung in Delphi
 +
* Ferret - Lucene implementation in Ruby
  
Auch der WebCrawler Nutch (http://lucene.apache.org/nutch/) erstellt für die Volltextsuche einer Website einen Lucene-Index. Diese vielfältigen Einsatzmöglichkeiten und die unglaubliche Performanz machen den Einsatz eines solchen Index interessant.
+
Auch der WebCrawler Nutch (http://lucene.apache.org/nutch/) erstellt für die Volltextsuche einer Website einen Lucene-Index. Diese vielfältigen Einsatzmöglichkeiten und die hohe Performanz machen den Einsatz eines solchen Index interessant.
  
 
==IES & Lucene Index==
 
==IES & Lucene Index==
Der IES bietet über einen speziellen <code>IndexerService</code> die Möglichkeit eigene Indices pro Mandant zu definieren. Auf einfache Art werden dann automatisch Inhalte aus Artikeln beim Speichern in den Index übernommen. Der IES unterstützt dabei eine Vielzahl von Contenttypen, sowie die Möglichkeit Default-Werte anzugeben. Der hierbei erstellte Index ist in UTF-8 kodiert und unterstützt damit vollständig jede Sprache.
+
Der IES bietet über einen speziellen <code>IndexerService</code> die Möglichkeit eigene Indizes pro Mandant zu definieren. Auf einfache Art werden dann automatisch Inhalte aus Artikeln beim Speichern in den Index übernommen. Der IES unterstützt dabei eine Vielzahl von Contenttypen, sowie die Möglichkeit Default-Werte anzugeben. Der hierbei erstellte Index ist in UTF-8 kodiert und unterstützt damit jede Sprache.
  
Auch die Indizierung von binären Inhalten ist für folgende Dateitypen mölglich:
+
Auch die Indizierung von binären Inhalten ist für folgende Dateitypen möglich:
  
 
* PDF-Dokumente (bis PDF-Version 1.5)
 
* PDF-Dokumente (bis PDF-Version 1.5)
Zeile 39: Zeile 47:
 
:* <code>createdBy</code>: ID des Nutzers, der das Element erstellt hat
 
:* <code>createdBy</code>: ID des Nutzers, der das Element erstellt hat
 
* '''Artikel''' (gemeinsame Felder aller Artikeltypen)
 
* '''Artikel''' (gemeinsame Felder aller Artikeltypen)
:* <code>publisher</code>: Liste aller Publisher-ID's
+
:* <code>publisher</code>: Liste aller Publisher-IDs
 
* '''Artikel mit Datei''' (gemeinsame Felder aller Medien oder normalen Artikel'''
 
* '''Artikel mit Datei''' (gemeinsame Felder aller Medien oder normalen Artikel'''
 
:* <code>filename</code>: Dateiname
 
:* <code>filename</code>: Dateiname
Zeile 48: Zeile 56:
 
:* <code>mime</code>: Mime-Type
 
:* <code>mime</code>: Mime-Type
  
Allerdings bildet der Index stets die Eingaben der Redakteure ab und hat keine Beziehung zu möglichen Freigaben. Es wird stets die aktuelle Version eines Artikels für alle konfigurierten Felder verwaltet. Es handelt sich somit um ''nicht freigegebene Inhalte''. Mögliche Publkationen müssen eigenständig ausgewertet werden.
+
Allerdings bildet der Index stets die Eingaben der Redakteure ab und hat keine Beziehung zu möglichen Freigaben. Es wird immer die aktuelle Version eines Artikels für alle konfigurierten Felder verwaltet. Es handelt sich somit um ''nicht freigegebene Inhalte''. Mögliche Publkationen müssen eigenständig ausgewertet werden.
  
 
==Konfiguration eines Index==
 
==Konfiguration eines Index==
Um einen Index zu definieren wechselt man im ''IESAdmin'' in den Bereich ''Indexer''. Dort kann man sowohl den Anker, als auch den Pfad, an dem der Index gespeichert werden soll angeben. Außerdem wählt man in welchen Mandanten dieser Index verwendet werden soll.
+
Um einen Index zu definieren, wechselt man im ''IESAdmin'' in den Bereich ''Indexer''. Dort kann man sowohl den Anker, als auch den Pfad in dem der Index gespeichert werden soll angeben. Außerdem wählt man in welchen Mandanten dieser Index verwendet werden soll.
  
Um einen Index zu befüllen, muss im entsprechenden Template ein Formularfeld mit dem Namen ''SYS_INFE_indexes'' angegeben werden. Eine kommaseparierte Liste von Ankern gibt an in welche Indizes die Daten des Artikel übernommen werden sollen. Die Konfiguration regelt dabei, wie die Daten zu interpretieren sind.
+
Um einen Index zu befüllen, muss im entsprechenden Template ein Formularfeld mit dem Namen ''SYS_INFE_indexes'' angegeben werden. Eine kommaseparierte Liste von Ankern gibt an, in welche Indizes die Daten des Artikel übernommen werden sollen. Die Konfiguration regelt dabei, wie die Daten zu interpretieren sind.
  
 
Die Felder, die übertragen werden sollen, werden im IESAdmin für jeden Index einzeln definiert. Ein Indexer-Feld besitzt folgenden Felder:
 
Die Felder, die übertragen werden sollen, werden im IESAdmin für jeden Index einzeln definiert. Ein Indexer-Feld besitzt folgenden Felder:
Zeile 65: Zeile 73:
 
:Gewichtung des Feldes, das die Sortierreihenfolge bei Suchen auf den Index beinflusst.
 
:Gewichtung des Feldes, das die Sortierreihenfolge bei Suchen auf den Index beinflusst.
 
*Speichern
 
*Speichern
:Gibt an, ob der Wert nicht nur indiziert sonder auch gespeichert werden soll. Werden die Daten nicht nur indiziert, sondern auch im Index gespeichert können nach der Suche auf den Index die Werte auch ausgegeben werden. Die Größe des Indexes erhöht sich allerdings erheblich, wenn auch die Daten mitgespeichert werden.
+
:Gibt an, ob der Wert nicht nur indiziert, sonder auch gespeichert werden soll. Werden die Daten nicht nur indiziert, sondern auch im Index gespeichert, können nach der Suche auf den Index die Werte auch ausgegeben werden. Die Größe des Indexes erhöht sich allerdings erheblich, wenn auch die Daten mit gespeichert werden.
 +
 
 +
==Technische Angaben==
 +
Die Indizierung der Inhalte wird vom IES über einen eigenen <code>IESAnalyzer</code> vorgenommen. Dieser basiert seinerseits auf folgenden Filtern:
 +
* IESTokenizer
 +
:gültige Zeichen eines Tokens (Wortes) für die Analyse eines Textes bestehen aus folgenden Zeichen:
 +
:* <code>Character.isLetter</code>
 +
:* <code>Character.isDigit</code>
 +
:* <code>§</code>
 +
:* <code>$</code>
 +
:* <code>%</code>
 +
:* <code>€</code>
 +
:* <code>@</code>
 +
:* <code>&</code>
 +
:legt fest, dass mit jedem der nicht genannten Zeichen, inkl. Zahlen und Buchstaben, ein neues Wort beginnt.
 +
* LowerCaseFilter (<code>org.apache.lucene.analysis.LowerCaseFilter</code>)
 +
:alle Zeichen werden als ''klein geschrieben'' interpretiert.
 +
* StopFilter (<code>org.apache.lucene.analysis.StopFilter</code>)
 +
:Zeichen, die nicht in den Index aufgenommen werden
 +
:* <code>/</code>
 +
:* <code>:</code>
 +
:* <code>_</code>
 +
:* <code>-</code>
 +
:* <code>+</code>
 +
:* <code>,</code>
 +
:* <code>.</code>
 +
:* <code>,</code>
 +
:* <code>;</code>
 +
:* <code>*</code>
 +
:* <code>\</code>
 +
:* <code>?</code>
 +
 
 +
Für eine Suche auf diesen Index sollten Suchanfragen entsprechend ''analysiert'' werden, damit vergleichbare Daten erzeugt werden. Da ein Lucene-Index nur text-basierte Informationen aufnehmen kann, verwendet der IES eine Routine zur Konvertierung in Long-Werte gleicher Länge.
  
<!--
 
 
<noinclude>
 
<noinclude>
 
[[Category:Funktionsbeschreibungen]]
 
[[Category:Funktionsbeschreibungen]]
Zeile 74: Zeile 113:
 
[[Category:Qualität_des_Codes_prüfen]]
 
[[Category:Qualität_des_Codes_prüfen]]
 
</noinclude>
 
</noinclude>
-->
 

Aktuelle Version vom 18. August 2009, 12:21 Uhr

Der IES bietet interne Funktionen zur Erstellung und Verwaltung eines Lucene-Index. Apache-Lucene (http://lucene.apache.org) ist eine hochperformante, hochfunktionale, textbasierte Suchmachine. Dabei handelt es sich im wesentlichen um eine Definition, wie Daten für Volltext-Suchen organisiert werden.

Ein solcher Index wird innerhalb eines eigenen Ordners im Dateisystem über mehrere Dateien organisiert. Das ermöglicht die transparente Verteilung auf unterschiedliche Systeme über Standard-Mechanismen. Der Zugriff auf den einen solchen Index ist über eine Vielzahl von Programmiersprachen möglich:

  • Lucene Java
  • Sitepark IES (nativ)
  • Zend Search - Lucene Implementierung mit dem Zend Framework für PHP 5
  • CLucene - Lucene Implementierung in C++
  • Lucene.Net - Lucene Implementierung in .NET
  • Lucene4c - Lucene Implementierung in C
  • LuceneKit - Lucene Implementierung in Objective-C (Cocoa/GNUstep support)
  • Lupy - Lucene Implementierung in Python (wird nicht weiter entwickelt)
  • NLucene - eine andere Lucene Implementierung in .NET (veraltet)
  • Plucene - Lucene Implementierung in Perl
  • KinoSearch - eine neue Lucene Implementierung in Perl
  • PyLucene - GCJ-kompilierte version von Java Lucene integriert mit Python
  • MUTIS - Lucene Implementierung in Delphi
  • Ferret - Lucene implementation in Ruby

Auch der WebCrawler Nutch (http://lucene.apache.org/nutch/) erstellt für die Volltextsuche einer Website einen Lucene-Index. Diese vielfältigen Einsatzmöglichkeiten und die hohe Performanz machen den Einsatz eines solchen Index interessant.

IES & Lucene Index

Der IES bietet über einen speziellen IndexerService die Möglichkeit eigene Indizes pro Mandant zu definieren. Auf einfache Art werden dann automatisch Inhalte aus Artikeln beim Speichern in den Index übernommen. Der IES unterstützt dabei eine Vielzahl von Contenttypen, sowie die Möglichkeit Default-Werte anzugeben. Der hierbei erstellte Index ist in UTF-8 kodiert und unterstützt damit jede Sprache.

Auch die Indizierung von binären Inhalten ist für folgende Dateitypen möglich:

  • PDF-Dokumente (bis PDF-Version 1.5)
  • Microsoft Word, Excel, Powerpoint (bis Version Office 2007)
  • RTF-Dokumente
  • OpenOffice Dokumente
  • XML-, HTML- und einfache Text-Dokumente

Weiterhin werden für unterschiedliche Typen von Elementen immer weitere Systemdaten in den Index übertragen. Auf diese Angaben kann über die entsprechenden Keys zugegriffen werden:

  • Element (gemeinsame Felder aller Elemente, auch Artikel)
  • id: ID
  • type: Typ
  • name: Name
  • sortname: Sortiername (ohne Akzent-Zeichen, alle klein geschrieben)
  • anchor: Anker
  • parent: ID des Parent (ohne Typ)
  • comment: Kommentar
  • changed: Datum der letzen Änderung
  • created: Datum der Erstellung
  • changedBy: ID des Nutzers, der das Element zuletzt bearbeitet hat
  • createdBy: ID des Nutzers, der das Element erstellt hat
  • Artikel (gemeinsame Felder aller Artikeltypen)
  • publisher: Liste aller Publisher-IDs
  • Artikel mit Datei (gemeinsame Felder aller Medien oder normalen Artikel
  • filename: Dateiname
  • suffix: Dateiendung
  • path: Pfad der Datei
  • Medienartikel
  • size: Dateigröße
  • mime: Mime-Type

Allerdings bildet der Index stets die Eingaben der Redakteure ab und hat keine Beziehung zu möglichen Freigaben. Es wird immer die aktuelle Version eines Artikels für alle konfigurierten Felder verwaltet. Es handelt sich somit um nicht freigegebene Inhalte. Mögliche Publkationen müssen eigenständig ausgewertet werden.

Konfiguration eines Index

Um einen Index zu definieren, wechselt man im IESAdmin in den Bereich Indexer. Dort kann man sowohl den Anker, als auch den Pfad in dem der Index gespeichert werden soll angeben. Außerdem wählt man in welchen Mandanten dieser Index verwendet werden soll.

Um einen Index zu befüllen, muss im entsprechenden Template ein Formularfeld mit dem Namen SYS_INFE_indexes angegeben werden. Eine kommaseparierte Liste von Ankern gibt an, in welche Indizes die Daten des Artikel übernommen werden sollen. Die Konfiguration regelt dabei, wie die Daten zu interpretieren sind.

Die Felder, die übertragen werden sollen, werden im IESAdmin für jeden Index einzeln definiert. Ein Indexer-Feld besitzt folgenden Felder:

  • Name
Name des Feldes, das indiziert werden soll.
  • Vorgabewert
Wert, der in den Index aufgenommen werden soll, wenn das Feld leer ist oder nicht existiert.
  • Typ
Daten-Typ wie Text, Zahl, Datum, Link oder Medium
  • Boost
Gewichtung des Feldes, das die Sortierreihenfolge bei Suchen auf den Index beinflusst.
  • Speichern
Gibt an, ob der Wert nicht nur indiziert, sonder auch gespeichert werden soll. Werden die Daten nicht nur indiziert, sondern auch im Index gespeichert, können nach der Suche auf den Index die Werte auch ausgegeben werden. Die Größe des Indexes erhöht sich allerdings erheblich, wenn auch die Daten mit gespeichert werden.

Technische Angaben

Die Indizierung der Inhalte wird vom IES über einen eigenen IESAnalyzer vorgenommen. Dieser basiert seinerseits auf folgenden Filtern:

  • IESTokenizer
gültige Zeichen eines Tokens (Wortes) für die Analyse eines Textes bestehen aus folgenden Zeichen:
  • Character.isLetter
  • Character.isDigit
  • §
  • $
  • %
  • @
  • &
legt fest, dass mit jedem der nicht genannten Zeichen, inkl. Zahlen und Buchstaben, ein neues Wort beginnt.
  • LowerCaseFilter (org.apache.lucene.analysis.LowerCaseFilter)
alle Zeichen werden als klein geschrieben interpretiert.
  • StopFilter (org.apache.lucene.analysis.StopFilter)
Zeichen, die nicht in den Index aufgenommen werden
  • /
  • :
  • _
  • -
  • +
  • ,
  • .
  • ,
  • ;
  • *
  • \
  • ?

Für eine Suche auf diesen Index sollten Suchanfragen entsprechend analysiert werden, damit vergleichbare Daten erzeugt werden. Da ein Lucene-Index nur text-basierte Informationen aufnehmen kann, verwendet der IES eine Routine zur Konvertierung in Long-Werte gleicher Länge.