2013-11-27 5 views
7

Wie aktualisiert man mehrere Dokumente in Solr 4.5.1 mit JSON? Ich habe versucht, diese aber es funktioniert nicht:Wie aktualisiert man mehrere Dokumente in Solr mit JSON?

POST /solr/mycore/update/json:

{ 
    "commit": {}, 
    "add": { 
    "overwrite": true, 
    "doc": [{ 
     "thumbnail": "/images/404.png", 
     "url": "/404.html?1", 
     "id": "demo:/404.html?1", 
     "channel": "demo", 
     "display_name": "One entry", 
     "description": "One entry is not enough." 
     }, { 
     "thumbnail": "/images/404.png", 
     "url": "/404.html?2", 
     "id": "demo:/404.html?2", 
     "channel": "demo", 
     "display_name": "Another entry", 
     "description": "Another entry is required." 
     } 
    ] 
    } 
} 

Antwort

4

Solr erwartet man für jedes Dokument -Taste in der JSON-Struktur „add“ (was seltsam erscheinen mag, wenn man über die ursprüngliche denken Bedeutung des Schlüssels im Objekt), da es sich bei der Indexierung direkt auf das XML-Format abbildet - und auf diese Weise können Sie Metadaten für jedes Dokument selbst erstellen.

{ 
    "commit": {}, 
    "add": { 
     "doc": { 
      "id": "321321", 
      "name": "barfoo" 
     } 
    }, 
    "add": { 
     "doc": { 
      "id": "123123", 
      "name": "Foobar"   
     } 
    } 
} 

.. funktioniert. Ich denke, ein Array als das durch "add" referenzierte Element zuzulassen würde mehr Sinn machen, aber ich habe mich nicht weiter in die Quelle gegraben oder kenne die Gründe dafür.

+0

Dank. Dies ist ein ungültiges JSON-Format, richtig? Es gibt keine Möglichkeit, diese Ausgabe zu erzeugen, aber handcodiert. – burnersk

+0

Er übergibt einige Online-Validatoren, aber http://www.freeformatter.com/json-validator.html erklärt, dass "die JSON-Eingabe laut RFC 4627 (JSON-Spezifikation) NICHT gültig ist. Unerwarteter Duplikatschlüssel: an Position 136 hinzufügen. " – CoDEmanX

5

Ich verstehe, dass (zumindest) von den Versionen 4.0 und älter von solr, das wurde behoben. Schau dir http://wiki.apache.org/solr/UpdateJSON an.

In ./exampledocs/books.json gibt es ein Beispiel für eine JSON-Datei mit mehreren Dokumenten.

[ 
{ 
"id" : "978-0641723445", 
"cat" : ["book","hardcover"], 
"name" : "The Lightning Thief", 
"author" : "Rick Riordan", 
"series_t" : "Percy Jackson and the Olympians", 
"sequence_i" : 1, 
"genre_s" : "fantasy", 
"inStock" : true, 
"price" : 12.50, 
"pages_i" : 384 
} 
, 
{ 
"id" : "978-1423103349", 
"cat" : ["book","paperback"], 
"name" : "The Sea of Monsters", 
"author" : "Rick Riordan", 
"series_t" : "Percy Jackson and the Olympians", 
"sequence_i" : 2, 
"genre_s" : "fantasy", 
"inStock" : true, 
"price" : 6.49, 
"pages_i" : 304 
}, 
... 
] 

Während @fiskfisk Antwort noch eine gültige JSON ist, ist es nicht leicht serializable aus einer Datenstruktur zu sein. Dieser ist.

1

elachell ist korrekt, dass das Array-Format funktioniert, wenn Sie nur Dokumente mit den Standardeinstellungen hinzufügen. Leider funktioniert das nicht, wenn Sie beispielsweise einigen Dokumenten einen benutzerdefinierten Boost hinzufügen oder die Überschreibungseinstellung ändern müssen. Sie müssen dann die gesamte Objektstruktur mit einem "add" -Schlüssel für jeden von ihnen verwenden, der, wie sie darauf hinwiesen, es frustrierend nervig macht, von den meisten Sprachen zu serialisieren, die den gleichen Schlüssel nicht mehr als einmal in einem zulassen Objekt:

{ 
"commit": {}, 
"add": { 
    "doc": { 
     "id": "321321", 
     "name": "barfoo" 
    }, 
    "boost": 2.0 
}, 
"add": { 
    "doc": { 
     "id": "123123", 
     "name": "Foobar"   
    }, 
    "boost": 1.5, 
    "overwrite": false 
    } 

}

0

eine weitere Option, wenn Sie auf Solr sind 4.10 oder später ist eine benutzerdefinierte JSON Struktur zu verwenden und Solr sagen, wie es Index (nicht sicher, wie Boosts mit dieser Methode entweder addieren, aber es ist eine gute Option, wenn Sie bereits eine Datenstruktur in JSON haben und diese nicht in das Solr-Format konvertieren wollen. Hier ist die Solr Dokumentation zu dieser Option:

https://cwiki.apache.org/confluence/display/solr/Uploading+Data+with+Index+Handlers#UploadingDatawithIndexHandlers-TransformingandIndexingCustomJSON

Verwandte Themen