fixes order_by not working when a query is passed via typesense

This commit is contained in:
Irfan 2023-04-23 10:27:33 +05:00 committed by pushrbx
parent 2b67dc0d26
commit 55229901ab
2 changed files with 15 additions and 4 deletions

View File

@ -48,12 +48,18 @@ abstract class SearchRequestHandler implements RequestHandler
protected function prepareOrderByParam(Collection $requestData): Collection
{
if ($requestData->has("order_by") && $requestData->get("order_by") instanceof Enum) {
$requestData->offsetSet("order_by", $requestData->get("order_by")->label);
} else {
$requestData->offsetSet("order_by", 'mal_id');
if (!$requestData->has('order_by') || !$requestData->get('order_by') instanceof Enum) {
$requestData->offsetSet('order_by', 'mal_id');
return $requestData;
}
if ($requestData->has('order_by') && $requestData->has('q')) {
$requestData->offsetSet("order_by", $requestData->get("order_by")->label);
return $requestData;
}
$requestData->offsetSet("order_by", 'mal_id');
return $requestData;
}
}

View File

@ -65,6 +65,11 @@ class TypeSenseScoutSearchService implements ScoutSearchService
$options['sort_by'] = "_text_match:desc,$orderByField:" . ($sortDirectionDescending ? "desc" : "asc");
}
// if order_by is a user supplied value make it a priority over _text_match
if ($orderByField !== 'members' && !is_null($orderByField)) {
$options['sort_by'] = "$orderByField:" . ($sortDirectionDescending ? "desc" : "asc") . ",_text_match:desc";
}
// override overall sorting direction
if (is_null($orderByField) && $sortDirectionDescending && array_key_exists("sort_by", $options) && Str::contains($options["sort_by"], "asc")) {
$options["sort_by"] = Str::replace("asc", "desc", $options["sort_by"]);