我正在使用Laravel和ES并尝试构建动态查询。
但以下不起作用:
$query[] = ['term' => ['city' => 1]];
$query[] = ['term' => ['state' => 2]];
$query[] = ['range' => ['price' => ['lte' => 2]]];
$asd = ['filtered' => [
'query' => [
'match' => ['title' => Input::get('query')]
],
'filter'=> [
'bool' => [
'must' => [
['term' => [ 'is_active' => 1] ],
[ 'range' => [
'end_date' => [
'from' => 'now'
]
]
],
$query
]
]
],
],];
echo json_encode($asd);
这会将$ query []错误附加到$ asd中,例如:
{"term":{"is_active":1}},
{"range":{"end_date":{"from":"now"}}},
[
{"term":{"city":1}},
{"term":{"state":2}},
{"range":{"price":{"lte":2}}}
]
我想如何追加它:
{"term":{"is_active":1}},
{"range":{"end_date":{"from":"now"}}},
{"term":{"city":1}},
{"term":{"state":2}},
{"range":{"price":{"lte":2}}}
没有围绕它的[]。
解决:
$asd = ['filtered' => [
'query' => [
'match' => ['title' => Input::get('query')]
],
'filter'=> [
'bool' => [
'must' =>
$query
]
],
],];
答案 0 :(得分:1)
有效的json字符串始终由单个对象或对象数组组成 你要求的字符串不是合法的json,它是不可能解析的。
带有单个对象的Json看起来像这样:{ // Object start.
"property": "value" // Where value could be a object or array or whatever.
} // Object end.
如果是数组:
[ // Array start.
"Array value" // which could be an object or another array or whatever.
] // Array end.
转换包含关联数组的PHP数组时,它将转换为包含对象数组的字符串。
如果您希望它看起来像您描述的那样,您可以随时从字符串中删除[]
,但它不会是有效的json。
<小时/> 编辑:
弹性查询看起来基本上是这样的:
{
"query": {
"term": { data ... }
}
}
我猜你想要/需要做的就是像这样创建php数组:
$query = [
'query' => [
'term' => [
'state' => 2
'city' => 1
],
'range' => [
'price' => [
'lte' => 2
]
]
]
]
这将导致JSON字符串如下所示:
{
"query":
{
"term":
{
"state": 2,
"city": 1
},
"range":
{
"lte": 2
}
}
}