Поиск без учета регистра в indexedDB - PullRequest
4 голосов
/ 14 марта 2012

Может кто-нибудь сказать мне, если возможно выполнить поиск без учета регистра в хранилище объектов indexeddb, используя index, openCursor и keyRange ....
Я могу сделать регистр с учетом и сумел реализовать что-то с помощью функции toUpperCase, но естьтак много разных вариаций, что это неосуществимо по-настоящему ...
Любая помощь приветствуется ... Спасибо ... Пример попытки:

var transaction = db.transaction("products", IDBTransaction.READ_ONLY);
var store = transaction.objectStore("products");
var descIndex = store.index('Index1');
var boundKeyRangeUpper = IDBKeyRange.bound(request.term.toUpperCase(), (request.term.toUpperCase()+'Z'));
descIndex.openCursor(boundKeyRangeUpper).onsuccess = function (e) 

ОБНОВЛЕНИЕ
Это то, что я в конечном итоге реализовал: четыре диапазона, которые охватывают и возможные, т.е. FA, fA, Fa, fa ... Это делается только по первой букве, т.е. 'F'

var boundKeyRangeUpper = IDBKeyRange.bound(term.toUpperCase(), term.toUpperCase()+'Z'); var boundKeyRangeUpper2 = IDBKeyRange.bound(term.toUpperCase(), term.toUpperCase()+'z'); var boundKeyRangeLower = IDBKeyRange.bound(term.toLowerCase(), term.toLowerCase()+'z'); var boundKeyRangeLower2 = IDBKeyRange.bound(term.toLowerCase(), term.toLowerCase()+'Z');

Результаты поиска выше сохранены в другом объектном хранилище, но их описание в верхнем регистре, следовательно, FISH, FRUIT, FRESH SALAD ... Теперь, если после F нажимается буква, например, 'r', поиск будет искать этот новый объектмагазин, где все в верхнем регистре ... Это далеко не идеальное решение, но оно работает и быстро для моих нужд ... Возможно, мы в конечном итоге получим нечувствительный к регистру поиск, peрапс нет ...

Ответы [ 3 ]

6 голосов
/ 15 марта 2012

Я рекомендую изменить структуру хранилища объектов, добавив столбец (то есть свойство к каждому объекту в хранилище) с тем же значением ключа НО в верхний регистр, а затем вместо этого сделайте это новое свойство ключом .

//object
var lang = {
    name: 'Javascript',
    keyName: '', //THE NEW PROPERTY - KEY OF THE OBJECTSTORE
    interest: 100
};

когда вы добавляете объект в хранилище, измените новое свойство в верхнем регистре имени (или термина или чего-либо еще), чтобы объект был:

//object
var lang = {
    name: 'Javascript',
    keyName: 'JAVASCRIPT', // NEW PROPERTY MODIFIED TO UPPERCASE OF OLD KEY
    interest: 100
};

затем продолжите работу с вашим кодом.

4 голосов
/ 27 марта 2014

Dexie.js отлично справляется с поиском без учета регистра без дополнительного индекса.

1 голос
/ 21 марта 2012

Причина, по которой вы видите, в том, что курсоры IndexedDB лексикографически отсортированы .

В рамках этой парадигмы a> A, в отличие от алфавитная сортировка , которая звучит болеекак то, что вы ищете.

Чтобы выполнить сортировку по алфавиту, вам нужно навести курсор на все записи в лексикографическом порядке (пока вы не получите значение event.target.result в вашем onsuccess), добавив результаты в общий глобальный объект, а затем, назавершение лексикографической сортировки, возврат в алфавитном порядке вашего общего глобального.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...