Запрос Solr работает в браузере, но не использует RestTemplate org.apache.solr.search.SyntaxError: Невозможно проанализировать
Я пытаюсь выполнить запрос solr в начале моих тестов, чтобы получить список списков, которые я затем буду использовать в тестовом прогоне.
Если я сделаю этот запрос в Chrome, я получу ответ json:
MYAPIDOMAIN/solr/listings/select?q=category:commercial+AND+property_type:office&fl=listing_id,listing_status&group=true&group.main=true&group.field=listing_status&group.limit=1&rows=100&inton_son
В тестах я использую Spring RestTemplate для выполнения вызова, затем анализирую ответ JSON, он работает для некоторых моих запросов, но для этого я просто получаю сообщение об ошибке:
"responseHeader":{
"status":400,
"QTime":7,
"params":{
"q":"category:commercial%2BAND%2Bproperty_type:office",
"group.main":"true",
"indent":"on",
"fl":"listing_id,listing_status",
"group.limit":"1",
"rows":"100",
"wt":"json",
"group.field":"listing_status",
"group":"true"}},
"error":{
"msg":"org.apache.solr.search.SyntaxError: Cannot parse 'category:commercial%2BAND%2Bproperty_type:office': Encountered \" \":\" \": \"\" at line 1, column 41.\nWas expecting one of:\n <EOF> \n <AND> ...\n <OR> ...\n <NOT> ...\n \"+\" ...\n \"-\" ...\n <BAREOPER> ...\n \"(\" ...\n \"*\" ...\n \"^\" ...\n <QUOTED> ...\n <TERM> ...\n <FUZZY_SLOP> ...\n <PREFIXTERM> ...\n <WILDTERM> ...\n <REGEXPTERM> ...\n \"[\" ...\n \"{\" ...\n <LPARAMS> ...\n <NUMBER> ...\n ",
"code":400}}
Я ничего не знаю о solr запросах, которые мне только что дали использовать в тестах, очевидно, это проблема кодирования, но я не знаю где. Я пытался использовать URLEncoder, я нашел некоторые онлайн-кодировщики URL, но, похоже, ничего не работает.
Может кто-нибудь сказать мне, что с этим не так? У меня есть еще 5 запросов, которые мне нужно сделать, поэтому мне действительно нужно исправить.
Спасибо
1 ответ
Я попытался сделать то же самое на своем локальном компьютере и обнаружил ту же ошибку, это связано с закодированным значением%2B -> + в вашем синтаксисе. И это ломает парсер.
Таким образом, вы можете использовать пробел вместо +, который изменится на%20. Тогда все должно работать нормально.