通过CURL进行Solr查询 -

时间:2017-04-28 09:30:57

标签: curl solr

我在Solr中有一个名为test的核心。我已经在其中摄取了2个嵌套的JSON文档。它们如下:

{"id":1, "path":"1.parent", "_childDocuments_":{"path":"2.parent.child"}}

并且

{"id":2, "path":"1.parent", "_childDocuments_":{"path":"2.parent.child"}}

当我通过浏览器查询test核心以获得父子关系中的响应时,我更正了回复:

http://localhost:8983/solr/test/select?fl=*,[child%20parentFilter=path:1.parent%20childFilter=path:2.parent.child]&indent=on&q={!parent%20which=%22path:1.parent%22}&wt=json

{
  "responseHeader":{
    "status":0,
    "QTime":2,
    "params":{
      "q":"{!parent which=\"path:1.parent\"}",
      "indent":"on",
      "fl":"*,[child parentFilter=path:1.parent childFilter=path:2.parent.child]",
      "wt":"json"}},
  "response":{"numFound":2,"start":0,"docs":[
      {
        "id":"1",
        "path":["1.parent"],
        "_childDocuments_.path":["2.parent.child"],
        "_version_":1565913168462479360},
      {
        "id":"2",
        "path":["1.parent"],
        "_childDocuments_.path":["2.parent.child"],
        "_version_":1565913171789611008}]
  }}

但是当我尝试通过curl运行相同的查询时,它会显示错误:

$ curl 'http://localhost:8983/solr/test/select?fl=*,[child%20parentFilter=path:1.parent%20childFilter=path:2.parent.child]&indent=on&q={!parent%20which=%22path:1.parent%22}&wt=json'
curl: (3) [globbing] bad range in column 46

我无法理解通过。虽然,我可以理解curl请求在column 46上发出错误,这是[请求中的特殊字符http。但是,它是如何在浏览器中工作的,我们如何通过curl使这个请求正常工作?

1 个答案:

答案 0 :(得分:4)

只需传递卷曲参数-g / - globoff

  

此选项会关闭" URL通配解析器"。当你设置   此选项,您可以指定包含字母{} []的网址   没有它们被curl本身解释。 请注意   这些字母不是正常的合法URL内容,但它们应该是
  根据URI标准编码。

另一方面,浏览器以静默方式转换字母{}[]并成功提交查询。

所以你要做的就是使用curl参数或在提交之前对查询字符串进行编码。

我认为这样做应该有效:

curl --globoff 'http://localhost:8983/solr/test/select?fl=*,[child%20parentFilter=path:1.parent%20childFilter=path:2.parent.child]&indent=on&q={!parent%20which=%22path:1.parent%22}&wt=json'