Ответ 1
- Значение
pre_tags
иpost_tags
должно быть массивом (однако, если вы не хотите изменять тегиem
, вы можете их игнорировать, они уже заданы как по умолчанию). - Значение
fields
должно быть массивом, ключ - это имя поля, а значение - это массив с параметрами поля.
Попробуйте это исправление:
$params = [
'index' => 'test_index',
'type' => 'test_index_type',
'body' => [
'query' => [
'bool' => [
'should' => [ 'match' => [ 'field1' => '23' ] ]
]
],
'highlight' => [
// 'pre_tags' => ["<em>"], // not required
// 'post_tags' => ["</em>"], // not required
'fields' => [
'field1' => new \stdClass()
],
'require_field_match' => false
]
]
];
$res = $client->search($params);
var_dump($res['hits']['hits'][0]['highlight']);
Обновление
- Была ли двойная проверка, значение поля в массиве
fields
должно быть объектом (это требование, а не то же самое, что и другие параметры). -
pre/post_tags
также может быть строками (а не массивом). - Вы проверили правильный ответ?
$res['hits']['hits'][0]['highlight']
Важно отметить, что highligted результаты попадают в массив
highlight
-$res['hits']['hits'][0]['highlight']
.