对 PHP 关联数组和空对象的弹性 JSON 查询


Elastic JSON query to PHP associative array and empty objects

我有这个弹性搜索查询,它工作正常,但我无法将其完全转换为 PHP 关联数组。

POST /index/type/_search
{
  "fields": [
   "url"
   ],
  "query": {
     "query_string": {
         "default_field": "content.content",
         "query": "german"
      }
   },
  "highlight": {
      "fields": {
         "content.content": {}
       }
  }
}

上述POST中的fieldshighlight部分如何在 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 (
      ),
    ),
  ),
)