Schemaloses Solr: Teil 1

Dies ist der erste Teil einer Serie über das Hinzufügen schemaloser Funktionen zu Apache Solr. Solr verfügt über dynamische Felder,…

Dies ist der erste Teil einer Serie über das Hinzufügen schemaloser Funktionen zu Apache Solr.

Solr verfügt über dynamische Felder, die eine Art schemalosen Betrieb ermöglichen: Sie ordnen Feldnamenspräfixe oder -suffixe den Feldtypen zu, so dass die Feldnamen nicht im Voraus vollständig bekannt sein müssen. Es wäre jedoch schön, wenn Solr einen schemalosen Modus unterstützen würde, der keine Schemakonfiguration im Voraus erfordert. Dieser schemalose Modus sollte Feldtyp-Zuordnungen für unbekannte Felder auf der Grundlage des Feldinhalts und nicht des Feldnamens bestimmen. Wir arbeiten daran, dies zu ermöglichen.

Was bedeutet „schemalos“?

Unter schemafrei versteht man in der Regel, dass keine Konfiguration erforderlich ist. Eine schemalose Suchmaschine sollte Ihre Daten indizieren, d.h. verarbeiten und speichern, ohne dass Ihnen gesagt werden muss, welche Struktur Sie erwarten oder wie Sie die Daten verarbeiten sollen.

Sie können schemalose Funktionen verwenden, wenn Sie ein neuer Benutzer sind und nicht erst herausfinden möchten, wie Sie die Engine konfigurieren müssen, bevor Sie loslegen können, oder wenn Sie Datenquellen haben, deren Struktur Sie nicht vorhersagen können. Weiter unten finden Sie eine Diskussion über den geeigneten Anwendungsbereich für schemalose Funktionen.

Was ist ein Schema?

Ein Schema ist eine Sammlung von a) Beschränkungen für die Datensatzstruktur und b) Datenverarbeitungsanweisungen, die mit Elementen der Datensatzstruktur verbunden sind.

In Solr gespeicherte Datensätze werden als Dokumente bezeichnet. Eingabedokumente sind eine Sammlung von Feldern, die aus Name/Wert-Paaren bestehen. Die Suche in Solr erfordert, dass Sie bei Abfragen nach indizierten Feldern jedes Feld sowohl in der Abfrage als auch im Eingabedokument auf kompatible Weise verarbeiten. Diese Kompatibilität wird durch das Schema von Solr ermöglicht. Das Schema beherbergt die Benutzerkonfiguration der Struktur des Eingabedokuments – ein Menü mit möglichen Feldnamen und dynamischen Feldnamensmustern (mehr zu dynamischen Feldern weiter unten) – sowie einige Aspekte der Verarbeitung zur Index- und Abfragezeit.

Das Solr-Schema ordnet explizit benannten Feldern und dynamischen Feldern Feldtypen zu, bei denen es sich um Sammlungen von Feldeigenschaften handelt. Dazu gehören: ob ein Feld durchsuchbar ist; ob es in seiner ursprünglichen Form gespeichert wird; ob es in einem Eingabedokument vorhanden sein muss; sein Datentyp (z.B. Ganzzahl, Datum, Text); und für Textdatentypen die Spezifikationen der Textverarbeitungspipeline. Siehe http://wiki.apache.org/solr/SchemaXml für weitere Einzelheiten.

Lucene, die Bibliothek der Suchmaschine, die Solr unter der Haube verwendet, hat keine Schemafunktion. Daher müssen alle Anwendungen, die Lucene verwenden, einschließlich Solr, eine Form eines Schemas pflegen, um Abfragen auszuführen und sicherzustellen, dass die Verarbeitung der Abfragefelder konsistent mit der Verarbeitung der indizierten Felder erfolgt.

Die dynamischen Felder von Solr

Die dynamische Feldfunktion von Solr reduziert die Anforderungen an die Konfiguration von Feldern mit vorhersehbaren Namensmustern. Die folgende dynamische Felddefinition ordnet zum Beispiel jeden Feldnamen mit dem Suffix „_i“ dem Feldtyp „int“ zu, der an anderer Stelle im Schema deklariert ist:

[code language=“xml“]
<dynamicField name=“*_i“ type=“int“ indexed=“true“ stored=“true“ />
[/code]

Dynamische Felder sind eine Art ungarische Notation für Dokumentfelder: Die Benennung von Feldern mit konfigurierbaren Suffixen oder Präfixen löst Zuordnungen zu Feldtypen aus.

Dynamische Felder erfordern zwar, dass Sie sie konfigurieren (oder einen vorkonfigurierten Satz verwenden, z. B. aus dem Solr-Beispielschema). Sie sind also nicht gerade konfigurationsfrei, aber sie können die Größe des Schemas erheblich reduzieren, und die Feldnamen müssen nicht im Voraus vollständig ausgeschrieben werden.

Schritte zur Schemalosigkeit

In den letzten Versionen wurden mehrere Solr-Funktionen hinzugefügt, um eine Form der Schemalosigkeit zu ermöglichen, bei der Solr den Feldtyp für unbekannte Felder anhand des Datentyps des Eingabedokuments (z. B. boolesche und numerische JSON-Typen) oder durch Erraten des Feldtyps anhand des Feldwerts bestimmt. Es wird daran gearbeitet, die Aktivierung eines schemafreien Solr-Modus zu beenden.

Wenn Sie z.B. ein Dokument mit dem Feld Name/Wert {"startDate":"10/10/2010",...} hinzufügen, wobei das Feld startDate noch nicht im Schema enthalten ist, wird dieses Feld zunächst dem Schema hinzugefügt, und zwar mit einer Zuordnung zu einem bereits im Schema definierten Datumstyp, und anschließend wird das Dokument selbst hinzugefügt.

Drei Funktionen, die den schemafreien Solr-Modus unterstützen, wurden in die Solr-Codebasis aufgenommen:

  1. Lesezugriff auf das Live-Schema über eine neue REST-API
  2. Verwaltetes Schema: Machen Sie Solr zum Eigentümer des Schemas
  3. Neue Felder zum Live-Schema hinzufügen

Schema REST API: Lesezugriff

Solr 4.2 enthielt einen Nur-Lese-Zugriff über eine REST-API auf die meisten Elemente des Live-Schemas, und Solr 4.3 ergänzte diese API, um alle Schema-Elemente abzudecken.

Um zum Beispiel die dynamische Felddefinition für "*_i" abzurufen, können Sie eine Anfrage über curl senden und die Ergebnisse unten sehen:

[code language=“javascript“ autolinks=“false“]
PROMPT$ curl ‚http://localhost:8983/solr/schema/dynamicfields/*_i‘
{
„responseHeader“:{
„status“:0,
„QTime“:1},
„dynamicfield“:{
„name“: „*_i“,
„type“: „int“,
„indexed“:true,
„stored“:true}}
[/code]

Standardmäßig formatiert die Schema-REST-API ihre Antwort in eingerücktem JSON, aber Sie können das Antwortformat mit dem Parameter „wt“ angeben, z.B. ?wt=xml, usw.

Das vollständige Live-Schema im schema.xml-Format ist ebenfalls verfügbar, indem Sie den dafür vorgesehenen Parameter „wt“ verwenden:

[code language=“xml“ autolinks=“false“]
PROMPT$ curl ‚http://localhost:8983/solr/schema?wt=schema.xml‘
<?xml version=“1.0″ encoding=“UTF-8″?>
<schema name=“example“ version=“1.5″>
id
text





[…]
[/code]

Auf der Seite Schema REST API im Solr-Wiki finden Sie eine vollständige Auflistung der URLs für den Zugriff auf jedes Schema-Element: http://wiki.apache.org/solr/SchemaRESTAPI.

Verwaltetes Schema

Eine Voraussetzung für das dynamische Hinzufügen von Feldern zum Live-Schema ist, dass Solr die Kontrolle über das Schema übernimmt. Eine Konfigurationseinstellung in solrconfig.xml aktiviert den verwalteten Schemamodus, in dem eine neue Schemadatei, die standardmäßig managed-schema heißt, das persistierte Schema enthält. Beim ersten Start wird eine bestehende Datei schema.xml geparst und dann in die verwaltete Schemadatei übertragen, und die ursprüngliche Datei schema.xml wird in schema.xml.bak umbenannt.

Es ist möglich, zwischen den Modi „verwaltetes Schema“ und „vom Benutzer editierbares Schema“ zu wechseln, indem Sie die Konfiguration des verwalteten Schemas aus solrconfig.xml entfernen (der Modus „vom Benutzer editierbares Schema“ ist die Standardeinstellung) und eine Datei schema.xml bereitstellen, die aus dem über die Schema-REST-API verfügbaren Live-Schema gebootstrapped werden kann.

Die Funktion für verwaltete Schemata ist in Solr 4.3 enthalten.

Neue Felder zum Live-Schema hinzufügen

Diese Funktion wird Bestandteil von Solr 4.4 sein, das zu diesem Zeitpunkt noch nicht veröffentlicht wurde.

Interne und REST-API-Methoden wurden hinzugefügt, um das Hinzufügen eines oder mehrerer bisher unbekannter Felder zum Live-Schema zu ermöglichen. Das Schema wird nach dem Hinzufügen der unbekannten Felder persistiert. Im SolrCloud-Modus, wenn das verwaltete Schema aktiviert ist, überwacht jedes Replikat das von ihm verwendete Schema und lädt das Schema automatisch neu, wenn ein anderes Replikat das Schema in ZooKeeper persistiert.

Um beispielsweise ein einzelnes neues Feld namens "newfield" über die Schema-REST-API hinzuzufügen:

[code language=“bash“ autolinks=“false“]
PROMPT$ curl -X PUT -H ‚Content-type:application/json‘
-d ‚{„type“: „text_general“, „stored“: „false“}‘
http://localhost:8983/solr/schema/fields/newfield
[/code]

Auf der Wiki-Seite Schema REST API finden Sie alle Einzelheiten.

Durch die Kombination der Lese- und Schreibmethoden der Schema-REST-API kann eine Anwendung schrittweise ein Schema auf der Grundlage der Struktur des Eingabedokuments erstellen, indem sie die Felder in jedem Eingabedokument mit den Feldern im Live-Schema vergleicht, unbekannte Felder hinzufügt und dann das Eingabedokument hinzufügt.

Was kommt als Nächstes?

Unter dem Solr JIRA-Problem SOLR-3250 wird derzeit an der Vervollständigung des oben beschriebenen schemafreien Solr-Modus gearbeitet.

Es ist geplant, die folgenden Feldtypen anhand der Feldwerte zu erraten: Datum/Uhrzeit (einschließlich einiger grundlegender Formate), double, long, boolesch und Text. Bei Feldern mit mehreren Werten wird der kleinste gemeinsame Nenner unter den Schätzungen für jeden Wert ermittelt.

Eine neue Beispielkonfiguration für den schemalosen Modus ist ebenfalls geplant.

Schemaless: Wozu ist es gut?

Es ist wichtig zu wissen, dass der schemalose Modus von Solr, sobald er verfügbar ist, schrittweise im Hintergrund ein Schema für Sie erstellt und nicht ohne Schema arbeitet. Wie oben beschrieben, kann Solr ohne ein Schema nicht richtig funktionieren.

Der schemalose Modus hilft Entwicklern beim Bootstrapping ihres Schemas, aber das Ergebnis ist nicht für den Produktionseinsatz geeignet. Benutzer des schemalosen Modus sollten ihn eher als Werkzeug für den ersten Entwurf eines Schemas denn als produktionsreife Lösung betrachten.

Einige Einschränkungen im schemalosen Modus:

Die Erstellung neuer Schemafelder in der Produktion zuzulassen, ist möglicherweise keine gute Idee.
In Solr können Sie einstellen, was passiert, wenn Sie auf unbekannte Felder stoßen. Dies kann dazu beitragen, Tippfehler und andere unerwünschte Quellen für neue Felder zu vermeiden. Wenn Sie den schemalosen Modus in der Produktion verwenden, werden Sie diesen Vorteil nicht nutzen können. Es ist sehr wahrscheinlich, dass bisher unbekannte Felder einem Muster entsprechen, das mit dynamischen Feldern abgeglichen werden kann. Sie sollten in der Lage sein, nach dem Hinzufügen einer Reihe von Dokumenten im schemalosen Modus die Menge der neu erstellten Felder zu betrachten und dann dynamische Felder zu erstellen, die neue Felder in der Zukunft abdecken.
Die Feldtyperkennung kann nicht die gesamte Bandbreite der Werte eines Feldes kennen
Der schemafreie Modus wählt Longs statt Ints und Doubles statt Floats, selbst wenn die Anfangswerte in die kleineren Datentypen passen würden, um die Möglichkeit eines Überlaufs zu vermeiden. Dies kann dazu führen, dass mehr Festplatten- und Arbeitsspeicher als nötig verwendet wird.
Begrenzte Diskriminierung bei der Datenverarbeitung
  • Die Feldtypen, auf die der schemalose Modus unbekannte Felder abbildet, sind auf eine recht kleine Teilmenge dessen beschränkt, wozu Solr in der Lage ist. Numerische und Datumsfeldtypen können zum Beispiel so eingestellt werden, dass sie schnellere Bereichsabfragen durchführen, was allerdings einen größeren Index erfordert.
  • Bei Textfeldern ist der schemalose Modus nicht in der Lage zu erkennen, ob Sie den Text in einzelne Begriffe aufteilen oder als einen einzigen Begriff belassen möchten, z.B. SKUs oder andere Zeichenfolgen, die Sie genau zuordnen müssen. Im schemalosen Modus werden Textfelder also immer in einzelne Begriffe zerlegt.
  • Dokumente mit Sprachunterschieden zwischen den einzelnen Feldern werden im schemalosen Modus nicht optimal behandelt – alle Textfelder erhalten die gleiche Behandlung.
  • Solr kann die Daten desselben Feldes auf mehrere Arten verarbeiten und Felder aggregieren, indem es die <copyField> Schema-Anweisung. Im Gegensatz dazu wird im schemalosen Modus jedes Feld nur auf eine Art und Weise verarbeitet, obwohl es eine <copyField> Direktive enthält, um den Inhalt aller anderen Felder in ein einziges Catch-All-Feld zu kopieren, um Abfragen mit nur einem Feld gegen den gesamten Dokumentinhalt zu ermöglichen.

Lassen Sie sich von den oben genannten Einschränkungen nicht entmutigen – der schemalose Modus ist ein effektives und geeignetes Werkzeug für die Schemaexplorations-/Definitionsphase neuer Projekte.

You Might Also Like

Vom Suchunternehmen zum praktischen KI-Pionier: Unsere Vision für 2025 und darüber hinaus

CEO Mike Sinoway gibt Einblicke in die Zukunft der KI und stellt...

Read More

Wenn KI schief geht: Fehlschläge in der realen Welt und wie man sie vermeidet

Lassen Sie nicht zu, dass Ihr KI-Chatbot einen 50.000 Dollar teuren Tahoe...

Read More

Lucidworks Kernpakete: Branchenoptimierte KI-Such- und Personalisierungslösungen

Entdecken Sie unsere umfassenden Core Packages, die Analytics Studio, Commerce Studio und...

Read More

Quick Links