Работа над поиском по типу файла

This commit is contained in:
Book Pauk
2023-03-17 11:44:50 +07:00
parent 14a877d6d1
commit d6aa43d01b
6 changed files with 255 additions and 3 deletions

View File

@@ -21,7 +21,7 @@ module.exports = {
//поправить в случае, если были критические изменения в DbCreator или InpxParser
//иначе будет рассинхронизация по кешу между сервером и клиентом на уровне БД
dbVersion: '11',
dbVersion: '12',
dbCacheSize: 5,
maxPayloadSize: 500,//in MB

View File

@@ -64,6 +64,8 @@ class DbCreator {
let dateArr = [];
let librateMap = new Map();//оценка
let librateArr = [];
let extMap = new Map();//тип файла
let extArr = [];
let uidSet = new Set();//уникальные идентификаторы
@@ -215,6 +217,9 @@ class DbCreator {
//оценка
parseField(rec.librate, librateMap, librateArr, rec.id);
//тип файла
parseField(rec.ext, extMap, extArr, rec.id);
};
//основная процедура парсинга
@@ -272,6 +277,8 @@ class DbCreator {
delMap = null;
dateMap = null;
librateMap = null;
extMap = null;
uidSet = null;
await db.close({table: 'book'});
@@ -408,6 +415,9 @@ class DbCreator {
//librate
await saveTable('librate', librateArr, () => {librateArr = null}, 'number');
//ext
await saveTable('ext', extArr, () => {extArr = null});
//кэш-таблицы запросов
await db.create({table: 'query_cache'});
await db.create({table: 'query_time'});

View File

@@ -288,6 +288,42 @@ class DbSearcher {
idsArr.push(ids);
}
//тип файла
if (query.ext) {
const key = `book-ids-ext-${query.ext}`;
let ids = await this.getCached(key);
if (ids === null) {
const extRows = await db.select({
table: 'ext',
rawResult: true,
where: `
const exts = ${db.esc(query.ext.split(','))};
const ids = new Set();
for (const l of exts) {
for (const id of @indexLR('value', l, l))
ids.add(id);
}
const result = new Set();
for (const id of ids) {
const row = @unsafeRow(id);
for (const bookId of row.bookIds)
result.add(bookId);
}
return new Uint32Array(result);
`
});
ids = extRows[0].rawResult;
await this.putCached(key, ids);
}
idsArr.push(ids);
}
if (idsArr.length > 1) {
//ищем пересечение множеств
let proc = 0;

View File

@@ -350,9 +350,14 @@ class WebWorker {
rows = await db.select({table: 'lang', map: `(r) => ({value: r.value})`});
const langs = rows.map(r => r.value);
// exts
rows = await db.select({table: 'ext', map: `(r) => ({value: r.value})`});
const exts = rows.map(r => r.value);
result = {
genreTree: genres,
langList: langs,
extList: exts,
inpxHash: (config.inpxHash ? config.inpxHash : ''),
};