Skip to content

Commit 9d2575d

Browse files
committed
Minor cleanup to search in-memory index
1 parent 591b8b2 commit 9d2575d

File tree

1 file changed

+42
-45
lines changed

1 file changed

+42
-45
lines changed

app/lib/search/mem_index.dart

Lines changed: 42 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import 'dart:math' as math;
66

77
import 'package:_pub_shared/search/search_form.dart';
88
import 'package:clock/clock.dart';
9+
import 'package:collection/collection.dart';
910
import 'package:logging/logging.dart';
1011
import 'package:meta/meta.dart';
1112

@@ -19,15 +20,15 @@ final _logger = Logger('search.mem_index');
1920
final _textSearchTimeout = Duration(milliseconds: 500);
2021

2122
class InMemoryPackageIndex {
22-
final Map<String, PackageDocument> _packages = <String, PackageDocument>{};
23-
final _packageNameIndex = PackageNameIndex();
23+
final Map<String, PackageDocument> _packages = {};
24+
final PackageNameIndex _packageNameIndex = PackageNameIndex();
2425
final TokenIndex _descrIndex = TokenIndex();
2526
final TokenIndex _readmeIndex = TokenIndex();
2627
final TokenIndex _apiSymbolIndex = TokenIndex();
2728

2829
/// Adjusted score takes the overall score and transforms
2930
/// it linearly into the [0.4-1.0] range.
30-
final _adjustedOverallScores = <String, double>{};
31+
final Map<String, double> _adjustedOverallScores = {};
3132
late final List<PackageHit> _overallOrderedHits;
3233
late final List<PackageHit> _createdOrderedHits;
3334
late final List<PackageHit> _updatedOrderedHits;
@@ -49,36 +50,34 @@ class InMemoryPackageIndex {
4950
}
5051
_updateOverallScores();
5152
_lastUpdated = clock.now().toUtc();
52-
_overallOrderedHits = _rankWithComparator(_compareOverall,
53+
_overallOrderedHits = _rankWithComparator(_packages, _compareOverall,
5354
score: (doc) => doc.overallScore ?? 0.0);
54-
_createdOrderedHits = _rankWithComparator(_compareCreated);
55-
_updatedOrderedHits = _rankWithComparator(_compareUpdated);
56-
_popularityOrderedHits = _rankWithComparator(_comparePopularity,
55+
_createdOrderedHits = _rankWithComparator(_packages, _compareCreated);
56+
_updatedOrderedHits = _rankWithComparator(_packages, _compareUpdated);
57+
_popularityOrderedHits = _rankWithComparator(_packages, _comparePopularity,
5758
score: (doc) => doc.popularityScore ?? 0);
58-
_likesOrderedHits = _rankWithComparator(_compareLikes,
59+
_likesOrderedHits = _rankWithComparator(_packages, _compareLikes,
5960
score: (doc) => doc.likeCount.toDouble());
60-
_pointsOrderedHits = _rankWithComparator(_comparePoints,
61+
_pointsOrderedHits = _rankWithComparator(_packages, _comparePoints,
6162
score: (doc) => doc.grantedPoints.toDouble());
6263
}
6364

64-
IndexInfo indexInfo() {
65-
return IndexInfo(
66-
isReady: true,
67-
packageCount: _packages.length,
68-
lastUpdated: _lastUpdated,
69-
);
70-
}
65+
IndexInfo indexInfo() => IndexInfo(
66+
isReady: true,
67+
packageCount: _packages.length,
68+
lastUpdated: _lastUpdated,
69+
);
7170

7271
void _addPackage(PackageDocument doc) {
7372
_packages[doc.package] = doc;
7473
_packageNameIndex.add(doc.package);
7574
_descrIndex.add(doc.package, doc.description);
7675
_readmeIndex.add(doc.package, doc.readme);
7776

78-
for (ApiDocPage page in doc.apiDocPages ?? const []) {
77+
for (final page in doc.apiDocPages ?? const <ApiDocPage>[]) {
7978
final pageId = _apiDocPageId(doc.package, page);
80-
if (page.symbols != null && page.symbols!.isNotEmpty) {
81-
_apiSymbolIndex.add(pageId, page.symbols!.join(' '));
79+
if (page.symbols case final pageSymbols? when pageSymbols.isNotEmpty) {
80+
_apiSymbolIndex.add(pageId, pageSymbols.join(' '));
8281
}
8382
}
8483
}
@@ -148,9 +147,9 @@ class InMemoryPackageIndex {
148147
}
149148

150149
List<String>? nameMatches;
151-
late List<PackageHit> packageHits;
152-
switch (query.effectiveOrder ?? SearchOrder.top) {
153-
case SearchOrder.top:
150+
List<PackageHit> packageHits;
151+
switch (query.effectiveOrder) {
152+
case null || SearchOrder.top:
154153
if (textResults == null) {
155154
packageHits = _overallOrderedHits.whereInSet(packages);
156155
break;
@@ -346,59 +345,57 @@ class InMemoryPackageIndex {
346345
return list;
347346
}
348347

349-
List<PackageHit> _rankWithComparator(
348+
static List<PackageHit> _rankWithComparator(
349+
Map<String, PackageDocument> packages,
350350
int Function(PackageDocument a, PackageDocument b) compare, {
351351
double Function(PackageDocument doc)? score,
352-
}) {
353-
final list = _packages.values
354-
.map((doc) => PackageHit(
355-
package: doc.package, score: score == null ? null : score(doc)))
356-
.toList();
357-
list.sort((a, b) => compare(_packages[a.package]!, _packages[b.package]!));
358-
return list;
359-
}
352+
}) =>
353+
packages.entries
354+
.sorted((entryA, entryB) => compare(entryA.value, entryB.value))
355+
.map((e) => PackageHit(package: e.key, score: score?.call(e.value)))
356+
.toList(growable: false);
360357

361-
int _compareCreated(PackageDocument a, PackageDocument b) {
358+
static int _compareCreated(PackageDocument a, PackageDocument b) {
362359
return -a.created.compareTo(b.created);
363360
}
364361

365-
int _compareUpdated(PackageDocument a, PackageDocument b) {
362+
static int _compareUpdated(PackageDocument a, PackageDocument b) {
366363
return -a.updated.compareTo(b.updated);
367364
}
368365

369-
int _compareOverall(PackageDocument a, PackageDocument b) {
366+
static int _compareOverall(PackageDocument a, PackageDocument b) {
370367
final x = -(a.overallScore ?? 0.0).compareTo(b.overallScore ?? 0.0);
371368
if (x != 0) return x;
372369
return _compareUpdated(a, b);
373370
}
374371

375-
int _comparePopularity(PackageDocument a, PackageDocument b) {
372+
static int _comparePopularity(PackageDocument a, PackageDocument b) {
376373
final x = -(a.popularityScore ?? 0.0).compareTo(b.popularityScore ?? 0.0);
377374
if (x != 0) return x;
378375
return _compareUpdated(a, b);
379376
}
380377

381-
int _compareLikes(PackageDocument a, PackageDocument b) {
378+
static int _compareLikes(PackageDocument a, PackageDocument b) {
382379
final x = -a.likeCount.compareTo(b.likeCount);
383380
if (x != 0) return x;
384381
return _compareUpdated(a, b);
385382
}
386383

387-
int _comparePoints(PackageDocument a, PackageDocument b) {
384+
static int _comparePoints(PackageDocument a, PackageDocument b) {
388385
final x = -a.grantedPoints.compareTo(b.grantedPoints);
389386
if (x != 0) return x;
390387
return _compareUpdated(a, b);
391388
}
392389

393-
String _apiDocPageId(String package, ApiDocPage page) {
390+
static String _apiDocPageId(String package, ApiDocPage page) {
394391
return '$package::${page.relativePath}';
395392
}
396393

397-
String _apiDocPkg(String id) {
394+
static String _apiDocPkg(String id) {
398395
return id.split('::').first;
399396
}
400397

401-
String _apiDocPath(String id) {
398+
static String _apiDocPath(String id) {
402399
return id.split('::').last;
403400
}
404401
}
@@ -415,11 +412,6 @@ class _TextResults {
415412
class PackageNameIndex {
416413
final _data = <String, _PkgNameData>{};
417414

418-
/// Maps package name to a reduced form of the name:
419-
/// the same character parts, but without `-`.
420-
String _collapseName(String package) =>
421-
package.replaceAll('_', '').toLowerCase();
422-
423415
void addAll(Iterable<String> packages) {
424416
for (final package in packages) {
425417
add(package);
@@ -470,6 +462,11 @@ class PackageNameIndex {
470462
}
471463
return Score(values).removeLowValues(fraction: 0.5, minValue: 0.5);
472464
}
465+
466+
/// Maps package name to a reduced form of the name:
467+
/// the same character parts, but without `-`.
468+
static String _collapseName(String package) =>
469+
package.replaceAll('_', '').toLowerCase();
473470
}
474471

475472
class _PkgNameData {

0 commit comments

Comments
 (0)