0

我试图在我的测试开始时运行一个 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&wt=json&indent=on

在测试中,我使用 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 个查询需要做,所以我真的需要修复。

谢谢

4

1 回答 1

0

我在本地尝试了相同的操作并发现了相同的错误,这是由于您的语法中的编码值 %2B -> + 所致。它正在破坏解析器。

因此,您可以使用空格而不是 + 将更改为 %20。那么它应该工作正常。

于 2017-01-29T05:04:36.827 回答