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-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}
]
}'