From b0285d15d7232a3c5cd3a2f6da2dd0bc1add5555 Mon Sep 17 00:00:00 2001 From: pushrbx Date: Sun, 17 Sep 2023 20:28:45 +0000 Subject: [PATCH 1/2] fixed bug around non anime/manga search --- app/Character.php | 5 ++++ app/Club.php | 5 ++++ app/GenreAnime.php | 5 ++++ app/GenreManga.php | 5 ++++ app/JikanApiSearchableModel.php | 5 ++++ app/Magazine.php | 5 ++++ app/Person.php | 5 ++++ app/Producers.php | 5 ++++ app/Services/TypeSenseScoutSearchService.php | 28 +++++++++++++------- 9 files changed, 58 insertions(+), 10 deletions(-) diff --git a/app/Character.php b/app/Character.php index b845474..5ae4a1e 100644 --- a/app/Character.php +++ b/app/Character.php @@ -93,4 +93,9 @@ class Character extends JikanApiSearchableModel 'name_kanji' ]; } + + public function getTitleAttributeName(): string + { + return 'name'; + } } diff --git a/app/Club.php b/app/Club.php index 52ae12a..778b5d2 100644 --- a/app/Club.php +++ b/app/Club.php @@ -98,4 +98,9 @@ class Club extends JikanApiSearchableModel { return ['name']; } + + public function getTitleAttributeName(): string + { + return "name"; + } } diff --git a/app/GenreAnime.php b/app/GenreAnime.php index 077d841..02cc785 100644 --- a/app/GenreAnime.php +++ b/app/GenreAnime.php @@ -73,4 +73,9 @@ class GenreAnime extends JikanApiSearchableModel 'name' ]; } + + public function getTitleAttributeName(): string + { + return 'name'; + } } diff --git a/app/GenreManga.php b/app/GenreManga.php index 5a871f8..5323dd1 100644 --- a/app/GenreManga.php +++ b/app/GenreManga.php @@ -72,4 +72,9 @@ class GenreManga extends JikanApiSearchableModel 'name' ]; } + + public function getTitleAttributeName(): string + { + return 'name'; + } } diff --git a/app/JikanApiSearchableModel.php b/app/JikanApiSearchableModel.php index 21d0810..3d5ae20 100644 --- a/app/JikanApiSearchableModel.php +++ b/app/JikanApiSearchableModel.php @@ -88,4 +88,9 @@ abstract class JikanApiSearchableModel extends JikanApiModel implements Typesens } return preg_replace("/[^[:alnum:][:space:]]/u", ' ', $val) ?? ""; } + + public function getTitleAttributeName(): string + { + return 'title'; + } } diff --git a/app/Magazine.php b/app/Magazine.php index aab95eb..513fdb4 100644 --- a/app/Magazine.php +++ b/app/Magazine.php @@ -78,4 +78,9 @@ class Magazine extends JikanApiSearchableModel 'name' ]; } + + public function getTitleAttributeName(): string + { + return 'name'; + } } diff --git a/app/Person.php b/app/Person.php index eb7dc97..bc28665 100644 --- a/app/Person.php +++ b/app/Person.php @@ -104,4 +104,9 @@ class Person extends JikanApiSearchableModel "alternate_names" ]; } + + public function getTitleAttributeName(): string + { + return 'name'; + } } diff --git a/app/Producers.php b/app/Producers.php index f28ee5a..9b0afad 100644 --- a/app/Producers.php +++ b/app/Producers.php @@ -77,4 +77,9 @@ class Producers extends JikanApiSearchableModel 'titles' ]; } + + public function getTitleAttributeName(): string + { + return "titles"; + } } diff --git a/app/Services/TypeSenseScoutSearchService.php b/app/Services/TypeSenseScoutSearchService.php index 6265c81..c5e8503 100644 --- a/app/Services/TypeSenseScoutSearchService.php +++ b/app/Services/TypeSenseScoutSearchService.php @@ -62,13 +62,15 @@ class TypeSenseScoutSearchService implements ScoutSearchService } $modelInstance = $this->repository->createEntity(); + $modelTitleAttributeName = "title"; if ($modelInstance instanceof JikanApiSearchableModel) { $options = $this->setQueryByWeights($options, $modelInstance); $options = $this->setSortOrder($options, $modelInstance); $options = $this->overrideSortingOrder($options, $modelInstance, $orderByField, $sortDirectionDescending); + $modelTitleAttributeName = $modelInstance->getTitleAttributeName(); } - $options = $this->adaptToShortQueries($query, $options); + $options = $this->adaptToShortQueries($query, $modelTitleAttributeName, $options); $results = $documents->search($options); $this->recordSearchTelemetry($query, $results); @@ -77,7 +79,7 @@ class TypeSenseScoutSearchService implements ScoutSearchService }; } - private function adaptToShortQueries(string $query, array $options): array + private function adaptToShortQueries(string $query, string $modelTitleAttributeName, array $options): array { if (strlen($query) <= 3) { $options['num_typos'] = 0; @@ -87,15 +89,19 @@ class TypeSenseScoutSearchService implements ScoutSearchService $options['infix'] = 'off'; $options['prioritize_token_position'] = 'true'; - if (Str::startsWith($options["sort_by"], "_text_match")) { - $options["sort_by"] = "_text_match:desc,title:asc"; + if (array_key_exists("sort_by", $options)) { + if (Str::startsWith($options["sort_by"], "_text_match")) { + $options["sort_by"] = "_text_match:desc," . $modelTitleAttributeName .":asc"; + } else { + // move text_match to the beginning if there is an orderby parameter set. + $options["sort_by"] = Str::replace("(buckets:". $this->jikanConfig->textMatchBuckets().")", "", $options["sort_by"]); + $parts = collect(explode(",", $options["sort_by"])); + $last = $parts->pop(); + $parts = $parts->prepend($last); + $options["sort_by"] = $parts->implode(","); + } } else { - // move text_match to the beginning if there is an orderby parameter set. - $options["sort_by"] = Str::replace("(buckets:". $this->jikanConfig->textMatchBuckets().")", "", $options["sort_by"]); - $parts = collect(explode(",", $options["sort_by"])); - $last = $parts->pop(); - $parts = $parts->prepend($last); - $options["sort_by"] = $parts->implode(","); + $options["sort_by"] = "_text_match:desc," . $modelTitleAttributeName .":asc"; } } @@ -123,6 +129,8 @@ class TypeSenseScoutSearchService implements ScoutSearchService } $sortBy = rtrim($sortBy, ','); $options['sort_by'] = $sortBy; + } else if (is_null($sortByFields) && !array_key_exists("sort_by", $options)) { + $options['sort_by'] = "_text_match:desc"; } return $options; From cbebac02080affef4b0c800eb3e3e666f6755444 Mon Sep 17 00:00:00 2001 From: pushrbx Date: Sun, 17 Sep 2023 20:38:27 +0000 Subject: [PATCH 2/2] changed mixed quotes usage --- app/Club.php | 2 +- app/Producers.php | 2 +- app/Services/TypeSenseScoutSearchService.php | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app/Club.php b/app/Club.php index 778b5d2..1f8e76c 100644 --- a/app/Club.php +++ b/app/Club.php @@ -101,6 +101,6 @@ class Club extends JikanApiSearchableModel public function getTitleAttributeName(): string { - return "name"; + return 'name'; } } diff --git a/app/Producers.php b/app/Producers.php index 9b0afad..8e2c369 100644 --- a/app/Producers.php +++ b/app/Producers.php @@ -80,6 +80,6 @@ class Producers extends JikanApiSearchableModel public function getTitleAttributeName(): string { - return "titles"; + return 'titles'; } } diff --git a/app/Services/TypeSenseScoutSearchService.php b/app/Services/TypeSenseScoutSearchService.php index c5e8503..d21c201 100644 --- a/app/Services/TypeSenseScoutSearchService.php +++ b/app/Services/TypeSenseScoutSearchService.php @@ -128,9 +128,9 @@ class TypeSenseScoutSearchService implements ScoutSearchService $sortBy .= ','; } $sortBy = rtrim($sortBy, ','); - $options['sort_by'] = $sortBy; + $options["sort_by"] = $sortBy; } else if (is_null($sortByFields) && !array_key_exists("sort_by", $options)) { - $options['sort_by'] = "_text_match:desc"; + $options["sort_by"] = "_text_match:desc"; } return $options;