2012-03-20 233 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