2012-03-20 26 views
6

Me preguntaba si es posible realizar una búsqueda en un almacén de objetos indexeddb usando comodines. Sería útil encontrar todos los objetos con una clave que comience por '555', por ejemploIndexeddb: búsqueda usando comodines

+0

En SQL se realiza con la 'clave LIKE' 555% '' y eso debería funcionar. – kirilloid

+0

posible duplicado de [IndexedDB Fuzzy Search] (http://stackoverflow.com/questions/7086180/indexeddb-fuzzy-search) – Josh

Respuesta

5

Esto es posible con las teclas compuestas o los fragmentos clave. La manera en que funcionan las claves en IndexedDB es que generas un objeto "keyRange" y lo pasas a la invocación de tu cursor. El teclado pasa información como "comenzar en A y terminar en Z, inclusive".

Por naturaleza, hay una coincidencia parcial integrada en esto; La desventaja es que el cursor devolverá las claves que se encuentren entre las teclas y es posible que tenga que filtrar esos resultados aún más.

Digamos que tiene estas palabras como claves en un almacén de objetos:

  • Aardvark
  • de Apple
  • Google
  • Microsoft

El rango de teclas "A a la Z, incluido "Devolvería todo esto pero" Ap to Z, inclusive "devolvería solo los últimos tres.

Otra técnica que he usado para implementar esto es pasando una función de "filtro" a mis métodos que invocan IndexedDB. Dentro de los métodos en la devolución de llamada de éxito, pase el resultado (event.target.result) a través de su función de filtro y si devuelve verdadero, llame a su método callback onsuccess de invocador.

2

No es posible de forma predeterminada, pero mi biblioteca que escribí para el indexeddb lo admite. Pruebe linq2indexeddb.

+0

muy agradable. ¡Tan pronto como tenga tiempo lo echaré un vistazo! –

1

Busca también es posible con comodines en IndexedDB ver enlace IndexedDB Fuzzy Search

de comodín a continuación deben trabajar: gama var = IDBKeyRange.bound ("555", "555" + '\ uffff');

O bien, puede utilizar la biblioteca Linq2indexeddb para hacer uso de similares.

3

Sí, es posible usar comodines, más o menos.

Todavía no puedo votar o incluso comentar respuestas anteriores (hmmm ...) así que solo repetiré la respuesta de user2025527 ya que funcionó totalmente para mis necesidades.

Utilice el método de límites y especifique el valor base para el primer argumento y el mismo valor más un carácter adicional para el segundo argumento.

En la mayoría de los casos el carácter carácter adicional debe ser el último en su conjunto de caracteres: \ uffff

Pero usted es libre de decidir lo que constituye el límite, especialmente cuando se trata de la localización.

No sea que usted tiene los siguientes valores en el índice:

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

Para encontrar todo indicando w ith "BA" debe usar

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

"así que solo voy a repetir la respuesta de user2025527" No solo repita las respuestas; si vas a hacer eso, al menos agrega algo encima. –

+2

SO, ¿cómo puede buscar todos los valores que contiene la letra "B" –

Cuestiones relacionadas