2016-10-25 2 views
1

Wir versuchen, neue Synonyme zu Solr als verwaltete Ressourcen zu erstellen/zu laden. Wir haben einige Probleme, wenn wir synonyme Begriffe wie "United States of America" ​​oder "Spider Man" erstellen. Die Solr-Dokumentation enthält ein Beispiel für den Befehl curl für Synonyme mit nur einem Ausdruck, hat aber kein Beispiel für den Befehl curl für Multiterm.Solr: curl-Befehl zum Hinzufügen neuer Multi-Term-Synonyme

Wir haben versucht, den folgenden Befehl ein und einige Varianten:

1)

`curl -X POST -H "Content-type:application/json" ... --data-binary "["ARS","Argentinian Peso"]"` 

2)

curl -X POST -H "Content-type:application/json" ... --data-binary '["ARS","Argentinian Peso"]' 

3)

curl -X POST -H "Content-type:application/json" ... --data-binary [["ARS","Argentinian Peso"]] 

Für die drei wir bekamen folgende Fehler:

1)

{ 
    "responseHeader":{ 
    "status":500, 
    "QTime":2}, 
    "error":{ 
    "msg":"Expected ',' or ']': char=(EOF),position=16 BEFORE='[ARS,Argentinian'", 
    "trace":"org.noggit.JSONParser$ParseException: Expected ',' or ']': char=(EOF),position=16 BEFORE='[ARS,Argentinian'\n\tat org.noggit.JSONParser.err(JSONParser.java:356)...", 
    "code":500}} 

curl: (3) [globbing] unmatched close brace/bracket in column 5

2)

{ 
    "responseHeader": { 
    "status": 500, 
    "QTime": 2 
    }, 
    "error": { 
    "msg": "Bad Request", 
    "trace": "Bad Request (400) - Unsupported update format java.lang.String\n\tat org.apache.solr.rest.ManagedResource.doPut(ManagedResource.java:410)...", 
    "code": 500 
    } 
} 

3)

{ 
    "responseHeader": { 
    "status": 500, 
    "QTime": 2 
    }, 
    "error": { 
    "msg": "Expected ',' or ']': char=P,position=18 BEFORE='[[ARS,Argentinian P' AFTER='eso]]'", 
    "trace": "org.noggit.JSONParser$ParseException: Expected ',' or ']': char=P,position=18 BEFORE='[[ARS,Argentinian P' AFTER='eso]]'\n\tat org.noggit.JSONParser.err(JSONParser.java:356)...", 
    "code": 500 
    } 
} 

Nachdem wir sie aus JSON-Datei mit Erfolg zu schaffen versucht; wir verwenden, um den folgenden curl Befehl:

4)

curl -X POST -H "Content-type:application/json" ... --data-binary @synonyms_test.json 

Die synonyms_test.json hat:

["USA","United States of America"] 

Nachdem wir diese 'Abhilfe' zu erweitern versucht, weil wir Tausende erstellen/hochladen müssen von Synonymen zu einer bestehenden Sammlung. Dann entscheiden wir die JSON-Datei mit Array von Arrays (ein gültigen json-Gehalt) zu füllen:

[["aaa", "aaa1"],["bbb", "bbb1"]] 

Und das Ergebnis war:

4)

{ 
    "responseHeader": { 
    "status": 500, 
    "QTime": 2 
    }, 
    "error": { 
    "msg": "java.util.ArrayList cannot be cast to java.lang.String", 
    "trace": "java.lang.ClassCastException: java.util.ArrayList cannot be cast to java.lang.String ...", 
    "code": 500 
    } 
} 

Haben Sie eine Ahnung, wie um das zu lösen?

Grüße, DM

Antwort

0

Nach dem documentation ein Beispiel ist die folgende

curl -X PUT -H 'Content-type:application/json' --data-binary '["funny", "entertaining", "whimiscal", "jocular"]' "http://localhost:8983/solr/techproducts/schema/analysis/synonyms/english" 

die die gleiche wie Ihre Nummer 2 Beispiel ist, außer Sie POST nicht verwenden PUT. Versuchen Sie es mit PUT und sehen Sie, ob das hilft.Auch

,

[["aaa", "aaa1"],["bbb", "bbb1"]] 

ist kein gültiger, weil Sie nur ein Array von Strings setzen können. Um mehrere symmetrische Synonymgruppen hinzuzufügen, müssen Sie für jedes Array einen Aufruf ausführen.

+0

Hallo Andrew! Wir haben beide Vorschläge ausprobiert und niemand hat gearbeitet. Beachten Sie, dass der Befehl 'curl -X POST -H- Inhaltstyp: application/json" ... --data-binary "[" Euro "," EUR "]" 'läuft gut! –

+0

Wie wäre es mit --data anstelle von --data-binary? –

+0

Hallo Andrew! Mit nur --data (anstelle von --data-binary) haben wir den gleichen Fehler wie 1) und 3). –

Verwandte Themen