Я хочу выполнить несколько запросов на сервере elasticsearch с одним запросом. В частности у меня есть следующий запрос (на elastcisearch-PHP-клиент)Объедините два запроса одним запросом
$params = [
"index" => "bookydate",
"type" => "vendor_service",
"body" => [
"query" => [
"bool" => [
"must" => [
"term" => [
"sys_service_id" => $request->input("sys_service_id")
]
],
"should" => [
"geo_shape" => [
"served_location" => [
"shape" => [
"type" => "point",
"coordinates" => [
"{$request->input('loc_lon')}",
"{$request->input('loc_lat')}"]
]
]
]
]
]
]
]
];
То, что я хочу сделать, это принести также все документы, которые имеют "hole_country"
поле для true
.
Что я уже пробовал - это сделать еще один запрос на сервер Elasticsearch и с array_merge
объединить два результата, но не работает из-за ограничений PHP на массивах с несколькими одинаковыми ключами.
UPDATE
Elastcisearch поддерживает функцию под названием Multisearch
, что это именно то, что им нужно. Проблема в том, что php-клиент не поддерживает многопользовательский поиск, поэтому я должен использовать Guzzle для отправки запросов.
В документах Guzzle нет полной информации о том, как правильно построить тело запроса. Любая информация приветствуется
Уже я следующее тело, но elastcisearch этого returing плохой ошибке запроса
$body = [
["index"=>"bookydate"],
["query"=>["bool"=> ["must"=>[["term"=>["sys_service_id"=>"1"]],["geo_shape"=>["served_location"=>["shape"=>["type"=>"circle","coordinates"=>[25,3],"radius"=>"90km"]]]]]]]],
["index"=>"bookydate"],
["query"=>["bool"=>["must"=>["term"=>["hole_country"=>true]]]]]
];
multisearch если штраф для меня и соответствует моим потребностям. Действительно, php-клиент не поддерживает msearch, поэтому я использовал guzzle для отправки запроса. Но я должен решить некоторые вопросы о том, как отправить правильное тело. Посмотрите мое обновление – dios231