对象数组edit
Elasticsearch DSL 的另一种常见的数据格式是对象数组。例如,假设在你的查询中增加排序:
{
"query" : {
"match" : { "content" : "quick brown fox" }
},
"sort" : [
{"time" : {"order" : "desc"}},
{"popularity" : {"order" : "desc"}}
]
}
"sort" 内包含 JSON 对象数组。
这种形式很常见,但是在 PHP 中构建就稍微有些繁琐,因为这需要嵌套数组。用 PHP 写这种冗余的结构就让人读起来有点晦涩。为了构建对象数组,你要在数组中嵌套数组:
$params['body'] = array(
'query' => array(
'match' => array(
'content' => 'quick brown fox'
)
),
'sort' => array(
array('time' => array('order' => 'desc')),
array('popularity' => array('order' => 'desc'))
)
);
$results = $client->search($params);
这里 encode 为 "sort" : []
这里 encode 为 {"time" : {"order" : "desc"}}
这里 encode 为 {"popularity" : {"order" : "desc"}}
如果你用的是 PHP5.4 及以上版本,我强烈要求你使用 [] 构建数组。这会让多维数组看起来易读些:
$params['body'] = [
'query' => [
'match' => [
'content' => 'quick brown fox'
]
],
'sort' => [
['time' => ['order' => 'desc']],
['popularity' => ['order' => 'desc']]
]
];
$results = $client->search($params);