2012-06-15 14 views
6

Abbiamo un piccolo set di dati e vorremmo cercare attraverso di esso in modo intelligente per popolare una casella di input di completamento automatico. L'utente desidera cercare un tipo di entità, ma dovrebbe essere in grado di inserire attributi dei tipi associati.Esiste qualcosa come Solr o Elasticsearch che possono essere utilizzati sul client solo in Javascript?

Come la nostra applicazione è molto specifici del settore, cercherò di mettere la questione astratta in un contesto più facilmente riconoscibili:

Esempio: L'utente vuole selezionare un certo tipo di frutta e può utilizzare un sacco di diverse caratteristiche del frutto per cercarlo. Può cercare il suo nome (mela), particolari tipi di frutto stesso (Golden Delicious), le versioni localizzate (Apfel, تفاح, pomme), ma anche altre caratteristiche, come ad esempio gli alimenti che contengono la frutta (pandowdy, sidro), o anche i risultati di una ricerca full-text della sua descrizione.

Normalmente vorrei utilizzare qualcosa come solr o elasticsearch, ma il nostro set di dati non è molto grande con 4-5 entità associate di massimo 200 elementi ciascuna. Inoltre rimarrà molto statico, con alcune aggiunte editoriali a settimane alterne. Quindi abbiamo pensato di utilizzare l'archivio dati del browser per gestire e cercare un tipo di indice. Il problema è che nella nostra ricerca non siamo riusciti a trovare nulla che andasse ben oltre l'astrazione Web SQL o Indexed DB.

Esistono progetti o librerie che fanno qualcosa come Solr o Elasticsearch e possono essere utilizzati sul lato client per piccoli set di dati? Stiamo cercando per le seguenti funzioni

  • Ricerca rapida
  • pre-elaborazione (tokenizzazione, filtrando ...)
  • ordinazione
  • Ranking, interrogare aumentando

dovrebbe funzionare su browser recenti e mobile, stupido fallback per altri browser (ad esempio ricerca a testo integrale) accettabile

risposta

3

IndexedDB È incredibilmente ingombrante con cui lavorare e non penso che farà quello che vuoi senza alcune modifiche.

WebSQL Io uso Chrome WebSQL (SQLite) con full-text (FT3) e si può fare un po 'interrogazione avanzata con esso e automaticamente pesi risultati. ad esempio:

struttura table_ft3 = [id, nome, descrizione, animali domestici]

e si può interrogare con "SELECT id FROM WHERE table_ft3 table_ft3 PARTITA 'word1 word2 wordfuzzy * -notme + nome desiderato: John Edwar * mary pets: dog cat '"

Questo è, tuttavia, limitato a Chrome. Su un tavolo di 560.000 file con circa 12 parole ciascuna è molto veloce, 10 ms e meno.

JSLinq-http://jslinq.codeplex.com/ Questo è un bene per i grandi insiemi di dati, memorizzando tutto in memoria è ridicolmente veloce, ma non credo che abbia qualche ponderazione avanzata. Ha anche il vantaggio di permetterti di scrivere le tue complesse funzioni di query.

JSII-http://karussell.wordpress.com/2010/11/02/jsii-full-text-search-in-1k-loc-of-javascript/ Questo utilizza lo stile Lucene ponderazione e 20k righe si entra a 50ms, che non è grande, ma probabilmente abbastanza buono per i vostri dati.

+0

Ottimo! Grazie mille. – Kariem

Problemi correlati