2012-07-05 16 views
23

Necesito crear un motor de búsqueda del lado del cliente para una aplicación html sin conexión en el almacenamiento sin conexión como CDROM. Ya lo creo con Win32 y el archivo de catálogo está cerca de 2GB (archivo MDB).¿Cómo crear un motor de búsqueda de texto completo del lado del cliente con JavaScript puro y HTML5?

Mi aplicación web sin conexión utiliza CEF (Chromium Embedded Framework) y PhoneGAP para poder desactivar la seguridad web del navegador. Pensé que IndexedDB podría ayudarme pero, de todos modos, no pude encontrar para copiar el archivo de almacenamiento a otros medios.

  1. Mi archivo de catálogo estará cerca de 2GB, por lo que no puedo leer todo el registro en la memoria.
  2. Necesito hacer que los medios de salida se multipliquen con PhoneGAP, por lo que no puedo usar objetos ActiveX para la búsqueda final. También puedo deshabilitar la restricción de seguridad web por esas herramientas.
  3. Puedo crear el archivo de catálogo y los medios con cualquier aplicación de Windows. la nota clave que el archivo de salida que consulta el catálogo debe ser JavaScript puro.

¿Hay algún sistema de almacenamiento grande HTML5 disponible (puedo desactivar la seguridad web mediante PhoneGAP) para crear un catálogo de búsqueda de aplicaciones HTML fuera de línea que se pueda copiar a otros medios extraíbles?

+1

El gran sistema de almacenamiento de HTML5 es [Web SQL] (http://www.html5rocks.com/en/tutorials/webdatabase/todo/), pero esto, por supuesto, guarda los datos en el cliente, no centralmente, entonces yo ' No estoy seguro si esto es adecuado para usted. – Utkanos

+1

Gracias por su comentario pero WebSQL obsoleto por IndexedDB. IndexedDB es bueno para mí, pero necesito saber cómo puedo mover o copiar una base de datos específica en IndexedDB a otros medios extraíbles. Parece que solo está disponible en el cliente que crea la base de datos y no se pudo mover a otro lugar :( – Madnik7G

Respuesta

1

Guardar una base de datos completa en un archivo .json definitivamente no sería eficiente, pero dividir la base de datos en fragmentos y guardarlos como archivos .json cargados a pedido puede funcionar bien, aunque requeriría pruebas.

Y - MongoDB almacena la base de datos en BSON. También puede pensar en almacenar su base de datos en este formato de archivo y cargarlo desde su aplicación (sugiero dividir toda la base de datos en partes más pequeñas de todos modos).

// edit - Si va a regalar la base de datos como archivo, entonces no creo que sea posible establecer ningún tipo de permisos. Podría intentar encriptar/ofuscar el archivo, pero no tengo idea de cómo afectaría eso el rendimiento o los contenidos de la base de datos.

Y sí, es posible tener una aplicación html + js independiente que lea la base de datos BSON sin ningún tipo de servidor. Marque this link si quiere saber más. He oído hablar de esto antes, pero no tengo absolutamente ninguna experiencia cuando se trata de manejar archivos BSON en JS puro, así que no puedo ayudarte con esto. Todo lo que podía hacer era hacerle saber que existe tal cosa :)

+0

Gracias por presentarnos sobre MongoDB, pero esto significa que debería crear un cliente DBEngine con JavaScript yo mismo con formato de archivo JSON? Pero es un proyecto independiente, ¿sabes que es posible tener acceso de solo lectura a la base de datos MongoDB a través de javaScript cliente sin instalar nada en la máquina, excepto archivos JavaScript del cliente? – Madnik7G

+0

@ Madnik7G He editado mi respuesta debido al límite de caracteres de los comentarios. – biphobe

+0

1) No necesito ninguna seguridad, solo necesito un acceso rápido al registro almacenado. 2) No sé si debo aceptar esto como respuesta o no, se ve BSON cargar todos los archivos en la memoria, también necesito indexar db porque mi archivo db en cerca de 2GB. Me pregunto si MongoDB crea muchos archivos de fragmentos con índices jerárquicos porque no debería cargar todos los DB mediante javascript. ¿Conoces una muestra que utiliza mongoDB con JavaScript del cliente? – Madnik7G

8

Reyes está haciendo un motor de búsqueda de texto completo para este propósito exacto: https://github.com/reyesr/fullproof

Durante el pasado septiembre París JS, que hizo una presentación de los conceptos detrás: http://kornr.net/prez/paris.js22/#/

Espero que responda a su necesidad.

+0

Gracias, por su respuesta. Pero como lo hice rápidamente, es un tipo de motor de base de datos como indexeddb con algunos pros y contras, mi problema es cómo mover mi base de datos actual con datos preestablecidos a otra computadora y teléfono. – Madnik7G

6

Creo que mientras tanto lunr.js se deben considerar. Tiene 3 veces las estrellas en Github.

Cuestiones relacionadas