2016-02-10 4 views
1

У меня есть этот поисковый запрос Elastic, который отлично работает, но я не могу полностью перевести его в ассоциативный массив PHP.Эластичный запрос JSON к ассоциативному массиву PHP и пустым объектам

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

Как fields и highlight разделы в приведенном выше POST представлены в ассоциативном массиве 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); 
+0

' 'поля' => [0 => 'URL'] и'» fields '=> [' content.content '=>' '] '. Попробуйте –

+0

Спасибо! Он почти работает, ошибки ушли, но в ответ от Elastic нет выделения. Может быть, это отдельный вопрос? –

+0

Поскольку ваш раздел выделения не имеет значения, поэтому нет выделенного раздела –

ответ

2

Вы попали в проблему [] против {} в 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

+0

Выполнение' 'fields '=> [' content.content '=> new stdClass]' in 'highlight' помогло! В противном случае, Если вы не указали, что строка 'highlight' не указана в результатах поиска. Пустые объекты в JSON таким образом, я никогда не знал! –

+0

Спасибо, что указали, что строка не интерполирована, теперь я исправил ее. –

+0

Рассмотрите возможность использования https://github.com/ongr-io/ElasticsearchDSL помощник для написания запросов. Удаляет много кода шаблона. – TautrimasPajarskas

0

Вобще:

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 (
    ), 
    ), 
), 
) 
+0

Элегантный, но не 'highlight' раздел в результатах поиска/ответа назад от Elastic :(. –

Смежные вопросы