2012-03-20 16 views
6

Zastanawiam się, czy możliwe jest wyszukiwanie w magazynie obiektów indexeddb przy użyciu symboli wieloznacznych. Przydałoby się znaleźć cały obiekt z kluczem zaczynającym się od "555", na przykładIndexeddb: wyszukiwanie przy użyciu symboli wieloznacznych

+0

W SQL jest to wykonywane z 'key LIKE '555%'' i to powinno działać. – kirilloid

+0

możliwy duplikat [IndexedDB Fuzzy Search] (http://stackoverflow.com/questions/7086180/indexeddb-fuzzy-search) – Josh

Odpowiedz

5

Jest to możliwe po wyjęciu z pudełka za pomocą złożonych kluczy lub fragmentów kluczy. Sposób działania klawiszy w IndexedDB polega na generowaniu obiektu "keyRange" i przekazywaniu go do wywołania kursora. Kluczowy klucz podaje informacje takie jak "start na A i koniec na Z, włącznie".

Z natury składa się na to częściowe dopasowanie; wadą jest to, że kursor zwróci wszystkie klawisze, które pojawią się między kluczami, i może być konieczne dalsze filtrowanie wyników.

Załóżmy, że masz te słowa jako klucze w sklepie obiektu:

  • Aardvark
  • Jabłko
  • Google
  • Microsoft

Kluczem zakres „od A do Z, włącznie "zwróci wszystkie te wartości, ale" Ap do Z, włącznie "zwróci tylko trzy ostatnie.

Inną techniką, której użyłem do implementacji tego, jest przekazanie funkcji "filtru" do moich metod wywołujących IndexedDB. Wewnątrz metody wywołania zwrotnego, przekazuj wynik (event.target.result) za pomocą funkcji filtru, a jeśli zwróci on wartość true, wywołaj wywołanie zwrotne onsuuc wywołania metody.

2

Domyślnie nie jest to możliwe, ale moja biblioteka, którą napisałem dla indexeddb, obsługuje ją. Wypróbuj linq2indexeddb.

+0

bardzo ładne. Jak tylko będę mieć czas, przyjrzę się! –

1

Wyszukiwanie możliwe jest również z symboli wieloznacznych w IndexedDB patrz link IndexedDB Fuzzy Search

dla zamiennika poniżej powinno działać: zakres var = IDBKeyRange.bound ("555", "555" + '\ uFFFF');

Albo można użyć biblioteki Linq2indexeddb do używania podobnych.

3

Tak, możliwe jest używanie symboli wieloznacznych.

Nie mogę jeszcze głosować ani nawet komentować poprzednich odpowiedzi (hmmm ...), więc powtórzę odpowiedź user2025527, ponieważ całkowicie zadziałała w moich potrzebach.

Należy użyć metody ograniczenia i podać wartość podstawową dla pierwszego argumentu i tę samą wartość oraz dodatkowy znak dla drugiego argumentu.

W większości przypadków dodatkowe postaci powinna być ostatnią w swoim charset: \ uFFFF

Ale jesteś wolny, aby zdecydować, co stanowi granicę, szczególnie gdy chodzi o lokalizację.

Lest że masz następujące wartości w indeksie:

  • A
  • AB
  • B
  • BA
  • BB
  • C

Aby znaleźć wszystko stwierdziło w z "BA" powinieneś użyć

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

"więc po prostu powtórzę odpowiedź user2025527" Proszę nie powtarzaj odpowiedzi; jeśli masz zamiar to zrobić, to przynajmniej dodaj coś na wierzchu. –

+2

W jaki sposób można wyszukać wszystkie wartości zawierające literę "B" –

Powiązane problemy