Eine Milliarde hier, eine Milliarde dort
„…schon bald geht es um echtes Geld“, lautet der berühmte Satz, der dem verstorbenen Senator Everett Dirksen zugeschrieben wird(apokryph, wie…
„…schon bald geht es um echtes Geld“, lautet der berühmte Satz, der dem verstorbenen Senator Everett Dirksen zugeschrieben wird(apokryph, wie sich herausstellt).
Dieser Satz kam mir in den Sinn, als ich kürzlich einen Beitrag von Tom Burton-West vom Hathi Trust las, in dem es um die Begrenzung der Indexgröße auf 2,47 Milliarden Wörter bei einer Basis von 555.000 Dokumenten ging.
Als wir lasen, dass das von Solr verwendete Lucene-Indexformat ein Limit von 2,1 Milliarden eindeutigen Wörtern pro Indexsegment hat, dachten wir, wir müssten uns keine Sorgen machen. Nachdem wir jedoch vor einigen Wochen unsere Indizes auf jedem Shard auf ein Segment optimiert hatten, fingen wir an, in unseren Protokollen Java-Ausnahmen „ArrayIndexOutOfBounds“ zu sehen. Nach einigen Nachforschungen stellten wir fest, dass die meisten unserer Index-Shards tatsächlich mehr als 2,1 Milliarden eindeutige Wörter enthielten und einige Abfragen diese Ausnahmen auslösten. Derzeit indiziert jeder Shard etwas mehr als eine halbe Million Dokumente.
Die Schuldigen? Schmutzige OCR, CommonGrams und 200 Sprachen:
Nach einigem Suchen in den Protokolldateien fanden wir eine Abfrage, die einen koreanischen Begriff enthielt, der die Ausnahme immer wieder auslöste, und verwendeten diese zum Testen. Wir haben die Indexdokumentation erneut gelesen und festgestellt, dass die Indexeinträge lexikografisch nach UTF16-Zeichencode sortiert sind. (Die koreanische Sprache Hangul liegt nahe am Ende des Unicode BMP und hat daher einen sehr hohen UTF-16-Zeichencodebereich).
Die Korrektur, die kürzlich von Mike McCandless für Lucene 2.92, 3.0.1 und 3.1 vorgenommen wurde, hebt das Limit pro Index auf etwa 274 Milliarden eindeutige Begriffe an. Nun haben Sie vielleicht keine 274 Milliarden eindeutige Begriffe in Ihrer Sammlung, oder noch nicht – aber das ist ein ziemlich großer Spielraum für lexikalische und linguistische Suchtricksereien.
Wenn Sie den Blog des Hathi-Projekts noch nicht auf Ihre Liste gesetzt haben, sollten Sie ihn unbedingt lesen. Lesen Sie auch Toms hervorragende Beiträge über die verteilte Solr-Suche und darüber, wie häufige Wörter und Ausdrücke die Leistung von Lucene/Solr beeinflussen können. Der Bibliotheksbereich steht an vorderster Front, wenn es darum geht, die Grenzen von Open Source auszuloten: monströse Indizes, schwer in Form zu bringende Metadaten, Umgang mit OCR, tiefe Facettierung von Feldern, Datenbankintegration, Datentypen in Hülle und Fülle, Phrasenabfragen, bei denen Ihnen der Kopf schwirrt, und unerbittliche Relevanz für die Massen (unser Erik Hatcher stammt aus diesem Bereich und ist dort immer noch sehr aktiv). Wenn Sie mit einem schwierigen Suchproblem konfrontiert sind, stehen die Chancen gut, dass die Leute in den Bibliotheken bereits mittendrin sind.