2012-03-14 14 views
3

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

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) 

UPDATE
Это это то, что Я в конечном итоге реализации: Четыре диапазона, которые охватывают и возможность т.е. 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');

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

ответ

5

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

//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 
}; 

затем продолжить свой код как Это.

+0

Благодарим вас за ответ. Это разумное решение, однако для набора данных из нескольких тысяч строк это будет дублировать каждую запись ... Я играл с рекурсией и использовал одну связанную с toUpperCase и одну с toLowerCase, но все равно ничего конкретного. – BriscoCountyJr

+0

В вашем коде, когда вы указали keyRange, вы запрашивали одну строку или несколько строк? – Amro

+0

Несколько строк. То, что я пытаюсь сделать, - это когда вы нажимаете письмо, например. «F», поле автозаполнения возвращает FRESH FURIT, фрагменты, салат fReSh ... Таким образом, нажав «F», поиск на idexeddb возвращает все продукты, не имеющие значения, с которых начинается имя продукта, то есть строчный «f» или «верхний регистр» F. ..Я знаю, что в SQL это было бы намного проще, но я подумал дать indexeddb, как кажется, путь локального хранилища идет вперед ... – BriscoCountyJr

1

Причина вы видите, что вы видите, что IndexedDB курсоры lexicographically sorted.

В соответствии с этой парадигмой a> A, в отличие от alphabetical sorting, которая больше похожа на то, что вы ищете.

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

+0

Thanx для этого. Все еще думают, что существует больше случаев реального мира, когда алфавитные курсоры будут полезны, а не лексикографически, но так оно и есть ... – BriscoCountyJr

+0

Полностью согласен. Спектр достаточно молод, что, возможно, это произойдет. – buley

4

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

+0

Знаете ли вы разработчиков позади этого? Новое для меня спасибо за обмен. – buley

+1

Нет, но выглядит потрясающей библиотекой. –

+1

Вот отличная статья от автора. Кажется, это действительно отличная библиотека с отличной производительностью. https://hacks.mozilla.org/2014/06/breaking-the-borders-of-indexeddb/ – John

Смежные вопросы