Buchbesprechung: Solr 1.4 Enterprise Search Server (Packt)
Zusammenfassung Solr 1.4 Enterprise Search Server von David Smiley und Eric Pugh ist ein Muss für alle Einsteiger in Solr.…
Zusammenfassung
Solr 1.4 Enterprise Search Server von David Smiley und Eric Pugh ist ein Muss für alle Einsteiger in Solr. Es bietet einen umfassenden Überblick über die Funktionen, die für praktisch jedes Projekt benötigt werden, von der Indizierung gängiger Datenquellen bis hin zur Suche mit Facettierung, Hervorhebung und Rechtschreibprüfung, und behandelt dann Themen wie Bereitstellung und Leistung. Ein schwieriges Problem bei diesem Buch, wie bei praktisch allen Büchern, die auf Open-Source-Software basieren, war die zeitgleiche Veröffentlichung mit der Freigabe der Software. Die Veröffentlichung von Solr 1.4 hat eine Weile gedauert, aber ein Verlag muss in den Druck gehen. Dieses Buch ging also in Druck, bevor Solr 1.4 wirklich fertig war. Die Autoren unterhalten jedoch eine Wiki-Seite, auf der die Teile von Solr 1.4, die es nicht in den Druck geschafft haben, nachgetragen werden.
Ich gebe diesem Buch 4,5 von 5 Sternen. Lesen Sie weiter für meine ausführliche Rezension, Kapitel für Kapitel.
Haftungsausschluss/Caveat: Eric Pugh ist ein guter Freund von mir und wir haben bei einigen Projekten zusammengearbeitet. Und er sagt in seiner Einführung einige wirklich nette Dinge über mich. Er dankt mir dafür, dass ich ihn in die Welt von Open Source eingeführt habe, und seitdem hat er sich als Apache Committer und Mitglied sehr weit entwickelt. Und er hat sogar mit einigen Datenbankbeispielen für das ursprüngliche Ant-Buch geholfen. Trotzdem werde ich dem Buch im Folgenden eine faire Bewertung geben.
Ein Wort von unserem Sponsor: Das Packt Solr Buch ist eine großartige allgemeine Einführung in Solr und ergänzt unser Lucidworks for Solr Certified Distribution Reference Guide sehr gut. Unser Referenzhandbuch geht auf das Wesentliche ein, was ein allgemeines Verbraucherhandbuch nicht kann. Und die gute Nachricht ist, dass Sie zwei zum Preis von einem bekommen! Unser Referenzhandbuch ist kostenlos.
Buchstruktur
Es ist schwierig, ein Buch über Solr zu strukturieren. Was kommt zuerst? Indizierung oder Suche? Die Daten müssen indiziert werden, aber bei der Einrichtung eines Schemas geht es um viele Kleinigkeiten, und das eigentliche Ziel eines Projekts ist es, sich auf die Suchseite zu konzentrieren. Dieses Buch leistet gute Arbeit bei der Strukturierung, indem es zunächst einen Überblick gibt, einen reichhaltigen öffentlichen Datensatz heranzieht und diesen durchsuchbar macht, ohne in die Details zu gehen. Ich gebe der Struktur des Inhaltsverzeichnisses ein Daumen hoch, obwohl ich denke, dass einige Themen ein eigenes Kapitel verdienen, insbesondere Facettierung, die in diesem Buch einfach ein Abschnitt innerhalb des Kapitels „Erweiterte Suche“ ist. Die Behandlung einiger der experimentellen Patches für Solr im Kapitel „Suchkomponenten“ war interessant und riskant. Beide werden derzeit umfassend überarbeitet und unterscheiden sich stark von dem, was in diesem Buch geschrieben wurde. Zumindest weckt es den Appetit des Lesers auf diese Funktionen, aber er muss eine Menge Hausaufgaben machen und wahrscheinlich auf Trunk plus Patches oder Solr 1.5 wechseln, um diese Funktionen zu erhalten.
Vorwort
„Da dieses Buch jedoch vor der Veröffentlichung von Solr 1.4 in Druck ging, wurden zwei neue Funktionen nicht in das Buch aufgenommen: Clustering von Suchergebnissen und numerische Trie-Range-Felder“. Und, ähm, Solritas wurde auch übersehen (wie konntest du nur, Eric? Velocity ist eines unserer gemeinsamen Lieblingsprojekte!!). Auch hier gibt es eine Reihe von Funktionen, die im Buch nicht behandelt werden, die aber im Addendum-Wiki recht ausführlich behandelt werden, einschließlich meines geliebten Solritas.
Kapitel 1: Schnellstart von Solr
Eine meiner Lieblingsbeschwerden ist es, wenn die Terminologie nicht ganz korrekt ist. An vielen Stellen in diesem Buch wird die Disjunction-Max (auch bekannt als Dismax) Abfrageparserfunktion als „Handler“ bezeichnet. Es ist ein Abfrage-Parser. Ja, in der Beispielkonfiguration, die mit Solr ausgeliefert wird, wird ein „dismax“ genannter Handler bereitgestellt, aber es muss wirklich klar sein, dass es sich um einen Abfrageparser handelt, der mit jedem Suchhandler verwendet werden kann. Vielleicht bin ich einfach nur pingelig, weil ich zu nah am Code dran bin, und für die meisten Leser ist das vielleicht nur eine Kleinigkeit, wenn überhaupt. Langsame Übertragungen, „die zwischen Sekunden und einer Minute dauern können“ – das kann bei großen Indizes und wärmenden Abfragen wirklich viel länger dauern (aber das hängt davon ab, ich wollte nur klarstellen, dass selbst eine „Minute“ eine gewaltige Unterschätzung sein könnte).
Auf Seite 22 gibt es einen Glühbirnenaufruf, der besagt, dass Sie im Suchfeld nicht auf Return drücken sollen, da sonst ein Fehler auftritt. Ich habe dies sowohl mit der einfachen als auch mit der vollständigen Schnittstelle von Solr 1.4 ausprobiert und keinen Fehler erhalten (bei Verwendung von *:* + Return im Abfragefeld). Das ist nicht weiter schlimm, aber ich habe ein Problem damit, wenn in einem Buch über Open Source Code auf ein Problem hingewiesen wird und es heißt: „Vielleicht wird das irgendwann behoben“. Ich weiß, ich weiß… es ist sehr schwierig, ein Buch zu schreiben, geschweige denn, sich mit all den Fehlern zu befassen, auf die man beim Schreiben stößt. Es ist sicherlich einfacher, einen Fehler zu dokumentieren als ihn zu beheben. Aber ich erwarte viel von den Autoren von Open-Source-Technologien. Ich kann nicht einmal die Anzahl der Merkwürdigkeiten zählen, die Steve und ich in Ant behoben haben, als wir die Originalversion von „Java Development with Ant“ schrieben. Es ist anstrengend, zwischen dem Reparieren und dem Schreiben hin und her zu springen, aber es ist das Verantwortungsvollste, was man tun kann. Ich weise hier darauf hin, aber es gibt noch ein paar andere Stellen im Buch, die auf Probleme hinweisen, die wahrscheinlich genauso gut behoben werden könnten. (Tut mir leid, Leute, ich bin ein harter Kunde!)
Kapitel 2: Schema und Textanalyse
Seite 33 – Präfix-, Wildcard- und Fuzzy-Abfragen erfordern nicht zwangsläufig „die Suche nach allen indizierten Begriffen, die in einem Feld verwendet werden, um zu sehen, ob sie mit dem abgefragten Begriff übereinstimmen“. Es hängt vom Präfix des verwendeten Abfragebegriffs ab und Solr 1.4 verfügt sogar über einen raffinierten ReversedWildcardFilter, um führende Wildcard-Abfragen zu vereinfachen.
Und schließlich ein Kompliment und sehr guter Punkt – S. 34, der erste Absatz des Abschnitts „Schemadesign“ sagt etwas Wichtiges: „die Abfragen, die Sie unterstützen müssen, bestimmen das Schemadesign vollständig“. Gut gesagt!
p. 42 – Es gibt einen kleinen Fehler bei positionIncrememtGap – wenn „A“ und „B“ in einem Feld mit mehreren Werten indiziert sind, würde eine Abfrage von A UND B immer noch passen. Eine exakte Phrasenübereinstimmung von „A B“ (mit Anführungszeichen) würde jedoch nicht übereinstimmen, sofern der Wert positionIncrementGap ausreicht.
p. 48 gibt es einen Aufruf, der Analysatoren, Tokenizer und (Token-)Filter als „Analysatoren“ zusammenfasst. Das ist für meinen pedantischen Geschmack ein bisschen zu hoch gegriffen. Ein Analyzer kapselt den gesamten Prozess der Tokenisierung. Ein Tokenizer ist für den ersten Schritt der Zerlegung von Text in Token verantwortlich. Filter übernehmen den Rest der Verarbeitung in einer Art Pipeline.
p. 53 – Tippfehler, „WorkDelimiterFilterFactory“ -> „WordDelimiterFilterFactory“
p. 57 – Synonymerweiterung, „Aus einer Vielzahl von Gründen ist es in der Regel besser, dies zum Zeitpunkt der Indexierung zu tun“. Wirklich? Da bin ich anderer Meinung, oder zumindest heißt es wieder „es kommt darauf an“. Aber die Erweiterung zur Abfragezeit ist am flexibelsten und ermöglicht Änderungen an der Synonymerweiterung, ohne dass alles neu indiziert werden muss.
Kapitel 3: Indizierung von Daten
p. 65 – seltsamerweise wird Solr Flare als Client-API (für die Indizierung?) erwähnt. Wie auch immer, es ist nur ein glorreicher Hack einer Suchoberfläche, die überhaupt nichts mit der Indizierung zu tun hat. Tatsächlich kann man damit auf (praktisch) jede Solr-Instanz zeigen und sie durchsuchen. Wenn Ihre Facettenfelder mit dem Muster *_facet benannt sind, werden sie automatisch erkannt und angezeigt und können für Constraints verwendet werden.
Oben auf S. 68 Tippfehler „solr.body“ sollte „stream.body“ sein. S. 69, der Aufruf zum Remote-Streaming – ich finde, es verdient eine kleine Erklärung, warum es nicht standardmäßig aktiviert ist (oder besser gesagt nicht sein sollte), denn es ist erwähnenswert, welche Auswirkungen es auf die Sicherheit hat, wenn Solr einen lokalen Dateipfad oder eine Remote-URL zum Abrufen übergeben kann. Und tatsächlich ist sie in Solr 1.4 (Vorsicht!) standardmäßig aktiviert, was, glaube ich, später im Buch erwähnt wird.
p. 87 – der Beispiel-Curl-Befehl für Solr Cell (auch bekannt als ExtractingRequestHandler) verwendet veraltete Parameter, die in einer offiziellen Version nicht verwendet werden. Bitte sehen Sie im Solr-Wiki nach, um die aktuellen Details zu erfahren.
Kapitel 4: Grundlegende Suchvorgänge
p. 98: echoParams wird als „nicht besonders nützlich“ bezeichnet. Tatsächlich kann es aber für einen Client nützlich sein, der mit allen Parametern arbeiten möchte, die über eine standardmäßige serverseitige Zuordnung des Request Handlers verborgen sein können. Ich habe es in einigen Fällen effektiv eingesetzt.
p. 99: *:* für den Abgleich aller Dokumente „hat definitiv seinen Nutzen“. Zum Beispiel? Zum Beispiel für q.alt unter Verwendung des dismax-Parsers. Mehr dazu weiter unten.
p. 103: „Bevor Sie Slop hinzufügen, sollten Sie seine Auswirkungen auf die Abfrageleistung abschätzen“. Ich glaube nicht, dass sich der Slop-Satz auf die Leistung auswirkt, und schon gar nicht bei den meisten Solr-basierten Anwendungen. Dies könnte also eine etwas verfrühte Optimierung sein. Verwenden Sie Phrase Slop, wenn Sie es brauchen. Aber natürlich ist es eine gute allgemeine Empfehlung, die Leistung immer zu messen, unabhängig davon, welche Optimierungen Sie vornehmen.
p. 106: Datumsmathematik – an dieser Stelle sollten Sie die Trie-Feldtypen erwähnen, die es nicht in den Druck geschafft haben. Diese Feldtypen sind sehr wichtig, um numerische und datumsbezogene Abfragen zu beschleunigen.
p. 108: Filtern, „und die Abfragezeichenfolge leer lassen“? Das Beispiel lässt sie nicht leer, und es ist ein Fehler, dies zu tun. Verwenden Sie in diesem Fall *:* (siehe oben und beachten Sie, wo dies sinnvoll ist).
p. 112: Scoring – „Sie werden in der Regel feststellen, dass Scores in der Nähe von 0,5 oder besser annehmbare Übereinstimmungen sind“ – das hängt ganz von den Daten und Abfragen ab. Die Ergebnisse können sehr unterschiedlich ausfallen, und ihr tatsächlicher Wert ist nicht unbedingt für sich genommen nützlich, sondern im Verhältnis zu anderen passenden Dokumenten.
Kapitel 5: Verbesserte Suche
Meiner Meinung nach hätte zumindest die Facettierung ein eigenes Kapitel sein sollen, da sie eine der wichtigsten Funktionen von Solr ist.
Der Hinweis, dass „Funktionsabfragen“ ein schlechter Name sind, scheint unnötig zu sein und ist auch nicht wirklich falsch benannt, oder? Es handelt sich um eine Abfrage, die eine Funktion anwendet, um alle Dokumente zu bewerten.
Abschnitt „Dismax Solr request handler“ – auch hier ist der Name falsch. Es handelt sich um einen Dismax-Abfrage-Parser, nicht um einen Handler im eigentlichen Sinne.
p. 132: „Aber denken Sie daran, dass es keine Abfragesyntax gibt, um die DisjunctionMaxQuery von Lucene aufzurufen…“. Oh doch, das gibt es!
p. 133: „Die[pf]-Syntax ist identisch mit“ qf (nicht „bf“ wie im Buch angegeben). Ebenso ist es ein Tippfehler in den „Gründen für die Variation“ qf (nicht „bf“). Und auch in der Aufzählung der pf Tips auf der folgenden Seite (134)… sollte qf und nicht bf stehen. Ja, diese Parameternamen für dismax sind leider etwas knifflig.
p. 148: Alphabetic range bucketing – Mir gefällt der Trick, den sie beschreiben, nämlich die Verwendung von PatternTokenizer, um den ersten Buchstaben zu extrahieren und dann einen SynonymFilter, um sie in Gruppen wie A-C, D-F einzuteilen. Es gibt viele coole kleine Tricks wie diesen, die man anwenden kann, und dieses Beispiel wird sicherlich einige fantasievolle Anwendungen hervorbringen. Schön!
Kapitel 6: Suchkomponenten
p. 167: Ein weiterer großartiger Hinweis, dieses Mal auf die Komponente Query Elevation. Es handelt sich dabei nicht um einen allgemeinen Ansatz zur Korrektur von Suchanfragen, die in Bezug auf die Relevanz nicht so gut funktionieren, wie Sie es sich wünschen. Sie dient der redaktionellen Aufwertung (oder der Entfernung von Ergebnissen).
p. 173: Hinweis zur Rechtschreibprüfung: Es wird erwähnt, dass Sie darauf achten sollten, das Wörterbuch zu erstellen, wenn ein Kern geladen wird. Aber eine der besseren Möglichkeiten ist es, das Rechtschreibprüfungswörterbuch bei einer Übergabe neu zu erstellen, damit es bei neuen Dokumenten aktuell bleibt. Später, auf S. 176, wird erwähnt, dass das Wörterbuch bei der Optimierung neu erstellt werden soll. Das ist kein schlechter Rat, aber es hängt wirklich davon ab, wie eine Anwendung Commits und Optimierungen verwendet. Viele Projekte verzichten ganz auf die Optimierung und setzen einfach einen niedrigen Merge-Faktor. In diesen Fällen würde ich empfehlen, das Rechtschreibprüfungswörterbuch stattdessen bei der Übertragung zu erstellen.
p. 180 – „Es ist möglich, dass ein Client dies tut [einen Rechtschreibvorschlag anzufordern, wenn die Ergebnisse null sind] … aber es wäre viel langsamer“. Viel langsamer? Nein. Es ist durchaus sinnvoll, dass Clients diese Art von Dingen auf der Grundlage der Geschäftslogik der zurückgegebenen Ergebnisse tun. Eine Abfrage an Solr wird oft innerhalb von zehn Millisekunden beantwortet. Überhaupt nicht viel langsamer.
p. 185 – und manchmal lernt man beim Lesen eines Buches über ein Thema, das man ziemlich gut kennt, sogar etwas Neues! Ich wusste nichts von dem Parameter mlt.qf. Toll!
p. 189 – stats-Komponente, „berechnet… Statistiken für bestimmte numerische Felder in der Ergebnismenge“ (nicht für den gesamten Index). Und der Fehler in der stats-Komponente: Er wurde in Solr 1.4 behoben.
Field Collapsing und LocalSolr – diese Abschnitte sind nützlich, um auf die neuen Funktionen von Solr hinzuweisen, aber die technischen Details sind nicht mehr aktuell. Diese wertvollen Funktionen sollten jedoch beide in Solr 1.5 enthalten sein.
Kapitel 7: Einsatz
p. 200: Tippfehler bei der Eigenschaft „[solr.]solr.home“ im Text. Der Beispielcode macht es aber richtig.
p. 205: Protokollierung JARmageddon – Ich wollte nur meinen Einwand gegen die Umstellung der Protokollierung von Solr auf die JDK-Protokollierung erwähnen. Was für ein Kopfzerbrechen die Protokollierung doch macht und welche Mühen man auf sich nehmen muss, um sie auszuschalten, sogar mit SLF4J. ugh, ich bitte um Entschuldigung, aber ich habe meine Einwände dargelegt.
p. 210: Die „gute Verwendung“ von RELOAD scheint mir nicht so gut zu sein. Wenn Sie unterschiedliche Konfigurationen für Indizierung und Suche benötigen, richten Sie zwei Server ein und verwenden Sie die Replikation.
p. 215: Die Vorteile von JMX sind ein wenig übertrieben. Sie können auf so ziemlich alle internen Daten von Solr (Anzahl der Dokumente, wie in diesem Abschnitt erwähnt, Cache-Statistiken usw.) über die Request-Handler von Solr und stats.jsp (die XML ausgibt) zugreifen. Aber ja, das JMX-Zeug ist immer noch nützlich in Umgebungen, in denen bereits Überwachungslösungen dafür eingerichtet sind. Wenn Sie Ihre eigene Überwachung einrichten, sollten Sie die Statistiken vielleicht einfach direkter abrufen.
Kapitel 8: Integration von Solr
p. 228: Maven note – NOOO! Solr wird nur über meine Leiche zu einem Maven-basierten Build wechseln!
p. 236: EmbeddedSolrServer – Das Streaming lokal verfügbarer Inhalte in Solr ist IMO keine attraktive Verwendung von Embedded Solr. Es fehlt die Möglichkeit, einen Indexer auf einem separaten Rechner laufen zu lassen und problemlos Multiprocessing/Threading zu betreiben. Ich gebe zu, dass sowohl die Rich-Client-Anwendung als auch das Upgrade von einer reinen Lucene-basierten Lösung für Embedded sinnvoll sind, aber das sind eher außergewöhnliche Anwendungsfälle. Und die Vorteile der Verwendung von Solr über HTTP sind ziemlich umfangreich (Skalierung, Trennung, Replikation, verteilte Suche). Außerdem ist SolrMarc IMO kein gutes Beispiel für die Verwendung eines eingebetteten Solr-Servers. Sehen Sie sich meinen jüngsten Ausflug in diese Welt an.
p. 245: SolrJS – ein weiterer Fall, in dem ein Buch zu früh veröffentlicht wurde. Es wurde geforkt, verbessert und in AJAX Solr umbenannt und aus dem Kern von Solr entfernt. Dies wurde im Addendum-Wiki vermerkt.
p. 247: Ich habe Fälle gesehen, in denen PHP-Anwendungen am besten mit dem JSON-Antwortformat funktionieren. Es ist also unnötig, die Leser auf die Antwortformate php oder phps hinzuweisen. Natürlich gibt es eine Reihe von PHP-Bibliotheken, die vielleicht der beste Weg sind, und Sie können sich einfach nicht darum kümmern, welches Antwortformat hinter den Kulissen abläuft.
p. 253: Es ist schön zu sehen, dass Ruby on Rails erwähnt wird, auch wenn die Berichterstattung etwas lückenhaft und verwirrend ist. Solr Flare und RSolr werden im selben Satz erwähnt, sind aber zwei verschiedene Dinge. Solr Flare ist ein gehacktes (Kritik meiner eigenen Kreation) RoR-Plugin für die Anzeige von Suchergebnissen. RSolr ist eine neue und im Vergleich zu solr-ruby verbesserte API für den Zugriff auf Solr von Ruby-Code aus. (Flare verwendet derzeit solr-ruby) Es ist großartig, dass Blacklight erwähnt wird! Alle diese Technologien sind für mich sehr wichtig. Der Abschnitt über den Ruby-Indexer von MusicBrainz und die Integration von Blacklight hat mir sehr gut gefallen – toll. Das zeigt, dass Blacklight nicht nur für Bibliotheken geeignet ist, sondern auch ein guter Start für ein universelles Ruby on Rails Frontend für jeden Solr-Index ist.
Kapitel 9: Skalierung von Solr
Ein sehr schönes Kapitel! Ich möchte Ihnen nur gratulieren, dass Sie so klar dargelegt haben, wie Solr mit der Skalierbarkeit umgeht, und Ihnen verschiedene Tipps und Tricks zum Testen und Überwachen eines Systems geben, damit Sie wissen, wann und wie Sie die Konfigurationen und die Systemarchitektur für die Skalierung anpassen müssen.
Großes Finale
Ich habe oben schon eine Menge Kritik geäußert, und ich gehe davon aus, dass die großartige Wiki-Seite im Anhang die wichtigsten Punkte aus dieser Rezension berücksichtigen wird. Der größte Teil der Rezension weist natürlich auf Fehler oder Meinungsverschiedenheiten hin, dafür ist eine Rezension ja da, aber es ist ein solides, nützliches Buch. Wenn Sie also erwägen, Solr zu verwenden, ist dieses Buch genau das Richtige für Sie. Wenn Sie Solr bereits verwenden, werden Sie wahrscheinlich den einen oder anderen nützlichen Trick aufschnappen. Kaufen Sie es! (und unser ergänzendes Lucidworks for Solr Certified Distribution Reference Guide)