summaryrefslogtreecommitdiff
path: root/packages/backend/src/core/SearchService.ts
diff options
context:
space:
mode:
Diffstat (limited to 'packages/backend/src/core/SearchService.ts')
-rw-r--r--packages/backend/src/core/SearchService.ts33
1 files changed, 31 insertions, 2 deletions
diff --git a/packages/backend/src/core/SearchService.ts b/packages/backend/src/core/SearchService.ts
index 9502afcc9b..392799da75 100644
--- a/packages/backend/src/core/SearchService.ts
+++ b/packages/backend/src/core/SearchService.ts
@@ -52,6 +52,7 @@ function compileQuery(q: Q): string {
@Injectable()
export class SearchService {
+ private readonly meilisearchIndexScope: 'local' | 'global' | string[] = 'local';
private meilisearchNoteIndex: Index | null = null;
constructor(
@@ -92,6 +93,10 @@ export class SearchService {
},
});
}
+
+ if (config.meilisearch?.scope) {
+ this.meilisearchIndexScope = config.meilisearch.scope;
+ }
}
@bindThis
@@ -100,7 +105,22 @@ export class SearchService {
if (!['home', 'public'].includes(note.visibility)) return;
if (this.meilisearch) {
- this.meilisearchNoteIndex!.addDocuments([{
+ switch (this.meilisearchIndexScope) {
+ case 'global':
+ break;
+
+ case 'local':
+ if (note.userHost == null) break;
+ return;
+
+ default: {
+ if (note.userHost == null) break;
+ if (this.meilisearchIndexScope.includes(note.userHost)) break;
+ return;
+ }
+ }
+
+ await this.meilisearchNoteIndex?.addDocuments([{
id: note.id,
createdAt: note.createdAt.getTime(),
userId: note.userId,
@@ -116,6 +136,15 @@ export class SearchService {
}
@bindThis
+ public async unindexNote(note: Note): Promise<void> {
+ if (!['home', 'public'].includes(note.visibility)) return;
+
+ if (this.meilisearch) {
+ this.meilisearchNoteIndex!.deleteDocument(note.id);
+ }
+ }
+
+ @bindThis
public async searchNote(q: string, me: User | null, opts: {
userId?: Note['userId'] | null;
channelId?: Note['channelId'] | null;
@@ -174,7 +203,7 @@ export class SearchService {
if (me) this.queryService.generateMutedUserQuery(query, me);
if (me) this.queryService.generateBlockedUserQuery(query, me);
- return await query.take(pagination.limit).getMany();
+ return await query.limit(pagination.limit).getMany();
}
}
}