Запрос 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. Тогда все должно работать нормально.

Другие вопросы по тегам