Grundlage
Suchmaschinentechnik wird realisiert durch Einsatz der Software namens Solr von Apache. Diese läuft außerhalb des allegro-Systems, normalerweise auf einem Webserver, auf dem auch avanti läuft, aber avanti wird nicht gebraucht, wenn man SolrPower nur in einem lokalen Netz oder Einzel-PC mit a99/alcarta einsetzen will. Es wird noch die Möglichkeit hinzukommen, SolrPower auch in PHPAC und a30 zu nutzen; dazu wird zusätzlich avanti nötig sein.
Das Einrichten der Sache ist nichts für Nur-Anwender, ein wenig Erfahrung in der Systemverwaltung ist unverzichtbar. Diese Anleitung klärt die Zusammenhänge und zeigt, wie es geht.
Nutzung in a99/alcarta
Nachdem man, wie unter
A. und B. beschrieben, die Software eingerichtet hat, ruft man aus
a99/alcarta die SolrPower ab, indem man schlicht den Befehl X asksolr.flx gibt, bzw. man legt diesen Befehl auf einen der Flip-Buttons. Oder wie auch immer man die Funktion starten will - es ist ein ganz normaler FLEX. Und was er produziert, ist eine ganz normale Erg.Menge, der Nutzer merkt nicht, was der FLEX in Wirklichkeit
alles tut - bzw. nicht der FLEX, sondern Solr! Solr ist Programm, das nicht
selber auf eine allegro-Datenbank zugreift, sondern auf einen eigenen
Index. Damit es den anlegen kann, muß man ihm Daten in XML-Struktur
übergeben; intern hat der Index jedoch eine ganz andere, sehr
kompakte Struktur, die man nicht kennen muß. Zum Anzeigen
und Blättern eignet sich der Index nicht, nur zum Suchen.
Ergebnisse liefert Solr dann in einer XML-Struktur, aus der asksolr.flx eine normale Erg.Menge macht.
Solr erhält seine Suchaufträge von einem Serverprogramm
namens "Jetty". So ähnlich, wie acon seine Aufträge (Jobs) von
avanti erhält. Allerdings muß für jede Datenbank ein
eigenes Jetty mit eigener Portnummer laufen.
Man beginnt am besten mit folgenden Schritten, um zu sehen, ob es funktioniert, und um sich mit der Methodik vertraut zu machen.
Weiter unten in Abschnitt B. geht's dann zur Sache: SolrPower für die eigenen Daten.
A. DemoBank mit SolrPower ausstatten
Alles soll erst mal auf ein und demselben PC eingerichtet werden. Webserver und Solr können aber letztlich, für den Dauerbetrieb, auf einem anderen System liegen.
0. Man braucht ab Schritt 4 diese drei Dateien:
Diese Dateien am besten auf das DEMO2 und auf Ihr DbDir kopieren! Sie enthalten Kommentare.
Man findet sie im SVN unter flex bzw. software.
asksolr.flx (erstellt den Suchbefehl und läßt ihn ausführen)
allsolr.flx (erstellt XML-Daten)
expsolr.flx (desgl., aber nur für die aktuelle Erg.Menge)
e-solr.apr (Zeichenumwandlung; kopieren auf e-solr.xpr, wenn nicht A.CFG, und dann ändern)
1. Wenn Java (mindestens 1.5) noch nicht vorhanden, dann aktuelles Java
installieren. Man erhält es von http://java.com/de/download/
Ein Webserver, am besten Apache, wird nur für PHPAC u.ä. gebraucht, für Solr nicht.
2. Solr-Paket entpacken in c:\programme\solr
Das Paket kann man downloaden von http://lucene.apache.org/solr/ )
Darin braucht man nichts zu konfigurieren. Aber ein wichtiger Tip: Wenn
man zuverlässige Trunkierung will, dann diese
Angabe rausnehmen aus schema.xml: <filter class="solr.PorterStemFilterFactory"/>
Die Datei liegt auf c:\programme\solr\example\solr\conf
Erfahrene Solristen können darin noch viel mehr einstellen. Es ist
sozusagen die CFG und API in einem, in allegro-Sprechweise.< style="font-weight: bold;">
3. Ein DOS-Fenster aufmachen und Jetty starten:
Jetty ist ein für Java-Software nötiges Serverprogramm; es ist mit im Paket.
(Eine Alternative wäre Tomcat von Apache.)
Dazu auf c:\programme\solr\example
diesen Befehl geben: java -jar start.jar
Es kommen sehr viele Meldungen, die letzte sieht so aus:
INFO: [] Registered new searcher Searcher@e33e18 main
Dieses DOS-Fenster dann minimieren. SolrPower gibt's nur, solange das Programm Jetty läuft.
Diese "Instanz" von Jetty ist aber nur für die Demo-Datenbank zuständig! Für eine andere
Datenbank (siehe B.) braucht man ein eigenes Fenster mit eigener Jetty-Instanz.
Man stoppt eine Jetty-Instanz mit Strg+c im selben DOS-Fenster.
4. Daten aus allegro DemoBank mit expsolr.flx exportieren
a) Erg.Menge machen (z.B. Volltextsuche mit Suchbegriff #20, d.h. alle Sätze, die einen Titel haben.)
Dann X expsolr eingeben und auf Endemeldung warten.
Es entsteht c:\programme\solr\example\exampledocs\katalog.xml
ODER
b) Gesamtbank: X allsolr eingeben und auf Endemeldung warten.
Es entsteht solr-1.xml. Diese verschieben nach c:\programme\solr\example\exampledocs\
(Hierbei wird ein Batch ccc.bat erzeugt, der dann acon mit allsolr.job ausführt.)
In beiden Fällen wird zum Exportieren die Parameterdatei e-solr.apr verwendet.
5. Noch ein DOS-Fenster aufmachen
Auf c:\programme\solr\example\exampledocs diesen Befehl:
java -jar post.jar katalog.xml
(Es dauert bei 100.000 Datensätzen weniger als 2 Minuten)
Letzte Meldung: ... COMMITting Solr index changes..
Es entsteht c:\programme\solr\example\solr\data\index\
Dort liegen dann die Indexdaten von Solr für die DemoBank.
6. Schon kann's losgehen! In a99 eingeben:
X asksolr [oder dies auf einen FlipButton legen]
In das Eingabefeld dann geeignete Suchwörter eingeben, die automatisch mit AND verknüpft werden
7. "Enter" drücken und asksolr.flx tut sein Werk
Binnen kurzem erscheint eine Ergebnismenge, die von Solr produziert wurde.
Damit kann man umgehen wie mit jeder Erg.Menge.
Nicht anders als hätte man sie z.B. mit PRESTO gemacht ("externe" Erg.Menge).
B. Eigene Datenbank(en) mit SolrPower ausstatten
Aufgabe:
Die Datenbank in c:\allegro\XYZ soll SolrPower erhalten.
(Setzen Sie überall statt XYZ Ihren Ordnernamen ein)
Prinzip ist, daß eine eigene Instanz von Jetty eingerichtet wird mit eigener PortNummer und dazu ein eigener Solr-Ordner für die Datenbank XYZ. (Eine andere Möglichkeit, die sog. "Multicore"-Technik, bei der ein Jetty mehr als eine Datenbank betreuen kann, wurde noch nicht auf ihre Eignung untersucht).
1. Den gesamten example-Ordner kopieren:
c:\programme\solr\example
--> c:\programme\solr\XYZ [müßte nicht unbedingt "XYZ" heißen, ist nur praktisch]
Darunter liegen dann insbes. diese Verzeichnisse (die anderen
interessieren nicht):
-- etc mit jetty.xml
-- exampledocs für die zu indexierenden xml-Daten
-- solr/data/index für den Index
2. Bearbeiten:
Die Datei c:\programme\solr\XYZ\etc\jetty.xml
An zwei Stellen ersetzen: default="8983" durch default="8984"
Die Nummer 8983 bzw. 8984 ist die PortNummer.
Durch diese unterscheiden sich zwei Instanzen von Jetty und geraten nicht durcheinander.
Man kann andere Portnummern wählen.
Diese müssen ggfls. in der Firewall freigegeben werden für Zugriffe von außen.
3. Jetty starten auf c:\programme\solr\XYZ:
java -jar start.jar
Diese "Instanz" von Jetty ist dann also nur für Datenbank XYZ zuständig
4. Kopie des FLEXes expsolr.flx nach c:\allegro\XYZ (siehe A.4)
Darin diese Zeile ändern:
open x c:/programme/solr/example/exampledocs/katalog.xml
zu
open x c:/programme/solr/XYZ/exampledocs/XYZ.xml
(Auch der Name "XYZ.xml" ist willkürlich)
Außerdem in expsolr.flx evtl. die zu exportierenden Felder ändern,
besonders wenn es keine A-Datenbank ist.
5. Daten damit exportieren, (siehe A.5)
a) Erg.Menge machen und dann X expsolr. Die Daten landen in der genannten Datei XYZ.xml.
ODER
b) Gesamtbank: X allsolr
Es entstehen Dateien solr-N.xml (N=1,2,...) mit jeweils nicht mehr als 32MB
Die verschiebt man nach < style="font-weight: bold;">c:/programme/solr/XYZ/exampledocs
Gebraucht wird e-solr.apr
6. Noch ein DOS-Fenster, und in c:/programme/solr/XYZ/exampledocs
den (leider etwas komischen) Befehl geben
a) java -Durl=http://localhost:8984/solr/create -jar post.jar
dann wird ein leerer data-Bereich für den Index angelegt.
Es kommt zwar eine Fehlermeldung:
FATAL: Solr returned an error: Not Found
Das ist aber OK. Und dann
b) java -Durl=http://localhost:8984/solr/update -jar post.jar solr-*.xml
womit die Daten indexiert werden
Endemeldung: COMMITting Solr index changes..
Wenn später weitere Dateien hinzukommen, nur noch der zweite Befehl.
7. Kopie des FLEXes asksolr.flx nach c:\allegro\XYZ
Darin diese Zeile ändern (auf die PortNr :8984 kommt's an):
var "Fhttp://localhost:8983/solr/s...
zu
var "Fhttp://localhost:8984/solr/s...
Und nun kann's losgehen, die Datenbank XYZ hat jetzt SolrPower.
Man ruft sie in a99 ab - wie gehabt - mit X asksolr oder wie auch immer.
Tip: Das Suchbefehlsfeld dazu nutzen, indem man asksolr.flx umbenennt in onfnda99.flx,
denn dieser wird automatisch ausgeführt, wenn man keinen
gültigen Suchbefehl eingibt, und eine Eingabe für SolrPower
ist ja eben kein gültiger a99-Suchbefehl! Hinweis: In alcarta wird statt dessen onfndalc.flx ausgeführt.
Am Anfang dieser beiden FLEXe muß man dazu aber die ersten vier Befehle ersetzen durch:
var #ux0
ins #uwo
C. Einige Tips
Solr-Index erneuern
o Server stoppen (im Fenster von Schritt 3.: Strg+c)
o Verzeichnis ../solr/data löschen (s. Schritt 5.)
o Schritte 3 - 5 wiederholen
Weitere Daten einspeisen (Index aktualisieren)
Zuerst die Daten in der XML-Form (exportiert mit expsolr.flx o.a.) bereitstellen.
Dann denselben Befehl wie in B.6.b .
Sätze mit derselben internen Nummer werden dabei ersetzt, nicht dupliziert!
Solr Dokumentation
Die ist mit im Paket; geben Sie im Browser ein:
c:/programme/solr/docs/index.html
Zur Funktionsweise
Die Funktionsweise
von Solr ist nicht immer transparent, vor allem die Anordnung (das
Ranking) der Ergebnisse. Damit es keine Probleme mit Diakritika gibt,
werden die Daten von expsolr.flx so aufbereitet, daß nur die Grundbuchstaben an Solr übergeben werden.
Zur Suchbefehls-Syntax
Hinweise dazu gibt es hier, wenn man mehr will als die hier vorgestellte Minimalversion:
http://wiki.apache.org/solr/SearchHandler?action=show&redirect=StandardRequestHandler
Konfigurieren
Selber dies und jenes konfigurieren kann man unter
c:\programme\solr\example\solr\conf
vor allem in der Datei schema.xml,
z.B. <solrQueryParser defaultOperator="OR"/>
Ferner liegen dort stopwords.txt und synonyms.txt.
An alledem wurde für die hier vorgestellte Minimalvariante nichts geändert!
In den FLEXen
expsolr.flx und asksolr.flx wird der FLEXperte einiges entdecken,
was modifiziert werden kann.
Im zweiten z.B. die Anzahl der
Ergebnisse, die maximal gezeigt werden sollen: In der Angabe
...&start=0&rows=1000...
ändert man dazu die Zahl 1000.
Die Datenfelder,
die Solr durchsuchen soll, können in e-solr.apr vorgegeben werden.
Hier sind Änderungen auf jeden Fall dann nötig, wenn man
nicht mit A.CFG arbeitet. Es existieren entsprechende Dateien,
e-solr.bpr und e-solr.npr, für MAB bzw. N.CFG.
Nutzung mit a30
Auch in a30 kann SolrPower schon genutzt werden (mit a30solr.job). (Für PHPAC bleibt noch etwas zu tun.)
Man läßt im FreiRaum von a30 einen Suchschlitz für Solr erscheinen, indem man im Job schreibt:
wri "_!_FRE " n // alternativ _!_FRE1, dann FreiRaum Nr.1
wri "TE Eingabe:|100" n
wri "IN VurS|300" n
wri "BU Solr|a30solr" n
Der Job a30solr.job erhält dann die Eingabe in der Variablen #urS,
übergibt sie an Solr und liefert die Ergebnisse an a30, jedenfalls
die ersten 100 Ergebnisse. Dies zu erweitern wäre nicht schwer,
aber oft reichen schon die ersten 20, weil Solr schon ein "ranking"
(genannt "scoring") vornimmt!
NEU und wichtig für SolrPower in a30 (a30ajax.php + a30solr.job) ist die Variable (in a30_ini.php einzusetzen)
$SPort="8984"; // SolrPort, default 8983
Damit wird ein anderer Port (andere Instanz von Jetty) eingestellt, falls es nicht 8983 sein soll.
Logdatei
In .../solr/example/logs/ entsteht eine Logdatei. Schauen Sie mal rein, ob Sie draus schlau werden...
Literatur
Smiley, David & Pugh, Eric : Solr 1.4 Enterprise Search Server. - PACKT Publ., 2009. - 317 S.
ISBN 978-1-847195-88-3
|