与客户端混杂的常见缘由是环抱 JSON 数组以及工具,和若何正在 PHP 中指定他们。特地是,成绩是由空工具以及数组工具惹起的,此页面将向您展现 Elasticsearch JSON API 中应用的一些常见模式,和若何将其转换为 PHP 的体现方式。
空工具
Elasticsearch API 正在多个地位上应用空的 JSON 工具,这可能会给 PHP 带来成绩。与其余言语没有同,PHP 不空工具的「冗长」体现方式。因而许多开发职员没有晓得若何指定空工具。
思考正在查问中增加突出显示:
{ "query" : { "match" : { "content" : "quick brown fox" } }, "highlight" : { "fields" : { "content" : {} (1) } } }
1.这个空的 JSON 工具是招致成绩的缘由。
成绩是 PHP 会主动转换 "content" : {} 成 "content" : [],这样将再也不是无效的 Elasticsearch DSL。咱们需求通知 PHP 空工具是一个显示工具,而没有是数组 。 正在 PHP 中 界说此查问, 您能够:
$params['body'] = array( 'query' => array( 'match' => array( 'content' => 'quick brown fox' ) ), 'highlight' => array( 'fields' => array( 'content' => new \stdClass() (1) ) ) ); $results = $client->search($params);
咱们应用通用的 PHP stdClass 工具来示意一个空工具,JSON 将会被正确解码。
经过应用显示的 stdClass 工具,咱们能够强迫应用 json_encode 解析器正确的输入空工具,而没有是空数组。 遗憾的是,这个简短的处理计划,是正在 PHP 中完成指标的惟一办法...... 并无空工具的「冗长」版本。
工具数组
Elasticsearch DSL 中的另外一种常见模式是工具数组。例如,思考为查问增加排序:
{ "query" : { "match" : { "content" : "quick brown fox" } }, "sort" : [ (1) {"time" : {"order" : "desc"}}, {"popularity" : {"order" : "desc"}} ] }
1.「sort」蕴含一组 JSON 工具
这类布置很常见,然而 PHP 的构造可能很复杂。 由于他需求嵌套数组。PHP 的简短往往会掩饰笼罩实际发作的事。要结构一个工具数组,实际上需求一个数组数组 :
$params['body'] = array( 'query' => array( 'match' => array( 'content' => 'quick brown fox' ) ), 'sort' => array( (1) array('time' => array('order' => 'desc')), (2) array('popularity' => array('order' => 'desc')) (3) ) ); $results = $client->search($params);
1.该数组对 "sort" : [] 数组进行编码
2.该数组对 {"time" : {"order" : "desc"}} 工具进行编码
3.该数组对 {"popularity" : {"order" : "desc"}} 工具进行编码
假如您应用 5.4+ 以上的版本,我激烈倡议你应用短数组语法。它使这些嵌套数组更易浏览:
$params['body'] = [ 'query' => [ 'match' => [ 'content' => 'quick brown fox' ] ], 'sort' => [ ['time' => ['order' => 'desc']], ['popularity' => ['order' => 'desc']] ] ]; $results = $client->search($params);
空工具数组
有时, 您会遇到后面两种模式的 DSL . 这个患上分函数的查问是一个很好的例子,有时他需求一个空的工具数组,此中一些工具多是空的 JSON 工具。
例如这类查问:
{ "query":{ "function_score":{ "functions":[ { "random_score":{} } ], "boost_mode":"replace" } } }
咱们能够应用如下 PHP 代码构建它:
$params['body'] = array( 'query' => array( 'function_score' => array( 'functions' => array( (1) array( (2) 'random_score' => new \stdClass() (3) ) ) ) ) ); $results = $client->search($params);
1.它对工具数组进行编码: "functions" : []
2.它对数组中的工具进行编码: { "random_score": {} }
3.T 它对空的 JSON 工具进行编码: "random_score": {}
保举:【PHP教程】
以上就是正在PHP中解决JSON数组和工具的具体内容,更多请存眷资源魔其它相干文章!
标签: php php开发教程 php开发资料 php开发自学
抱歉,评论功能暂时关闭!