Lucene-Index: Unterschied zwischen den Versionen
Sed (Diskussion | Beiträge) |
|||
Zeile 106: | Zeile 106: | ||
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. | 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 113: | Zeile 112: | ||
[[Category:Qualität_des_Codes_prüfen]] | [[Category:Qualität_des_Codes_prüfen]] | ||
</noinclude> | </noinclude> | ||
− |
Version vom 2. Juni 2009, 09:20 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
: IDtype
: Typname
: Namesortname
: Sortiername (ohne Akzent-Zeichen, alle klein geschrieben)anchor
: Ankerparent
: ID des Parent (ohne Typ)comment
: Kommentarchanged
: Datum der letzen Änderungcreated
: Datum der ErstellungchangedBy
: ID des Nutzers, der das Element zuletzt bearbeitet hatcreatedBy
: 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
: Dateinamesuffix
: Dateiendungpath
: Pfad der Datei
- Medienartikel
size
: Dateigrößemime
: 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.