Поправки багов поиска

This commit is contained in:
Book Pauk
2022-10-23 19:05:17 +07:00
parent ea6d61ac6f
commit 784dda03fd
2 changed files with 5 additions and 4 deletions

View File

@@ -1124,6 +1124,7 @@ class Search {
const s = this.search; const s = this.search;
const emptyFieldValue = '?'; const emptyFieldValue = '?';
const maxUtf8Char = String.fromCodePoint(0xFFFFF);
const ruAlphabet = 'абвгдеёжзийклмнопрстуфхцчшщъыьэюя'; const ruAlphabet = 'абвгдеёжзийклмнопрстуфхцчшщъыьэюя';
const enAlphabet = 'abcdefghijklmnopqrstuvwxyz'; const enAlphabet = 'abcdefghijklmnopqrstuvwxyz';
const enru = new Set((ruAlphabet + enAlphabet).split('')); const enru = new Set((ruAlphabet + enAlphabet).split(''));
@@ -1151,7 +1152,7 @@ class Search {
if (searchValue[0] == '=') { if (searchValue[0] == '=') {
searchValue = searchValue.substring(1); searchValue = searchValue.substring(1);
return bookValue == searchValue; return bookValue.localeCompare(searchValue) == 0;
} else if (searchValue[0] == '*') { } else if (searchValue[0] == '*') {
searchValue = searchValue.substring(1); searchValue = searchValue.substring(1);
@@ -1163,8 +1164,8 @@ class Search {
} else if (searchValue[0] == '?') { } else if (searchValue[0] == '?') {
return bookValue == '' || bookValue.indexOf(searchValue) == 0; return bookValue == '' || bookValue.indexOf(searchValue) == 0;
} else { } else {
//where = `@dirtyIndexLR('value', ${db.esc(a)}, ${db.esc(a + maxUtf8Char)})`;
return bookValue.indexOf(searchValue) == 0; return bookValue.localeCompare(searchValue) >= 0 && bookValue.localeCompare(searchValue + maxUtf8Char) <= 0;
} }
}; };

View File

@@ -45,7 +45,7 @@ class DbSearcher {
a = a.substring(1); a = a.substring(1);
where = `@indexIter('value', (v) => { where = `@indexIter('value', (v) => {
const enru = new Set(${db.esc(enruArr)}); const enru = new Set(${db.esc(enruArr)});
return !v || (!enru.has(v[0].toLowerCase()) && v.indexOf(${db.esc(a)}) >= 0); return !v || (!enru.has(v[0]) && v.indexOf(${db.esc(a)}) >= 0);
})`; })`;
} else { } else {
where = `@dirtyIndexLR('value', ${db.esc(a)}, ${db.esc(a + maxUtf8Char)})`; where = `@dirtyIndexLR('value', ${db.esc(a)}, ${db.esc(a + maxUtf8Char)})`;