2014-06-18 1 views
0

J'écris une application en utilisant Datastax Enterprise et DSE Search (SolR on Cassandra).Datastax DSE Search: Comment publier solrconfig.xml et schema.xml en utilisant java?

Mon problème est que je dois générer schema.xml et envoyer à SolR à la fois solrconfig.xml et schema.xml en utilisant Java, dynamiquement. Ne pas utiliser curl.

J'ai essayé de le faire en utilisant Commons HttpComponents mais le fichier solrconfig.xml inséré dans la table cassandra n'est pas correct. Http données relatives est inséré avant le début du fichier XML, comme ceci:

��: 
solr_adminsolr_resourcesresource_value��--9NDJNu2AW4jtIyX6ggQAgEqI3FXp3JpDZ6 
Content-Disposition: form-data; name="solrconfig.xml"; filename="solrconfig.xml" 
Content-Type: application/xml; charset=ISO-8859-1 
Content-Transfer-Encoding: binary 

<config> 
<!-- In all configuration below, a prefix of "solr." for class names 
    is an alias that causes solr to search appropriate packages, 
    including org.apache.solr.(search|update|request|core|analysis) 

[Continued...] 

Et bien sûr SolR échoue quand il essaie de lire cette configuration.

Est-ce que quelqu'un sait comment envoyer ces deux fichiers par programme de java à SolR correctement?

Merci d'avance pour vos réponses.

+0

L'utilisation de HttpClient ne fonctionne pas (lire depuis le blob cassandra). L'utilisation de SolrJ pour créer le core ne fonctionne pas (se plaindre des fichiers manquants). Une requête ContentStream échoue avec une erreur 500 HttpSolrServer server = new HttpSolrServer (solrUrl); ContentStreamUpdateRequest req = new ContentStreamUpdateRequest ("/ resources /" + solrKeyspace + "." + DatasetName + "/"); req.addContentStream (nouveau ContentStreamBase.FileStream (nouveau fichier ("solrconfig.xml"))); requête serveur (req); server.commit(); retourné état non ok: 500, message: Erreur interne du serveur – fesnault

Répondre

0

J'ai finalement trouvé le moyen de le faire. J'ai regardé les tests de Solandra et j'ai trouvé comment ils envoyaient des fichiers à solr.

  URL url = new URL("http://hostname:port/solr/resource/solrksname.tablename/schema.xml"); 

     // write 
     try { 

      HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 
      conn.setDoOutput(true); 
      OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream()); 
      wr.write(builder.toString()); 
      wr.flush(); 
      wr.close(); 

      System.out.println("Schema insert response code : " + conn.getResponseCode()); 

     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

et le code de réponse est de 200, la vérification renvoie le schéma correct, pas d'erreur dans solr admin, et aucune erreur lors de la création de base Solr. Je ne sais pas comment je l'ai fait mal la première fois, la manière était d'utiliser la base HttpURLConnection et de flux de données avec un écrivain de flux de sortie. Pas besoin de HttpCommons.

0

Un message HTTP utilisant le HttpClient devrait fonctionner. Peut-être que le fichier schema.xml fait référence à d'autres fichiers qui doivent être téléchargés. Pouvez-vous vérifier le DSE system.log? Pouvez-vous vérifier le HTTP Post fonctionne avec un fichier schema.xml différent?

+0

Il n'y a aucune référence à des fichiers dans schema.xml. Et ce n'est pas un problème lors de l'interprétation du fichier, c'est juste que l'analyseur s'arrête à la première ligne car le fichier n'est pas correct. Pourriez-vous partager un exemple de code pour télécharger le schéma et solrconfig dans la recherche DSE, s'il vous plaît? (Et peut-être un morceau de code pour charger le schéma ou le fichier blob de solrconfig dans la table cassandra? – fesnault

Questions connexes