2012-03-20 236 views
6

我想知道是否可以使用通配符在indexeddb對象存儲上執行搜索。 找到以'555'開頭的所有對象例如Indexeddb:使用通配符搜索

+0

在SQL中,它使用'鍵LIKE'555%''執行,並且應該可以工作。 – kirilloid 2012-03-20 16:50:13

+0

可能重複[IndexedDB模糊搜索](http://stackoverflow.com/questions/7086180/indexeddb-fuzzy-search) – Josh 2014-05-22 19:09:54

回答

5

這可以使用複合鍵或關鍵片段開箱即用。 在IndexedDB中工作的方式是您生成一個「keyRange」對象並將其傳遞給您的遊標調用。關鍵字傳遞信息,如「從A開始,以Z結尾,包含」。

本質上,有部分匹配內置於此;缺點是您的光標會返回您的按鍵之間的任何按鍵,您可能需要進一步濾除這些結果。

說你有這些詞作爲一個對象存儲鍵:

  • 土豚
  • 蘋果
  • 谷歌
  • 微軟

鍵範圍「A到Z,包容性「將會返回所有這些,但是」Ap to Z,inclusive「只會返回最後三個。

我用來實現這個的另一種技術是將「過濾器」函數傳遞給調用IndexedDB的方法。在方法onsuccess回調中,通過你的過濾函數傳遞結果(event.target.result),如果它返回true,則調用方法調用者的onsuccess回調函數。

2

默認情況下是不可能的,但我爲indexeddb編寫的庫支持它。嘗試linq2indexeddb

+0

非常好。只要有時間,我會看看! – 2012-09-04 09:22:40

1

搜索也可以與索引資料通配符看到鏈路IndexedDB Fuzzy Search

通配符下面應該工作: VAR範圍= IDBKeyRange.bound( 「555」, 「555」 + '\ uffff');

否則可以使用Linq2indexeddb庫來使用like。

3

是的,使用通配符是可行的,排序。

我還不能投票,甚至不能評論以前的答案(嗯......),所以我只是重複user2025527的答案,因爲它完全符合我的需求。

使用bounds方法並指定第一個參數的基本值和第二個參數的相同值加上一個額外字符。

在大多數情況下,多餘的字符的字符應該是最後一個在你的字符集:\ uffff

但你可以自由地決定什麼是極限,本地化時尤其如此。

免得說你有你的指數以下值:

  • 一個
  • AB
  • BA
  • BB
  • Ç

要找到一切陳述w ith應該使用「BA」

var range = IDBKeyRange.bound("BA", "BA" + '\uffff'); 
+1

「所以我只會重複user2025527的回答」請不要只重複回答;如果你打算這麼做的話,至少在它上面添加一些東西。 – 2014-01-04 06:30:15

+2

那麼如何搜索所有包含字母「B」的值 – 2014-11-05 04:49:43