Browse Source

Работа над расширенным поиском

Book Pauk 2 năm trước cách đây
mục cha
commit
cff6e5aab9

+ 5 - 0
README.md

@@ -89,6 +89,11 @@ Options:
     // 0 - отключить таймаут, время доступа по паролю не ограничено
     "accessTimeout": 0,
 
+    // включить(true)/выключить(false) возможность расширенного поиска (раздел "</>")
+    // расширенный поиск не оптимизирован, поэтому может сильно нагружать сервер
+    // чтобы ускорить поиск, увеличьте параметр dbCacheSize
+    "extendedSearch": true,
+
     // содержимое кнопки-ссылки "(читать)", если не задано - кнопка "(читать)" не показывается
     // пример: "https://omnireader.ru/#/reader?url=${DOWNLOAD_LINK}"
     // на место ${DOWNLOAD_LINK} будет подставлена ссылка на скачивание файла книги

+ 6 - 0
client/components/Search/SelectExtSearchDialog/SelectExtSearchDialog.vue

@@ -17,6 +17,7 @@
                         class="q-mt-xs" style="width: 150px;" :label="`(${f.type}) ${f.field}`"
                         :bg-color="bgColor[f.field] || 'white'"
                         stack-label outlined dense clearable
+                        @keypress="onKeyPress"
                     >
                         <q-tooltip v-if="search[f.field]" :delay="500" anchor="bottom middle" content-style="font-size: 80%" max-width="400px">
                             {{ search[f.field] }}
@@ -125,6 +126,11 @@ class SelectExtSearchDialog {
         this.error = error.join('<br>');
     }
 
+    onKeyPress(event) {
+        if (event.code == 'Enter')
+            this.apply();
+    }
+
     apply() {
         this.validate();
         if (!this.error) {

+ 5 - 3
server/core/DbSearcher.js

@@ -547,20 +547,22 @@ class DbSearcher {
         if (bookIds === null) {
             const db = this.db;
             const filterBySearch = (bookField, searchValue) => {
+                searchValue = searchValue.toLowerCase();
                 //особая обработка префиксов
                 if (searchValue[0] == '=') {
                     searchValue = searchValue.substring(1);
-                    return `(row.${bookField}.localeCompare(${db.esc(searchValue)}) === 0)`;
+                    return `(row.${bookField}.toLowerCase().localeCompare(${db.esc(searchValue)}) === 0)`;
                 } else if (searchValue[0] == '*') {
                     searchValue = searchValue.substring(1);
-                    return `(row.${bookField} && row.${bookField}.indexOf(${db.esc(searchValue)}) >= 0)`;
+                    return `(row.${bookField} && row.${bookField}.toLowerCase().indexOf(${db.esc(searchValue)}) >= 0)`;
                 } else if (searchValue[0] == '#') {
 
                     //searchValue = searchValue.substring(1);
                     //return !bookValue || (bookValue !== emptyFieldValue && !enru.has(bookValue[0]) && bookValue.indexOf(searchValue) >= 0);
                     return 'true';
                 } else {
-                    return `(row.${bookField}.localeCompare(${db.esc(searchValue)}) >= 0 && row.${bookField}.localeCompare(${db.esc(searchValue)} + ${db.esc(maxUtf8Char)}) <= 0)`;
+                    return `(row.${bookField}.toLowerCase().localeCompare(${db.esc(searchValue)}) >= 0 ` +
+                        `&& row.${bookField}.toLowerCase().localeCompare(${db.esc(searchValue)} + ${db.esc(maxUtf8Char)}) <= 0)`;
                 }
             };