2012-03-20 1 views
6

Mi chiedevo se è possibile eseguire una ricerca su un archivio oggetti indexeddb utilizzando i caratteri jolly. Sarebbe utile trovare tutti gli oggetti con un tasto che inizia con '555' ad esempioIndexeddb: ricerca utilizzando caratteri jolly

+0

In SQL viene eseguito con 'chiave LIKE '555%'' e dovrebbe funzionare. – kirilloid

+0

possibile duplicato di [IndexedDB Fuzzy Search] (http://stackoverflow.com/questions/7086180/indexeddb-fuzzy-search) – Josh

risposta

5

Questo è possibile utilizzando i tasti composti oi frammenti di chiave. Il modo in cui le chiavi funzionano in IndexedDB è che si genera un oggetto "keyRange" e lo si passa all'invocazione del cursore. Il keyrange passa informazioni come "inizia da A e termina a Z, incluso".

In base alla natura, è presente una corrispondenza parziale; il rovescio della medaglia è che il tuo cursore restituirà tutti i tasti che si trovano tra le tue chiavi e potresti dover filtrare ulteriormente quei risultati.

Diciamo che avete queste parole come chiavi in ​​un negozio oggetto:

  • Aardvark
  • di Apple
  • Google
  • Microsoft

La gamma chiave "dalla A alla Z, inclusiva "restituirebbe tutti questi, ma" Dalla A alla Z, inclusi "restituirebbe solo gli ultimi tre.

Un'altra tecnica che ho usato per implementare questo è passando una funzione "filtro" ai miei metodi che richiamano IndexedDB. All'interno dei metodi su callback di successo, passare il risultato (event.target.result) tramite la funzione filtro e se restituisce true, quindi richiamare il callback del metodo invocatore del metodo.

2

Non è possibile per impostazione predefinita, ma la mia libreria che ho scritto per indexeddb lo supporta. Prova linq2indexeddb.

+0

molto bello. Appena avrò tempo darò un'occhiata! –

1

Search è possibile anche con caratteri jolly in IndexedDB vedi link IndexedDB Fuzzy Search

per jolly di seguito dovrebbe funzionare: gamma var = IDBKeyRange.bound ("555", "555" + '\ uffff');

Oppure utilizzare la libreria Linq2indexeddb per utilizzare come.

3

Sì, è possibile utilizzare i caratteri jolly, una sorta di.

Non posso ancora votare o commentare le risposte precedenti (hmmm ...) quindi ripeterò la risposta dell'utente2025527 in quanto ha funzionato perfettamente per le mie esigenze.

Utilizzare il metodo dei limiti e specificare il valore di base per il primo argomento e lo stesso valore più un carattere aggiuntivo per il secondo argomento.

Nella maggior parte dei casi il carattere carattere aggiuntivo dovrebbe essere l'ultimo nel vostro charset: \ uffff

Ma tu sei libero di decidere ciò che costituisce il limite, soprattutto quando si tratta di localizzazione.

Affinché non dire di avere i seguenti valori nel vostro indice:

  • Un
  • AB
  • B
  • BA
  • BB
  • C

Per trovare tutto ciò che afferma w con "BA" dovresti usare

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

"quindi ripeterò la risposta di user2025527" Per favore non limitatevi a ripetere le risposte; se hai intenzione di farlo, almeno aggiungi qualcosa su di esso. –

+2

SO come può cercare tutti i valori che contengono la lettera "B" –