diff options
| author | Caipira <caipira@libnare.net> | 2023-07-08 21:31:38 +0900 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-07-08 21:31:38 +0900 |
| commit | 60366a45585654115d5178486cc747cf0ee9450a (patch) | |
| tree | 47cad89d513a3bae6459156125b1d6dd2a8c18eb /packages/backend/src/core | |
| parent | perf(backend): Reduce memory usage of MemoryKVCache (#11076) (diff) | |
| download | sharkey-60366a45585654115d5178486cc747cf0ee9450a.tar.gz sharkey-60366a45585654115d5178486cc747cf0ee9450a.tar.bz2 sharkey-60366a45585654115d5178486cc747cf0ee9450a.zip | |
fix(backend): Remove Meilisearch index when notes are deleted (#10988)
* fix(backend): Include feature to delete Meilisearch index notes
* Update variable name
`cascadingNotesFilter` -> `federatedLocalCascadingNotes`
* tweak
---------
Co-authored-by: syuilo <Syuilotan@yahoo.co.jp>
Diffstat (limited to 'packages/backend/src/core')
| -rw-r--r-- | packages/backend/src/core/NoteDeleteService.ts | 14 | ||||
| -rw-r--r-- | packages/backend/src/core/SearchService.ts | 9 |
2 files changed, 20 insertions, 3 deletions
diff --git a/packages/backend/src/core/NoteDeleteService.ts b/packages/backend/src/core/NoteDeleteService.ts index 10381c7e65..f77ea8aab4 100644 --- a/packages/backend/src/core/NoteDeleteService.ts +++ b/packages/backend/src/core/NoteDeleteService.ts @@ -17,6 +17,7 @@ import { UserEntityService } from '@/core/entities/UserEntityService.js'; import { NoteEntityService } from '@/core/entities/NoteEntityService.js'; import { bindThis } from '@/decorators.js'; import { MetaService } from '@/core/MetaService.js'; +import { SearchService } from '@/core/SearchService.js'; @Injectable() export class NoteDeleteService { @@ -41,6 +42,7 @@ export class NoteDeleteService { private apRendererService: ApRendererService, private apDeliverManagerService: ApDeliverManagerService, private metaService: MetaService, + private searchService: SearchService, private notesChart: NotesChart, private perUserNotesChart: PerUserNotesChart, private instanceChart: InstanceChart, @@ -53,6 +55,7 @@ export class NoteDeleteService { */ async delete(user: { id: User['id']; uri: User['uri']; host: User['host']; isBot: User['isBot']; }, note: Note, quiet = false) { const deletedAt = new Date(); + const cascadingNotes = await this.findCascadingNotes(note); // この投稿を除く指定したユーザーによる指定したノートのリノートが存在しないとき if (note.renoteId && (await this.noteEntityService.countSameRenotes(user.id, note.renoteId, note.id)) === 0) { @@ -88,8 +91,8 @@ export class NoteDeleteService { } // also deliever delete activity to cascaded notes - const cascadingNotes = (await this.findCascadingNotes(note)).filter(note => !note.localOnly); // filter out local-only notes - for (const cascadingNote of cascadingNotes) { + const federatedLocalCascadingNotes = (cascadingNotes).filter(note => !note.localOnly && note.userHost == null); // filter out local-only notes + for (const cascadingNote of federatedLocalCascadingNotes) { if (!cascadingNote.user) continue; if (!this.userEntityService.isLocalUser(cascadingNote.user)) continue; const content = this.apRendererService.addContext(this.apRendererService.renderDelete(this.apRendererService.renderTombstone(`${this.config.url}/notes/${cascadingNote.id}`), cascadingNote.user)); @@ -114,6 +117,11 @@ export class NoteDeleteService { } } + for (const cascadingNote of cascadingNotes) { + this.searchService.unindexNote(cascadingNote); + } + this.searchService.unindexNote(note); + await this.notesRepository.delete({ id: note.id, userId: user.id, @@ -140,7 +148,7 @@ export class NoteDeleteService { const cascadingNotes: Note[] = await recursive(note.id); - return cascadingNotes.filter(note => note.userHost === null); // filter out non-local users + return cascadingNotes; } @bindThis diff --git a/packages/backend/src/core/SearchService.ts b/packages/backend/src/core/SearchService.ts index 956c4cc09c..28b8ee8073 100644 --- a/packages/backend/src/core/SearchService.ts +++ b/packages/backend/src/core/SearchService.ts @@ -116,6 +116,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; |