Indizierung benutzerdefinierter JSON-Daten
Solr unterstützt bereits Aktualisierungsanfragen im JSON-Format. Aber es unterstützt nur das Solr-Json-Format und nicht Ihr eigenes benutzerdefiniertes JSON. Jetzt (mit…
Solr unterstützt bereits Aktualisierungsanfragen im JSON-Format. Aber es unterstützt nur das Solr-Json-Format und nicht Ihr eigenes benutzerdefiniertes JSON. Jetzt (mit SOLR-6304, ab Version 4.10) unterstützt Solr jedes JSON-Dokument und das Dokument kann im gewünschten Format in Solr indiziert werden.
Transformieren und Indizieren von benutzerdefinierten JSON-Daten
Das Ziel dieser Funktion ist es, den Benutzern zu helfen, JSON in ein gültiges Solr-Dokument zu indexieren, je nach den Wünschen des Benutzers. Sie ermöglicht es dem Benutzer, eine einzelne JSON-Datei in 1 oder mehrere Solr-Dokumente aufzuteilen. Das endgültige indizierte Dokument kann über das Mapping, das mit der Anfrage übergeben wird, gesteuert werden. Ein oder mehrere gültige JSON-Dokumente können mit den Konfigurationsparametern an den Pfad /update/json/docs gesendet werden.
Parameter zuordnen
- split: Dieser Parameter ist erforderlich, wenn Sie die JSON-Eingabe transformieren möchten. Dies ist der Pfad, an dem das JSON geteilt werden muss. Wenn das gesamte JSON ein einziges Solr-Dokument bildet, muss der Pfad „/“ sein.
- f: Dies ist ein mehrwertiger Zuordnungsparameter. Es muss mindestens eine Feldzuordnung angegeben werden. Das Format des Parameters ist {target-field-name}: {json-path}. Der ‚json-path‘ ist ein erforderlicher Teil . target-field-name ist der Name des Feldes im Solr-Eingabedokument. Er ist optional und wird automatisch aus der json-Eingabe abgeleitet.
- echo: Dies dient der Fehlersuche. Setzen Sie es auf true , wenn Sie die Dokumente als Antwort zurückgeben möchten. Es wird nichts indiziert
Beispiel 1:
curl 'http://localhost:8983/solr/collection1/update/json/docs' '?split=/exams' '&f=first:/first' '&f=last:/last' '&f=grade:/grade' '&f=subject:/exams/subject' '&f=test:/exams/test' '&f=marks:/exams/marks' -H 'Content-type:application/json' -d ' { "first": "John", "last": "Doe", "grade": 8, "exams": [ { "subject": "Maths", "test" : "term1", "marks":90}, { "subject": "Biology", "test" : "term1", "marks":86} ] }'
Dies indiziert die folgenden zwei Dokumente
{ "first":"John", "last":"Doe", "marks":90, "test":"term1", "subject":"Maths", "grade":8 } { "first":"John", "last":"Doe", "marks":86, "test":"term1", "subject":"Biology", "grade":8 }
Da die endgültigen Feldnamen mit den Feldern des Eingabedokuments übereinstimmen, kann die Anfrage wie folgt vereinfacht werden,
Beispiel 2 :
curl 'http://localhost:8983/solr/collection1/update/json/docs' '?split=/exams' '&f=/first' '&f=/last' '&f=/grade' '&f=/exams/subject' '&f=/exams/test' '&f=/exams/marks' -H 'Content-type:application/json' -d ' { "first": "John", "last": "Doe", "grade": 8, "exams": [ { "subject": "Maths", "test" : "term1", "marks":90}, { "subject": "Biology", "test" : "term1", "marks":86} ] }'
Wildcards
Anstatt alle Feldnamen explizit anzugeben, ist es möglich, einen Platzhalter „*“ oder einen Platzhalter „**“ anzugeben, um Felder automatisch zuzuordnen. Die Einschränkung ist, dass Wildcards nur am Ende des json-Pfads verwendet werden können. Der geteilte Pfad kann keine Platzhalter verwenden. Im Folgenden finden Sie Beispiele für die Zuordnung von Platzhaltern zu Pfaden
- f=/docs/*: bildet alle Felder unter docs und im Namen wie in json angegeben ab
- f=/docs/**: mappt alle Felder unter docs und seine Kinder im Namen wie in json angegeben
- f=searchField:/docs/*: ordnet alle Felder unter /docs einem einzigen Feld namens ’searchField‘ zu
- f=searchField:/docs/** : ordnet alle Felder unter /docs und seinen Kindern dem searchField zu
Mit Wildcards können wir unser vorheriges Beispiel wie folgt vereinfachen
Beispiel 3:
'curl 'http://localhost:8983/solr/collection1/update/json/docs' '?split=/exams' '&f=/**' -H 'Content-type:application/json' -d ' { "first": "John", "last": "Doe", "grade": 8, "exams": [ { "subject": "Maths", "test" : "term1", "marks":90}, { "subject": "Biology", "test" : "term1", "marks":86} ] }'
Es ist auch möglich, alle Werte an ein einzelnes Feld zu senden und eine Volltextsuche in diesem Feld durchzuführen. Dies ist eine gute Möglichkeit, JSON-Dokumente blind zu indizieren und abzufragen, ohne sich um Felder und Schemata kümmern zu müssen.
Beispiel 4 :
'curl 'http://localhost:8983/solr/collection1/update/json/docs' '?split=/' '&f=txt:/**' -H 'Content-type:application/json' -d ' { "first": "John", "last": "Doe", "grade": 8, "exams": [ { "subject": "Maths", "test" : "term1", "marks":90}, { "subject": "Biology", "test" : "term1", "marks":86} ] }'