我有这个弹性搜索查询,它工作正常,但我无法将其完全转换为 PHP 关联数组。
POST /index/type/_search
{
"fields": [
"url"
],
"query": {
"query_string": {
"default_field": "content.content",
"query": "german"
}
},
"highlight": {
"fields": {
"content.content": {}
}
}
}
上述POST
中的fields
和highlight
部分如何在 PHP 关联数组中表示?我在下面尝试,除/* ERROR */
外的所有工作:
$params = [
'index' => $index_name,
'type' => 'type_name',
'body' => [
'fields' => 'url' /* ERROR */
'query' => [
'query_string' => [
'default_field' => 'content.content',
'query' => $search_term
]
],
'highlight' => [
'fields' => ['content.content'=> []] /* ERROR */
]
]
];
当然,有了以上$params
,我将做:
$results = Elastic_PHP_client->search($params);
你已经遇到了 PHP 中[]
与{}
区别问题。
如果客户端在某个时候json_encode
,则这样做:
$params = [
'index' => $index_name,
'type' => 'type_name',
'body' => [
'fields' => ['url'],
'query' => [
'query_string' => [
'default_field' => 'content.content',
'query' => '$search_term' /* Be carefull, not interpolated */
]
],
'highlight' => [
'fields' => ['content.content'=> new stdClass] /* Will give you '{}' */
]
]
];
请参阅:https://stackoverflow.com/a/8595884/118593
只需执行以下操作:
var_export(json_decode($json, true));
这产生了可用的PHP代码:
array (
'fields' =>
array (
0 => 'url',
),
'query' =>
array (
'query_string' =>
array (
'default_field' => 'content.content',
'query' => 'german',
),
),
'highlight' =>
array (
'fields' =>
array (
'content.content' =>
array (
),
),
),
)