Доброго времени суток.
Начал изучать эластик и столкнулся с проблемой.
Мне надо выбрать случайно 5 записей, но с условием, что определенное поле (type_id) в индексе этих записей должны быть разные. Если не получается найти 5 записей с таким условием, то находить столько, сколько получилось.
Спасите помогите пожалуйста ))
$response = $this->client->search([
'index' => 'addresses',
'type' => 'address',
'body' => [
'_source' => ['id', 'type_id'],
'size' => 5,
'query' => [
'bool' => [
'must' => array_merge(
[
['function_score' => [
'random_score' => [
'seed' => [session()->getId(), request()->path()],
]
],
]
],
[
['term' => ['published' => '1']],
],
array_filter([
$city ? ['term' => ['city_id' => $city->id]] : false,
])
),
],
],
],
]);
По сути есть вариант использовать aggs, но в таком случае невозможно (или я не умею) сделать random_score с использованием seed. Выборка впоследствии отображается на сайте в виде перелинковки и использование random_score позволяет сделать так, чтобы при обновлении странички выборка не изменялась.