Multidimensionale numerische Felder und Jigsaw-Kompatibilität: Apache Lucene und Solr 6.0 sind da

(c) Shutterstock/Dashikka
Das Apache Lucene Team hat am Freitagabend Apache Lucene und Apache Solr in der Hauptversion 6 veröffentlicht. Lucene-Entwickler und JAX Speaker Uwe Schindler stellt im Rahmen der Search-Bites-Kolumne alle spennenden Neuerungen vor.
Apache Lucene 6.0
Die Änderungen im Bereich Apache Lucene, der unter Apache Solr und Elasticsearch liegenden Volltextsuch-Bibliothek, sind vor allem rund um einen komplett neuen Feldtyp zu finden: Ab dieser Version ist es möglich, mehrdimensionale, numerische Felder zu indexieren und schnell abzufragen. Bisher war dies nur in einer Dimension und bis maximal 64 Bits (Long- oder Double-Werte) möglich. Nun kann man sogenannte Points mit bis zu 8 Dimensionen und 128 Bits (16 Bytes) pro Wert indexieren.
Dies eröffnet zahlreiche Möglichkeiten, neue Datentypen im Index abzulegen und schnell abzufragen: Durch die 128 Bits werden Nutzer von auf Lucene basierenden Netzwerkmanagement- und Logging-Environments (zum Beispiel der ELK-Stack um Elasticsearch) nun auch in der Lage sein, IPv6-Adressen im Index zu speichern und bei Filterung und für Aggregationen zu benutzen. Aber auch Geo-Suchmaschinen profitieren daraus: Längen- und Breitengrade können als Pärchen im Index abgelegt werden, wodurch Workarounds wie Geohashes überflüssig werden.
Passend zu den neuen Point-Typen gibt es neue Queries wie “Ranges” oder besser gesagt “Boxen” in mehreren Dimensionen. Das API hat sich dabei grundlegend geändert. Unter der Haube verwenden Points sogenannte BKD-Trees (Block-k-d-Bäume). In einer Dimension ist das vergleichbar mit den herkömmlichen NumericFields, allerdings ist das Encoding adaptiv gestaltet, wodurch einiges an Indexspeicherplatz eingespart und zudem die Queryperformanz erhöht wird.
Benutzer, die bisher NumericRangeQuery mit NumericField benutzt haben, können nun auf Points (LongPoint, DoublePoint, IntPoint, FloatPoint, InetAddressPoint) umstellen. Dazu muss aber neu indexiert werden, da das Index-Encoding der alten NumericFields und der neuen PointFields komplett inkompatibel zueinander ist und auch nicht untereinander gewandelt werden kann. Benutzer, die nicht neu indexieren können, sind bis zur Version 7 von Lucene aber alternativ in der Lage, LegacyNumericRangeQuery und LegacyNumericField weiter zu benutzen, was aber als “deprecated” markiert ist.
Zusätzlich benötigen Apache Lucene (und auch Solr) nun mindestens Java 8 zur Laufzeit. Der Core von Lucene ist zudem mit dem Compact-1-Profil des JDK lauffähig, was es auch auf Embedded Devices, welche nur eine stark abgespeckte Runtime bereitstellen, lauffähig macht. Außerdem ist Lucene 6 vollständig zum Java-9-Modulsystem Jigsaw kompatibel und benötigt nur wenige, dokumentierte Rechte in Umgebungen mit Security-Manager.
Apache Solr 6.0
Apache Solr baut wie immer auf den Funktionen von Apache Lucene auf, bietet aber selbst auch einige Neuigkeiten: Neben der herkömmlichen Abfragesprache ist nun auch ein SQL-kompatibler Query-Parser integriert, welcher es erlaubt, basierend auf dem Solr-Cloud Streaming API, viele SQL-ähnliche Konstrukte wie SELECT, GROUP BY, HAVING und ORDER BY an eine SolrCloud-Umgebung zu schicken. Die Abfragen werden parallelisiert in der Cloud abgearbeitet und an den Clienten ausgeliefert. Das lässt sich unter anderem auch mit einem in den SolrJ-Client integrierten JDBC-Treiber erreichen, welcher sich auch mit vielen JDBC Tools wie DBVisualizer einsetzen lässt.
Leider sind die mit Lucene 6 eingeführten Points noch nicht mit Solr einsetzbar. Dies wird vermutlich in Version 6.1 nachgeholt. Die Community ist sich hier noch nicht einig, wie mit dem Zwang zur Neuindexierung aller Daten umgegangen werden soll.
Die Liste der Änderungen von Apache Lucene und Apache Solr sind auf der Projekt-Webseite zu finden.
Aufmacherbild: Danger Shark silhouettes von Shutterstock / Urheberrecht: Dashikka
Hinterlasse einen Kommentar