2012-06-15 16 views
6

Tenemos un pequeño conjunto de datos y nos gustaría buscar a través de él de una manera inteligente para completar un cuadro de entrada de autocompletar. El usuario desea buscar un tipo de entidad, pero debería poder incluir los atributos de los tipos asociados.¿Hay algo como Solr o Elasticsearch que solo se pueda usar en el cliente en Javascript?

A medida que nuestra aplicación es muy específica de la industria, voy a tratar de poner la cuestión abstracta en un contexto más fácil identificarse:

Ejemplo: El usuario quiere seleccionar un determinado tipo de frutas y puedo utilizar una gran cantidad de diferentes características de la fruta para buscarla. Se puede buscar por su nombre (manzana), tipos especiales de la misma fruta (Golden Delicious), las versiones localizadas (Apfel, تفاح, pomme), sino también otras características, tales como los alimentos que contienen la fruta (pandowdy, sidra), o incluso los resultados de una búsqueda de texto completo de su descripción.

Normalmente querría usar algo como solr o elasticsearch, pero nuestro conjunto de datos no es realmente grande con 4-5 entidades asociadas con un máximo de 200 elementos cada una. Además, se mantendrá muy estático, con algunas adiciones editoriales cada dos semanas. Así que pensamos en usar la tienda de datos del navegador para administrar y buscar algún tipo de índice. El problema es que en nuestra investigación no pudimos encontrar nada que vaya más allá de abstraer Web SQL o Indexed DB.

¿Hay proyectos o bibliotecas que hagan algo como solr o elasticsearch y pueden usarse en el lado del cliente para pequeños conjuntos de datos? Buscamos las siguientes características

  • Búsqueda rápida
  • Pre-procesamiento (tokenización, filtrando ...)
  • pedidos
  • de clasificación, consulta impulsar

que debería funcionar en navegadores recientes y móvil, soporte mudo para otros navegadores (es decir, búsqueda de texto completo) aceptable

Respuesta

3

IndexedDB Es increíblemente engorroso trabajar con él y no creo que haga lo que usted desea sin algunas modificaciones.

WebSQL utilizo Chrome WebSQL (sqlite) con el texto completo (PIE3S) y se puede hacer un poco de consulta avanzada con él y cuyo peso resultados. por ejemplo:

estructura table_ft3 = [id, nombre, descripción, animales domésticos]

y se puede consultar con "SELECT ID DE DONDE table_ft3 table_ft3 Match 'palabra1 palabra2 wordfuzzy * + -notme nombre deseado: john edwar * mary pets: dog cat '"

Esto, sin embargo, está restringido a Chrome. En una tabla de 560k filas con unas 12 palabras cada una, es muy rápido, 10ms y menos.

JSLinq-http://jslinq.codeplex.com/ Esto es bueno para grandes conjuntos de datos, almacenando todo en la memoria es ridículamente rápido, pero no creo que tenga ninguna ponderación avanzada. Tiene el beneficio adicional de permitirle escribir sus propias funciones complejas de consulta.

JSII-http://karussell.wordpress.com/2010/11/02/jsii-full-text-search-in-1k-loc-of-javascript/ Este estilo utiliza ponderación Lucene y en 20k filas que está en el puesto 50 ms, que no es muy grande, pero probablemente lo suficientemente bueno para sus datos.

+0

¡Estupendo! Muchas gracias. – Kariem

Cuestiones relacionadas