diff --git a/app/Services/Search/Drivers/ManticoreSearchDriver.php b/app/Services/Search/Drivers/ManticoreSearchDriver.php index 6455466d8..e33bc5240 100644 --- a/app/Services/Search/Drivers/ManticoreSearchDriver.php +++ b/app/Services/Search/Drivers/ManticoreSearchDriver.php @@ -366,7 +366,7 @@ class ManticoreSearchDriver implements SearchDriverInterface $documents[] = array_merge( ['id' => $release['id']], - ReleaseSearchIndexDocument::normalize($release) + ReleaseSearchIndexDocument::normalizeForBulk($release) ); } diff --git a/app/Support/ReleaseSearchIndexDocument.php b/app/Support/ReleaseSearchIndexDocument.php index 81008630f..f36dd7e45 100644 --- a/app/Support/ReleaseSearchIndexDocument.php +++ b/app/Support/ReleaseSearchIndexDocument.php @@ -9,6 +9,26 @@ namespace App\Support; */ final class ReleaseSearchIndexDocument { + /** + * Normalize a release row for bulk indexing. Rows already produced by {@see normalize()} + * (e.g. from release search populate) lack `postdate` / `adddate` keys; + * calling {@see normalize()} again would zero `postdate_ts` / `adddate_ts` unless those sources are restored. + * + * @param array $row + * @return array + */ + public static function normalizeForBulk(array $row): array + { + if (array_key_exists('postdate_ts', $row) && ! array_key_exists('postdate', $row)) { + $row = array_merge($row, [ + 'postdate' => $row['postdate_ts'] ?? null, + 'adddate' => $row['adddate_ts'] ?? null, + ]); + } + + return self::normalize($row); + } + /** * @param array $row Keys from DB or insert parameters * @return array diff --git a/tests/Unit/ReleaseSearchIndexDocumentTest.php b/tests/Unit/ReleaseSearchIndexDocumentTest.php new file mode 100644 index 000000000..dc179fb64 --- /dev/null +++ b/tests/Unit/ReleaseSearchIndexDocumentTest.php @@ -0,0 +1,49 @@ + 42, + 'name' => 'n', + 'searchname' => 's', + 'fromname' => 'f', + 'categories_id' => 1, + 'filename' => '', + 'imdbid' => '', + 'tmdbid' => 0, + 'traktid' => 0, + 'tvdb' => 0, + 'tvmaze' => 0, + 'tvrage' => 0, + 'videos_id' => 0, + 'movieinfo_id' => 0, + 'size' => 100, + 'postdate' => '2025-01-15 12:00:00', + 'adddate' => '2025-01-16 08:30:00', + 'totalpart' => 0, + 'grabs' => 0, + 'passwordstatus' => -1, + 'groups_id' => 1, + 'nzbstatus' => 1, + 'haspreview' => 0, + ]); + + $second = ReleaseSearchIndexDocument::normalizeForBulk($first); + + self::assertSame($first['postdate_ts'], $second['postdate_ts']); + self::assertSame($first['adddate_ts'], $second['adddate_ts']); + self::assertGreaterThan(0, $second['postdate_ts']); + self::assertGreaterThan(0, $second['adddate_ts']); + } +}