elastic php api 小坑
https://www.elastic.co/guide/cn/elasticsearch/php/current/php_json_objects.html 来自官方文档
空对象编辑
Elasticsearch API 在几个地方使用了空对象,这会对 PHP 造成影响。不像其它的语言,PHP 没有一个简便的符号来表示空对象,而许多开发者还不知道如何指定一个空对象。
设想在查询中增加 Highlight:
{
"query" : {
"match" : {
"content" : "quick brown fox"
}
},
"highlight" : {
"fields" : {
"content" : {}
}
}
}
这个空对象便会引起问题
问题就在于 PHP 会自动把 "content" : {} 转换成 "content" : [] ,在 Elasticsearch DSL 中这样的数据格式是非法的。我们需要告诉 PHP 那个空对象就是一个空对象而非空数组。为了在查询中定义空对象,你需要这样做:
$params['body'] = array(
'query' => array(
'match' => array(
'content' => 'quick brown fox'
)
),
'highlight' => array(
'fields' => array(
'content' => new \stdClass()
)
)
);
$results = $client->search($params);
使用 PHP 的 stdClass 对象来代表空对象,现在就可以解析为正确的 JSON 数据了。
通过使用一个 stdClass 对象,我们可以强制 json_encode 解析为空对象,而不是空数组。然而,这种冗余的写法是唯一解决 PHP 空对象的方法,没有简便的方法可以表示空对象。
Tags : 本文未设置标签
您可以自由的转载和修改,但请务必注明文章来源并且不可用于商业目的。
本站大部分内容收集于互联网,如果有侵权内容、不妥之处,请联系删除。敬请谅解!