Elasticsearch处理 空对象问题

举报
lxw1844912514 发表于 2022/03/27 23:50:28 2022/03/27
【摘要】 PHP 处理 JSON 数组或对象 | Elasticsearch-PHP | Elastic 空对象 Elasticsearch API 在几个地方使用了空对象,这会对 PHP 造成影响。不像其它的语言,PHP 没有一个简便的符号来表示空对象,而许多开发者还不知道如何指定一个空对象。 设想在查询中增加 Highlight: {...

PHP 处理 JSON 数组或对象 | Elasticsearch-PHP | Elastic

空对象

Elasticsearch API 在几个地方使用了空对象,这会对 PHP 造成影响。不像其它的语言,PHP 没有一个简便的符号来表示空对象,而许多开发者还不知道如何指定一个空对象。

设想在查询中增加 Highlight:


  
  1. {
  2. "query" : {
  3. "match" : {
  4. "content" : "quick brown fox"
  5. }
  6. },
  7. "highlight" : {
  8. "fields" : {
  9. "content" : {}
  10. }
  11. }
  12. }

这个空对象便会引起问题

问题就在于 PHP 会自动把 "content" : {} 转换成 "content" : [] ,在 Elasticsearch DSL 中这样的数据格式是非法的。我们需要告诉 PHP 那个空对象就是一个空对象而非空数组。为了在查询中定义空对象,你需要这样做:


  
  1. $params['body'] = array(
  2. 'query' => array(
  3. 'match' => array(
  4. 'content' => 'quick brown fox'
  5. )
  6. ),
  7. 'highlight' => array(
  8. 'fields' => array(
  9. 'content' => new \stdClass()
  10. )
  11. )
  12. );
  13. $results = $client->search($params);

使用 PHP 的 stdClass 对象来代表空对象,现在就可以解析为正确的 JSON 数据了。

通过使用一个 stdClass 对象,我们可以强制 json_encode 解析为空对象,而不是空数组。然而,这种冗余的写法是唯一解决 PHP 空对象的方法,没有简便的方法可以表示空对象

PHP 处理 JSON 数组或对象 | Elasticsearch-PHP | Elastic

 

文章来源: blog.csdn.net,作者:lxw1844912514,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/lxw1844912514/article/details/120779016

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。