![]() |
SolrPower für allegro | 2010-05-27 |
|
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. 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 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 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) Erg.Menge machen und dann X expsolr. Die Daten landen in der genannten Datei XYZ.xml. 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 XYZ.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. 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 2010-05-26
|