2016-10-25 1 views
1

Nous essayons de créer/télécharger de nouveaux synonymes à Solr en tant que ressources gérées. Nous rencontrons quelques problèmes lorsque nous créons des synonymes à plusieurs termes comme, par exemple, «États-Unis d'Amérique» ou «Spider-Man». La documentation Solr fournit un exemple de commande curl pour les synonymes à un terme, mais n'a pas d'exemple de commande curl pour plusieurs termes.Solr: commande curl pour ajouter de nouveaux synonymes à plusieurs termes

Nous avons essayé la commande suivante et quelques variantes:

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"]] 

Pour les trois nous avons eu la erreurs suivantes:

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

Après nous avons essayé de les créer à partir du fichier JSON avec succès; nous avons utilisé la commande boucle suivante:

4)

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

Le synonyms_test.json a:

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

Après nous avons essayé d'étendre cette 'solution' parce que nous avons besoin de créer/télécharger des milliers de synonymes à une collection existante. Ensuite, nous décidons de remplir le fichier JSON avec tableau de tableaux (une teneur en JSON valide):

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

Et le résultat était:

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

Avez-vous une idée résoudre cela?

Cordialement, DM

Répondre

0

Selon le documentation un exemple est le suivant

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

Ce qui est le même que votre numéro 2 par exemple, sauf que vous utilisez POST pas PUT. Essayez d'utiliser PUT et voyez si cela aide.

En outre,

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

n'est pas valide parce que vous ne pouvez mettre un tableau de chaînes. Pour ajouter plusieurs groupes de synonymes symétriques, vous devrez effectuer un appel pour chaque tableau.

+0

Bonjour Andrew! Nous avons essayé vos deux propositions et personne n'a travaillé. Notez que la commande 'curl -X POST -H" Type de contenu: application/json "... --data-binary" ["Euro", "EUR"] "' fonctionne bien! –

+0

Que diriez-vous d'essayer d'utiliser --data au lieu de --data-binary? –

+0

Salut Andrew! Avec seulement --data (au lieu de --data-binary) nous avons eu la même erreur que 1) et 3). –