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

You Might Also Like

Wie Lenovo die Suche zu einem strategischen Wachstumstreiber in der KI-Ära machte

Erfahren Sie, wie Lenovo mit Lucidworks die Suche in einen strategischen Wachstumstreiber...

Read More

Der Stand der generativen KI 2025: 3 Fragen, um Ihre Bereitschaft für agenturische KI zu verstehen

Wie gut sind Unternehmen auf agentenbasierte KI vorbereitet? Die Daten von Lucidworks...

Read More

Wir geben unsere Gewinner des Superstars of Search Award 2025 bekannt: Mouser, TE, und Coppel

Wir feiern 3 unglaubliche Lucidworks-Kunden, die ihre Sucherfahrung verändert und hervorragende Geschäftsergebnisse...

Read More

Quick Links