我在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
使这个请求正常工作?
答案 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'