Update manticore indexes

This commit is contained in:
DariusIII
2026-07-15 14:22:31 +02:00
parent a37f3bd3c8
commit 9643d4dd0b
10 changed files with 513 additions and 349 deletions
@@ -0,0 +1,24 @@
{
"version": 1,
"thresholds": {
"top_5_precision": 0.8,
"top_10_precision": 0.8,
"max_zero_result_rate": 0.05,
"max_fuzzy_fallback_rate": 0.25,
"max_p95_latency_ms": 250
},
"queries": [
{"index": "releases", "query": "The.Matrix.1999.1080p", "expected_terms": ["matrix", "1999"], "fuzzy": false},
{"index": "releases", "query": "\"breaking bad\" -german", "expected_terms": ["breaking bad"], "excluded_terms": ["german"], "fuzzy": false},
{"index": "releases", "query": "Oppenhiemer 2023", "expected_terms": ["oppenheimer", "2023"], "fuzzy": true},
{"index": "predb", "query": "Ubuntu.24.04-LTS", "expected_terms": ["ubuntu", "24.04"], "fuzzy": false},
{"index": "movies", "query": "Blade Runner 2049", "expected_terms": ["blade runner", "2049"], "fuzzy": false},
{"index": "tvshows", "query": "Better Call Saul", "expected_terms": ["better call saul"], "fuzzy": false},
{"index": "music", "query": "Daft Punk Discovery", "expected_terms": ["daft punk", "discovery"], "fuzzy": false},
{"index": "books", "query": "Frank Herbert Dune", "expected_terms": ["frank herbert", "dune"], "fuzzy": false},
{"index": "games", "query": "Baldur's Gate 3", "expected_terms": ["baldur", "gate"], "fuzzy": false},
{"index": "console", "query": "Zelda Tears of the Kingdom", "expected_terms": ["zelda", "kingdom"], "fuzzy": false},
{"index": "steam", "query": "Cyberpunk 2077", "expected_terms": ["cyberpunk", "2077"], "fuzzy": false},
{"index": "anime", "query": "Fullmetal Alchemist Brotherhood", "expected_terms": ["fullmetal alchemist"], "fuzzy": false}
]
}
+68
View File
@@ -0,0 +1,68 @@
<?php
declare(strict_types=1);
namespace Tests\Unit;
use App\Services\Search\Support\ManticoreIndexRegistry;
use App\Services\Search\Support\ManticoreSchemaInspector;
use PHPUnit\Framework\Attributes\Test;
use PHPUnit\Framework\TestCase;
final class ManticoreIndexRegistryTest extends TestCase
{
#[Test]
public function it_defines_every_search_table_with_relevance_settings(): void
{
$definitions = ManticoreIndexRegistry::definitions();
self::assertSame(
['releases', 'predb', 'movies', 'tvshows', 'music', 'books', 'games', 'console', 'steam', 'anime'],
array_keys($definitions)
);
foreach ($definitions as $definition) {
self::assertSame(2, $definition['settings']['min_infix_len']);
self::assertSame(1, $definition['settings']['exact_words']);
self::assertSame(1, $definition['settings']['index_field_lengths']);
}
self::assertSame('bigint', $definitions['releases']['columns']['passwordstatus']['type']);
self::assertSame('bigint', $definitions['releases']['columns']['haspreview']['type']);
}
#[Test]
public function it_provides_title_first_field_weights(): void
{
self::assertGreaterThan(
ManticoreIndexRegistry::profile('movies')['fields']['plot'],
ManticoreIndexRegistry::profile('movies')['fields']['title']
);
self::assertGreaterThan(
ManticoreIndexRegistry::profile('releases')['fields']['fromname'],
ManticoreIndexRegistry::profile('releases')['fields']['searchname']
);
}
#[Test]
public function it_reports_schema_drift_that_requires_a_rebuild(): void
{
$result = ManticoreSchemaInspector::compareColumns(
[['Field' => 'passwordstatus', 'Type' => 'uint']],
['passwordstatus' => ['type' => 'bigint'], 'haspreview' => ['type' => 'bigint']]
);
self::assertSame(['haspreview'], $result['missing']);
self::assertSame('bigint', $result['incompatible']['passwordstatus']['expected']);
}
#[Test]
public function benchmark_fixture_is_versioned_and_covers_every_table(): void
{
$fixture = json_decode((string) file_get_contents(__DIR__.'/../Fixtures/Search/manticore-relevance-v1.json'), true, flags: JSON_THROW_ON_ERROR);
self::assertSame(1, $fixture['version']);
self::assertSame(array_keys(ManticoreIndexRegistry::definitions()), array_values(array_unique(array_column($fixture['queries'], 'index'))));
self::assertArrayHasKey('top_5_precision', $fixture['thresholds']);
}
}