Solr: команда curl для создания многозначных синонимов

Мы пытаемся выполнить эту команду curl:

curl -X POST -H "Content-type:application/json" -u "USERNAME":"PASSWORD" "https://gateway.watsonplatform.net/retrieve-and-rank/api/v1/solr_clusters/CLUSTER_ID/solr/COLLECTION_NAME/schema/analysis/synonyms/english" --data-binary "["ARS","Argentinian Peso"]"

Результат:

{
"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)\n\tat org.noggit.JSONParser.nextEvent(JSONParser.java:983)\n\tat org.noggit.ObjectBuilder.getArray(ObjectBuilder.java:149)\n\tat org.noggit.ObjectBuilder.getVal(ObjectBuilder.java:59)\n\tat org.noggit.ObjectBuilder.getVal(ObjectBuilder.java:37)\n\tat org.noggit.ObjectBuilder.fromJSON(ObjectBuilder.java:33)\n\tat org.apache.solr.rest.RestManager$ManagedEndpoint.parseJsonFromRequestBody(RestManager.java:425)\n\tat org.apache.solr.rest.RestManager$ManagedEndpoint.post(RestManager.java:351)\n\tat org.restlet.resource.ServerResource.doHandle(ServerResource.java:454)\n\tat org.restlet.resource.ServerResource.doConditionalHandle(ServerResource.java:359)\n\tat org.restlet.resource.ServerResource.handle(ServerResource.java:1044)\n\tat org.restlet.resource.Finder.handle(Finder.java:236)\n\tat org.restlet.routing.Filter.doHandle(Filter.java:150)\n\tat org.restlet.routing.Filter.handle(Filter.java:197)\n\tat org.restlet.routing.Router.doHandle(Router.java:422)\n\tat org.restlet.routing.Router.handle(Router.java:639)\n\tat org.restlet.routing.Filter.doHandle(Filter.java:150)\n\tat org.restlet.routing.Filter.handle(Filter.java:197)\n\tat org.restlet.routing.Filter.doHandle(Filter.java:150)\n\tat org.restlet.routing.Filter.handle(Filter.java:197)\n\tat org.restlet.routing.Filter.doHandle(Filter.java:150)\n\tat org.restlet.engine.application.StatusFilter.doHandle(StatusFilter.java:140)\n\tat org.restlet.routing.Filter.handle(Filter.java:197)\n\tat org.restlet.routing.Filter.doHandle(Filter.java:150)\n\tat org.restlet.routing.Filter.handle(Filter.java:197)\n\tat org.restlet.engine.CompositeHelper.handle(CompositeHelper.java:202)\n\tat org.restlet.engine.application.ApplicationHelper.handle(ApplicationHelper.java:75)\n\tat org.restlet.Application.handle(Application.java:385)\n\tat org.restlet.routing.Filter.doHandle(Filter.java:150)\n\tat org.restlet.routing.Filter.handle(Filter.java:197)\n\tat org.restlet.routing.Router.doHandle(Router.java:422)\n\tat org.restlet.routing.Router.handle(Router.java:639)\n\tat org.restlet.routing.Filter.doHandle(Filter.java:150)\n\tat org.restlet.routing.Filter.handle(Filter.java:197)\n\tat org.restlet.routing.Router.doHandle(Router.java:422)\n\tat org.restlet.routing.Router.handle(Router.java:639)\n\tat org.restlet.routing.Filter.doHandle(Filter.java:150)\n\tat org.restlet.routing.Filter.handle(Filter.java:197)\n\tat org.restlet.engine.CompositeHelper.handle(CompositeHelper.java:202)\n\tat org.restlet.Component.handle(Component.java:408)\n\tat org.restlet.Server.handle(Server.java:507)\n\tat org.restlet.engine.connector.ServerHelper.handle(ServerHelper.java:63)\n\tat org.restlet.engine.adapter.HttpServerHelper.handle(HttpServerHelper.java:143)\n\tat org.restlet.ext.servlet.ServerServlet.service(ServerServlet.java:1117)\n\tat javax.servlet.http.HttpServlet.service(HttpServlet.java:790)\n\tat org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:808)\n\tat org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:587)\n\tat org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)\n\tat org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:595)\n\tat org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:223)\n\tat org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1127)\n\tat org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:515)\n\tat org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:185)\n\tat org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1061)\n\tat org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)\n\tat org.eclipse.jetty.server.Dispatcher.forward(Dispatcher.java:191)\n\tat org.eclipse.jetty.server.Dispatcher.forward(Dispatcher.java:72)\n\tat org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:266)\n\tat org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:208)\n\tat org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652)\n\tat org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:585)\n\tat org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)\n\tat org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:577)\n\tat org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:223)\n\tat org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1127)\n\tat org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:515)\n\tat org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:185)\n\tat org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1061)\n\tat org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)\n\tat org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:215)\n\tat org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:110)\n\tat org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97)\n\tat org.eclipse.jetty.server.Server.handle(Server.java:499)\n\tat org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:310)\n\tat org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:257)\n\tat org.eclipse.jetty.io.AbstractConnection$2.run(AbstractConnection.java:540)\n\tat org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:635)\n\tat org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:555)\n\tat java.lang.Thread.run(Thread.java:745)\n",
"code": 500
}
}
curl: (3) [globbing] unmatched close brace/bracket in column 5

У вас есть идеи, почему? API не поддерживает многозначные синонимы?

Спасибо за помощь.


person Daniel Moura    schedule 24.10.2016    source источник


Ответы (2)


Замените внешние двойные кавычки одинарными

curl -X POST ... --data-binary '["ARS","Argentinian Peso"]'

До этого у вас были следующие строки в кавычках "[", ",", "]", пробел после «аргентинца» не был в кавычках, и все, что после этого, не рассматривалось как часть --data-binary аргументов.

person Ivan    schedule 24.10.2016
comment
[смешной, шутливый, причудливый] - person Daniel Moura; 24.10.2016
comment
Вот так [смешно, шутливо, причудливо] работает очень хорошо. Это парсер Windows. Есть идеи? - person Daniel Moura; 24.10.2016
comment
@DanielMoura Я отредактировал этот пост (в ожидании), есть опечатка (отсутствует [), попробуйте с '["ARS","Argentinian Peso"]'. С "["funny","jocular","whimiscal"]" проблем нет, потому что в аргументах нет места. Вы должны заключать аргументы в двойных кавычках в одинарные кавычки и избегать одинарных кавычек внутри каждого аргумента. - person EricLavault; 24.10.2016
comment
Что-то вроде этого? curl ... --data-binary '[ARS,Аргентинское песо]' Не работает... :( - person Daniel Moura; 24.10.2016
comment
Вот так: curl ... --data-binary '[ARS,аргентинское песо]' тоже не работает. :( - person Daniel Moura; 24.10.2016
comment
@DanielMoura та же ошибка? пожалуйста, поделитесь полным завитком (три точки не должны быть скопированы, я просто использовал их, чтобы сократить команду) - person Ivan; 24.10.2016
comment
Привет @Иван! Спасибо за вашу помощь. Пожалуйста, проверьте здесь: - person Daniel Moura; 25.10.2016
comment
@DanielMoura ваш вариант №2 самый правильный. Он отправляет действительный json. К сожалению, это не тот формат, которого ожидает Solr. - person Ivan; 25.10.2016
comment
@DanielMoura, не могли бы вы проверить свой журнал solr на наличие чего-то вроде Processing update to и посмотреть, что он получает. При необходимости включите ведение журнала для org.apache.solr.rest.ManagedResource. Также, пожалуйста, измените свою авторизацию, так как файл, которым вы поделились, позволяет любому в Интернете публиковать сообщения на вашем solr, что, я думаю, нежелательно. - person Ivan; 25.10.2016
comment
@Ivan, я не могу получить доступ к журналу Solr, я запускаю службу Watson Retrieve and Rank ... есть идеи, как я могу смягчить эту ситуацию? - person Daniel Moura; 25.10.2016
comment
@DanielMoura, что касается авторизации - первым делом удалите свой комментарий с прикрепленными журналами, поскольку у него есть учетные данные. Для изменения учетных данных вы можете обратиться в службу поддержки, но проще всего воссоздать свой кластер, если вы не загрузили в него много данных. - person Ivan; 25.10.2016
comment
@DanielMoura, что касается загрузки, попробуйте поместить свой json ["ARS","Argentinian Peso"] в файл (например, example.json и передать это имя файла в качестве параметра --data-binary @example.json). Используя вашу команду № 2 на Mac, я смог получить успешный ответ, так что вы близки - person Ivan; 25.10.2016
comment
@Иван, как я могу удалить комментарий?! ): - person Daniel Moura; 25.10.2016
comment
@Ivan, работает с параметром --data-binary @example.json. Благодарю вас! Но теперь я запускаю ["W1","W 1"],["w2","w 2"] для нескольких записей без успеха. - person Daniel Moura; 25.10.2016
comment
@DanielMoura 1) попробуй [["W1","W 1"],["w2","w 2"]]. Ввод должен быть допустимым объектом json или массивом json. Попытка что-то вроде jsoneditoronline.org проверить правильность вашего json 2) обычно в stackoverflow задавать дополнительные вопросы противоречит правилам. Добро пожаловать в семью :) Одно сообщение - один вопрос. 3) в соответствии с Что мне делать, когда кто-то отвечает на мой вопрос? рассмотрите возможность пометить ответ как принятый, чтобы этот вопрос не привлекать больше людей. Если у вас возникнут дополнительные вопросы - пожалуйста, создайте новую публикацию - person Ivan; 25.10.2016
comment
Спасибо @Ivan, 1) я только что попробовал и не работает. У меня есть тысячи записей для загрузки, и я не знаю, что и как можно сделать. С простыми файлами json это невозможно. 2) и 3) я создал новые учетные данные кластера. Я загрузил неправильные файлы (дерьмо случается). Спасибо за совет. 3) - person Daniel Moura; 25.10.2016
comment
Re: 1. Откройте новый вопрос, не забудьте поделиться там трассировкой стека и указать данные, которые вы пытаетесь отправить. Я не эксперт по solr, но у нас здесь много знающих людей - person Ivan; 25.10.2016

Не забудьте использовать пользовательский интерфейс администратора Solr. Если вы можете создать запрос в пользовательском интерфейсе, после нажатия кнопки отправки вы получите URL-адрес в верхней части результатов. Я использовал это несколько раз, чтобы помочь мне с «неудобными битами» синтаксиса.

person jb62    schedule 24.10.2016
comment
Хммм .... Надо было более внимательно посмотреть на ваш пример - не уверен, что мой совет относится к делу. - person jb62; 24.10.2016