Ich führe von hier aus ein Apache Solr-Tutorial aus:

http://lucene.apache.org/solr/guide/7_6/solr-tutorial.html

Solr wird ausgeführt und ich kann Abfragen in einem Webbrowser ausführen.

Das Tutorial erwähnt cURL, mit denen ich nicht vertraut bin.

Ich habe CURL nach C:\Curl entpackt und Curl in PATH environment variable aufgenommen: C:\Curl\curl-7.63.0-win64-mingw\bin

Beim Ausführen des folgenden Befehls an einer Windows-Eingabeaufforderung wird eine Fehlermeldung angezeigt. Ich habe gegoogelt, um zu versuchen, eine Lösung ohne Erfolg zu finden:

Code unten:

C:\Curl\curl-7.63.0-win64-mingw\bin>curl -X POST -H 'Content-type:application/json' --data-binary '{"add-field": {"name":"name", "type":"text_general", "multiValued":false, "stored":true}}' http://localhost:8983/solr/films/schema

Erzeugt folgenden Fehler:

curl: (3) unmatched brace in URL position 1:
{name:name,
 ^
curl: (3) URL using bad/illegal format or missing URL
curl: (3) URL using bad/illegal format or missing URL
curl: (3) unmatched close brace/bracket in URL position 12:
stored:true}}'
           ^
{
  "responseHeader":{
    "status":400,
    "QTime":1},
  "error":{
    "metadata":[
      "error-class","org.apache.solr.common.SolrException",
      "root-error-class","org.apache.solr.common.SolrException"],
    "msg":"no stream",
    "code":400}}

Ich habe versucht, ein -g hinzuzufügen, um das Globbing zu deaktivieren.

curl -g -X POST -H 'Content-type:application/json' --data-binary '{"add-field": {"name":"name", "type":"text_general", "multiValued":false, "stored":true}}' http://localhost:8983/solr/films/schema

Dies erzeugte einen fast identischen Fehler:

C:\Curl\curl-7.63.0-win64-mingw\bin>curl -g -X POST -H 'Content-type:application/json' --data-binary '{"add-field": {"name":"name", "type":"text_general", "multiValued":false, "stored":true}}' http://localhost:8983/solr/films/schema

curl: (3) URL using bad/illegal format or missing URL
curl: (3) URL using bad/illegal format or missing URL
curl: (3) URL using bad/illegal format or missing URL
curl: (3) URL using bad/illegal format or missing URL
{
  "responseHeader":{
    "status":400,
    "QTime":1},
  "error":{
    "metadata":[
      "error-class","org.apache.solr.common.SolrException",
      "root-error-class","org.apache.solr.common.SolrException"],
    "msg":"no stream",
    "code":400}}

Ich habe dann versucht, die einfachen Anführungszeichen zu entfernen und die doppelten Anführungszeichen zu umgehen, habe dann aber den folgenden Fehler erhalten:

curl -g -X POST -H Content-type:application/json --data-binary {\"add-field\": {\"name\":\"name\", \"type\":\"text_general\", \"multiValued\":false, \"stored\":true}} http://localhost:8983/solr/films/schema

Curl: (3) URL im schlechten / illegalen Format oder fehlende URL Curl: (3) URL im schlechten / illegalen Format oder fehlende URL Curl: (3) URL im schlechten / illegalen Format oder fehlende URL Curl: (3) URL im schlechten Format / unzulässiges Format oder fehlende URL {"responseHeader": {"status": 500, "QTime": 4}, "error": {"msg": "Vorzeitiger EOF: char = (EOF), position = 11 AFTER = ' '"," trace ":" org.noggit.JSONParser $ ParseException: Vorzeitige EOF: char = (EOF), position = 11 AFTER =' '\ r \ n \ tat org.noggit.JSONParser.err (JSONParser.java: 419) \ r \ n \ tat org.noggit.JSONParser.next (JSONParser.j ava: 973) \ r \ n \ tat org.noggit.JSONParser.nextEvent (JSONParser.java:1061) \ r \ n \ tat org .apache.solr.common.util.CommandOperation.parse (CommandOperation.java:285) \ r \ n \ tat org.apache.solr.common.util.Command Operation.readCommands (CommandOperation.java:350) \ r \ n \ tat org.apache.solr.common.util.CommandOperation.readCommands (CommandOperation.java:326) \ r \ n \ tat org.apache.solr.api.ApiBag.getCommandOperations (A piBag.java:289) \ r \ n \ tat org.apache.solr.servlet.Http SolrCall.getCommands (HttpSolrCall.java:1073) \ r \ n \ tat org.apache.solr.servlet.SolrRequestParsers $ 1.getCommands (SolrRequestParsers.java:245) \ r \ n \ tat o rg.apache.solr.schema. SchemaManager.performOperations (SchemaManager.java:77) \ r \ n \ tat org.apache.solr.handler.SchemaHandler.handleRequestBody (SchemaHandler.java:90) \ r \ n \ tat org.apache.solr.handler.Requ estHandlerBase .handleRequest (RequestHandlerBase.java:199) \ r \ n \ tat org.apache.solr.core.SolrCore.execute (SolrCore.java:2541) \ r \ n \ tat org.apache.solr.servlet.HttpSolrCall.execute (HttpSolrCall.java:709) \ r \ n \ tat org.apache.solr.servlet.HttpSolrCall.call (HttpSolrCall.java:515) \ r \ n \ tat org.apache.solr.servlet.SolrDispatchFilter.doFilter (SolrDisp .java: 377) \ r \ n \ tat org.apache.solr.servlet.SolrDi spatchFilter.doFilter (SolrDispatchFilter.java:323) \ r \ n \ tat org.eclipse.jetty.servlet.ServletHandler $ CachedChain.doFilter ( ServletHandler.java:1634)\r\n\tat org.eclipse.jetty.servlet.ServletHandler.doHa ndle (ServletHandler.java:533) \ r \ n \ tat org.eclip se.jetty.server.handler.ScopedHandler.handle (ScopedHandler.java:146) \ r \ n \ tat org.eclipse.jetty.security.SecurityHandler.handle (SecurityHandler.java:548) \ r \ n \ tat org. eclipse.jetty.server.handler.HandlerWrapper.handle (HandlerWrapper.java:132) \ r \ n \ tat org.eclipse.jetty.server.handler.ScopedHandler.nextHandle (ScopedHandler.java:257) \ r \ n \ tat org.eclipse.je tty.server.session.SessionHandler.doHandle (SessionHandler.java:1595) \ r \ n \ tat org.eclipse.jetty.server.handler.ScopedHandler.nextHandle (ScopedHandler.java:255) \ r \ n \ tat org.eclipse.jetty.server.handler. ContextHandler.doHandle (ContextHandler.java:1317) \ r \ n \ tat org.eclipse.jetty.server.handler.ScopedHandler.nextScope (ScopedHandler.java:203) \ r \ n \ tat org.eclipse.jetty.servlet. ServletHandler.doScope (Serv letHandler.java:473)\r\n\tat org.eclipse.jetty.server.session.SessionHandler.doScope (SessionHandler.java:1564) \ r \ n \ tat org.eclipse.jetty.server .handler.ScopedHandler.nextScope (ScopedHandler.java:201) \ r \ n \ tat org.eclipse.jetty.server.handler.ContextHandler.doScope (ContextHandler.java:1219) \ r \ n \ tat org.eclipse.jetty .server.handler.ScopedHandler.handle (ScopedHandler.java:144) \ r \ n \ tat org.eclipse.jett y.server.handler.ContextHandlerCollection.handle (ContextHandlerCollection.java:219) \ r \ n \ tat org. eclipse.jetty.server.handler.HandlerCollection.handle (HandlerCollection.java:126) \ r \ n \ tat org.eclipse.je tty.server.handler.HandlerWrapper.handle (HandlerWrapper.java:132) \ r \ n \ tat org.eclipse.jetty.rewrite.handler.RewriteHandler.handle (RewriteHandler.java:335) \ r \ n \ tat org.eclipse.jetty.server.handler. Hand lerWrapper.handle (HandlerWrapper.java:132) \ r \ n \ tat org.eclipse.jetty.server.Server.handle (Server.java:531) \ r \ n \ tat org.eclipse.jetty.server.HttpChannel .handle (HttpChannel.java:352) \ r \ n \ tat org.eclipse .jetty.server.HttpConnection.onFillable (HttpConnection.java:260) \ r \ n \ tat org.eclipse.jetty.io.AbstractConnection $ ReadCallback .succeeded (AbstractConnection.java:281) \ r \ n \ tat org.eclipse.jetty.io.FillIn terest.fillable (FillInterest.java:102) \ r \ n \ tat org.eclipse.jetty.io.ChannelEndPoint $ 2 .run (ChannelEndPoint.java:118) \ r \ n \ tat org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask (EatWhatYouKill .java: 333) \ r \ n \ tat org.eclipse.jetty.util .thread.strategy.EatWhatYouKill.doProduce (EatWhatYouKill.java:310) \ r \ n \ tat org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce (EatWhatYouKill.java: 168) \ r \ n \ tat org .eclipse.jetty.util.thread.strategy.EatWhatYouKill.run (EatWhatYouKill.java:126) \ r \ n \ tat org.eclipse.jetty.util.thread.ReservedThreadExecutor $ ReservedThread.run (ReservedThread Testamentsvollstrecker. java: 366) \ r \ n \ tat org.eclipse.jetty.util.thread.QueuedThreadPool.runJob (QueuedThreadPool.java:762) \ r \ n \ tat org.eclipse.jetty.util.thread.QueuedThreadPool $ 2.run (QueuedThreadPool.java:680)\r\n\tat Java. lang.Thread.run (Unbekannte Quelle) \ r \ n "," Code ": 500}}

Ich weiß, dass es zu diesem Problem viele ähnliche Fragen und Antworten zu SO gibt, aber sie sind nicht ganz gleich und keine der Lösungen, die ich versucht habe, mein Problem zu lösen.

2
GoodJuJu 20 Jän. 2019 im 02:12

3 Antworten

Beste Antwort

Ich habe die einfachen Anführungszeichen durch doppelte Anführungszeichen ersetzt und die doppelten Anführungszeichen in den geschweiften Klammern mit einem Backslash maskiert, und es hat funktioniert.

Ich ging davon aus:

curl --X POST -H 'Content-type:application/json' --data-binary '{"add-field": {"name":"name", "type":"text_general", "multiValued":false, "stored":true}}' http://localhost:8983/solr/films/schema

Dazu:

curl --X POST -H "Content-type:application/json" --data-binary "{\"add-field\": {\"name\":\"name\", \"type\":\"text_general\", \"multiValued\":false, \"stored\":true}}" http://localhost:8983/solr/films/schema

Vielen Dank an alle für Ihre gemeinsamen Antworten. Ich bin mir sicher, dass das Hinzufügen von JSON zu einer separaten Datei einige positive Aspekte hat, aber ich wollte die Erstellung zusätzlicher Dateien vermeiden.

6
GoodJuJu 25 Jän. 2019 im 09:26

Die Windows-Eingabeaufforderung unterstützt keine einfachen Anführungszeichen. Dies ist ein Problem, da cURL-Anweisungen einfache Anführungszeichen verwenden, um JSON-Daten anzugeben.

Um das Problem zu beheben, speichern Sie den JSON in einer separaten Datei (z. B. add-field.txt) und importieren Sie ihn in die cURL-Anweisung, damit Sie ihn später folgendermaßen ausführen können:

curl -X POST -H 'Content-type:application/json' --data-binary @add-field.txt http://localhost:8983/solr/films/schema
1
Mysterion 20 Jän. 2019 im 09:53

Ich würde einen anderen Weg gehen. Wenn Sie das Wonderfool-Tool von Microsoft WSL installieren. Sie können alle diese Befehle so ausführen, wie sie sind, da Sie in einem Linux-System ausgeführt werden. Es wird irgendwann eine große Zeitersparnis sein.

0
Persimmonium 20 Jän. 2019 im 11:42