mirror of
https://git.joinsharkey.org/Sharkey/Sharkey.git
synced 2024-11-23 05:13:07 +02:00
upd: use Meilisearch for file type searching
This commit is contained in:
parent
733c9a8c00
commit
3f86903cae
2 changed files with 42 additions and 2 deletions
|
@ -29,7 +29,8 @@ type Q =
|
||||||
{ op: 'is not null', k: K} |
|
{ op: 'is not null', k: K} |
|
||||||
{ op: 'and', qs: Q[] } |
|
{ op: 'and', qs: Q[] } |
|
||||||
{ op: 'or', qs: Q[] } |
|
{ op: 'or', qs: Q[] } |
|
||||||
{ op: 'not', q: Q };
|
{ op: 'not', q: Q } |
|
||||||
|
{ op: 'in', qs: Q[] };
|
||||||
|
|
||||||
function compileValue(value: V): string {
|
function compileValue(value: V): string {
|
||||||
if (typeof value === 'string') {
|
if (typeof value === 'string') {
|
||||||
|
@ -93,6 +94,7 @@ export class SearchService {
|
||||||
'userHost',
|
'userHost',
|
||||||
'channelId',
|
'channelId',
|
||||||
'tags',
|
'tags',
|
||||||
|
'attachedFileTypes',
|
||||||
],
|
],
|
||||||
typoTolerance: {
|
typoTolerance: {
|
||||||
enabled: false,
|
enabled: false,
|
||||||
|
@ -138,6 +140,7 @@ export class SearchService {
|
||||||
cw: note.cw,
|
cw: note.cw,
|
||||||
text: note.text,
|
text: note.text,
|
||||||
tags: note.tags,
|
tags: note.tags,
|
||||||
|
attachedFileTypes: note.attachedFileTypes,
|
||||||
}], {
|
}], {
|
||||||
primaryKey: 'id',
|
primaryKey: 'id',
|
||||||
});
|
});
|
||||||
|
@ -182,6 +185,44 @@ export class SearchService {
|
||||||
filter.qs.push({ op: '=', k: 'userHost', v: opts.host });
|
filter.qs.push({ op: '=', k: 'userHost', v: opts.host });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (opts.filetype) {
|
||||||
|
if (opts.filetype === 'image') {
|
||||||
|
filter.qs.push({ op: 'or', qs: [
|
||||||
|
{ op: '=', k: 'attachedFileTypes', v: 'image/webp' },
|
||||||
|
{ op: '=', k: 'attachedFileTypes', v: 'image/png' },
|
||||||
|
{ op: '=', k: 'attachedFileTypes', v: 'image/jpeg' },
|
||||||
|
{ op: '=', k: 'attachedFileTypes', v: 'image/avif' },
|
||||||
|
{ op: '=', k: 'attachedFileTypes', v: 'image/apng' },
|
||||||
|
{ op: '=', k: 'attachedFileTypes', v: 'image/gif' },
|
||||||
|
] });
|
||||||
|
} else if (opts.filetype === 'video') {
|
||||||
|
filter.qs.push({ op: 'or', qs: [
|
||||||
|
{ op: '=', k: 'attachedFileTypes', v: 'video/mp4' },
|
||||||
|
{ op: '=', k: 'attachedFileTypes', v: 'video/webm' },
|
||||||
|
{ op: '=', k: 'attachedFileTypes', v: 'video/mpeg' },
|
||||||
|
{ op: '=', k: 'attachedFileTypes', v: 'video/x-m4v' },
|
||||||
|
] });
|
||||||
|
} else if (opts.filetype === 'audio') {
|
||||||
|
filter.qs.push({ op: 'or', qs: [
|
||||||
|
{ op: '=', k: 'attachedFileTypes', v: 'audio/mpeg' },
|
||||||
|
{ op: '=', k: 'attachedFileTypes', v: 'audio/flac' },
|
||||||
|
{ op: '=', k: 'attachedFileTypes', v: 'audio/wav' },
|
||||||
|
{ op: '=', k: 'attachedFileTypes', v: 'audio/aac' },
|
||||||
|
{ op: '=', k: 'attachedFileTypes', v: 'audio/webm' },
|
||||||
|
{ op: '=', k: 'attachedFileTypes', v: 'audio/opus' },
|
||||||
|
{ op: '=', k: 'attachedFileTypes', v: 'audio/ogg' },
|
||||||
|
{ op: '=', k: 'attachedFileTypes', v: 'audio/x-m4a' },
|
||||||
|
{ op: '=', k: 'attachedFileTypes', v: 'audio/mod' },
|
||||||
|
{ op: '=', k: 'attachedFileTypes', v: 'audio/s3m' },
|
||||||
|
{ op: '=', k: 'attachedFileTypes', v: 'audio/xm' },
|
||||||
|
{ op: '=', k: 'attachedFileTypes', v: 'audio/it' },
|
||||||
|
{ op: '=', k: 'attachedFileTypes', v: 'audio/x-mod' },
|
||||||
|
{ op: '=', k: 'attachedFileTypes', v: 'audio/x-s3m' },
|
||||||
|
{ op: '=', k: 'attachedFileTypes', v: 'audio/x-xm' },
|
||||||
|
{ op: '=', k: 'attachedFileTypes', v: 'audio/x-it' },
|
||||||
|
] });
|
||||||
|
}
|
||||||
|
}
|
||||||
const res = await this.meilisearchNoteIndex!.search(q, {
|
const res = await this.meilisearchNoteIndex!.search(q, {
|
||||||
sort: [`createdAt:${opts.order ? opts.order : 'desc'}`],
|
sort: [`createdAt:${opts.order ? opts.order : 'desc'}`],
|
||||||
matchingStrategy: 'all',
|
matchingStrategy: 'all',
|
||||||
|
|
|
@ -75,7 +75,6 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
|
||||||
host: ps.host,
|
host: ps.host,
|
||||||
filetype: ps.filetype,
|
filetype: ps.filetype,
|
||||||
order: ps.order,
|
order: ps.order,
|
||||||
disableMeili: ps.filetype ? true : false,
|
|
||||||
}, {
|
}, {
|
||||||
untilId: ps.untilId,
|
untilId: ps.untilId,
|
||||||
sinceId: ps.sinceId,
|
sinceId: ps.sinceId,
|
||||||
|
|
Loading…
Reference in a new issue