2009-03-27 12 views
10

Stiamo creando un sistema open source Twitter client e alla ricerca di un DB embedded con l'minimo ingombro possibile che funziona con Delphi e che ben si presta a cerca testo intero (So che non va molto bene con l'ingombro ridotto). Idealmente dovrebbe essere libero o open source (esigente lo so).ricerca a testo integrale con DB incorporato in Delphi

Sono inclinato verso SQLite, ma non l'ho usato prima e non so se supporta la ricerca full-text, o quanto bene funzioni con Delphi. Ho usato DBISAM prima ed è incorporato con la ricerca di testo completo, ma non è gratuito. Firebird è un'altra opzione che abbiamo preso in considerazione.

Potrebbe esserci una combinazione che rende questo lavoro. Cosa useresti e come valuterà 1) Footprint, 2) Ricerca full text, 3) Free/Open source.

AGGIORNAMENTO: Grazie a tutti per i vostri suggerimenti. Così tante buone scelte tra cui scegliere.

+0

+1 Sono molto interessato a ciò che esce –

+0

Ho ascoltato il podcast, vorrei andare con Firebird, e forse un lucene (il java lucene, o dotlucene) come un FTS (Delphi può collegarsi a qualsiasi cosa). qualcuno che utilizzi il db completo o incorporato (fb completo con più utenti potrebbe essere interessante ...) –

risposta

8

Ho avuto molto successo utilizzando DiSQLite. Ha il supporto FTS e una tonnellata di altre funzionalità. Hanno una versione gratuita e una versione professionale. Credo che anche la versione gratuita sia FTS. Ho provato molte delle implementazioni SQLite per Delphi e questa è la migliore che abbia mai visto. Si compila direttamente nella tua applicazione, quindi non ci sono DLL esterne.

Ho visto molte librerie libere per database incorporati in Delphi e molte non sono più supportate, non sono mai state rilasciate o funzionano solo in Delphi5.

+0

DiSQLite sembra davvero carino. Grazie! –

+0

Come si gestisce la ricerca senza distinzione tra maiuscole e minuscole in DISQLIte (utilizzando FTS o LIKE)? SQLIte e DISQLite gestiscono la ricerca senza distinzione tra maiuscole e minuscole solo per le lingue dell'Europa occidentale e supportano solo ricerche che fanno distinzione tra maiuscole e minuscole per altre codepage. Nella pratica del mondo reale, le ricerche sensibili al maiuscolo/minuscolo non sono molto utili. –

1

Perché avresti bisogno di una ricerca a tutto testo per questo? Non uso Twitter, ma credo che i messaggi di Twitter abbiano un massimo di 140 caratteri? Questi si adatterebbero in un campo varchar. Non hai bisogno di ricerca full-text per trovare qualcosa in tale campo.

+0

È necessario FTS se si desidera supportare query in stile Google, come la prossimità di parole, lo stemming, –

+0

ah, vero. Stavo pensando a semplici ricerche di parole: – Birger

+1

Più indicizzazione su tutto il le parole accelerano indipendentemente il processo di ricerca invece di indicizzare l'intero tweet. –

0

C'è anche DotLucene, che richiede l'installazione del framework .NET ma può essere facilmente caricato tramite le .net apis. È ideale per la ricerca e ha un formato di query comune alla maggior parte dei motori di ricerca.

2

Abbiamo integrato DotLucene in una delle nostre app interne basate su Delphi, usando Hydra (Mike ci ha lavorato su questo, a quei tempi); se questa è un'opzione che vogliamo perseguire qui, sono sicuro che possiamo estrarla e renderla riutilizzabile per questo progetto

3

So che firebird ha il componente aggiuntivo sphinx per la ricerca di testo completo (anche se secondo il sito c'è " lontano dalla vera "ricerca a testo integrale"), è gratuito/open source ma non riesco a trovare alcuna informazione per dire se funziona con la versione integrata di firebird.

1

Suggerirei che DBISAM, o ora probabilmente il loro nuovo ElevateDB, dovrebbe essere fortemente considerato. Dalla tua precedente esperienza, mi aspetto che tu sappia che non aggiunge molta dimensione al tuo eseguibile, è ragionevolmente veloce, affidabile, perfetta soluzione basata su Delphi e ha un eccellente supporto. Nel corso degli anni il loro dialetto SQL è stato perfezionato, quindi ora è molto bello con un alto grado di conformità ANSI SQL-2003.

DBISAM/ElevateDB è come si nota non open source, ma il costo della licenza è solo per sviluppatore (non per distribuzione), quindi se ci sono solo pochi sviluppatori coinvolti il ​​costo è (a mio avviso) trascurabile.Il costo della licenza è particolarmente ragionevole se si considera il livello di supporto e di reattività dei newsgroup DBISAM/Elevatesoft, in cui il principale sviluppatore/proprietario (Tim Young) è coinvolto attivamente rispondendo alle domande e risolvendo i problemi. A parte il costo di una soluzione proprietaria, c'è ovviamente anche la preoccupazione sul fatto che l'azienda sopravvivrà e il prodotto continuerà a essere sviluppato e supportato in futuro. È qualcosa che devi pesare per te stesso, ma lo sviluppo sembra più forte che mai. Hanno provider .NET per i loro db e supportano lo sviluppo multipiattaforma con FreePascal/Lazarus.

Un plus alla ricerca di testo completo di DBISAM è che è strettamente integrato nell'SQL. Cioè, puoi emettere una singola istruzione SELECT che combina direttamente i criteri WHERE ordinari su alcuni campi con criteri di ricerca a testo integrale su altri. A seconda delle esigenze, questa è una bella funzionalità che rende molto semplice e veloce fare alcune cose che richiederebbero più lavoro usando una soluzione full text diversa. Penso che la maggior parte delle soluzioni aggiuntive, come Lucene e altre che potrebbero essere utilizzate con Firebird, non si integrino strettamente con SQL regolare e limitino il recupero di un set di record con solo criteri di testo completo. Qualcosa come l'add-on proprietario di Textolution per Firebird (http://www.textolution.com/ftsib_example.asp) sembra essere in grado di supportare la costruzione di query complesse (nidificate) che applichino criteri sia normali che fulltext, ma DBISAM lo fa in modo più elegante. E aggiungere un add-on proprietario ad un db sort di open source sconfigge lo scopo di andare open source, comunque.

Un difetto della ricerca di testo completo di DBISAM/ElevateDB, penso, è che supporta solo l'uso delle condizioni 'AND' e 'OR', non ha alcuna ricerca di prossimità.

Ho notato che esiste una soluzione di testo completo per SQLite, http://www.sqlite.org/cvstrac/wiki?p=FullTextIndex. Non ho mai usato SQLite, ma so che molte persone lo adorano. Un settore in cui sono abbastanza sicuro che DBISAM/Elevatesoft ha un grande vantaggio nelle applicazioni multiutente in cui è richiesta una funzionalità di blocco robusta, anche se questo non comporterebbe necessariamente alcun peso per l'app desktop per utente singolo.

2

Procedere con SQLite. Ci sono molti componenti sqlite GRATUITI per Delphi. Alcuni di loro hanno cessato di essere progetti attivi. Ma un componente della nota è ZeosDB. ZeosDB è mantenuto attivamente e anche il suo supporto sqlite è perfetto. Nel caso in cui sia necessario un altro supporto per i motori di database, ZeosDB è di nuovo la risposta (supporta MySQL, PostgreSQL, Interbase, Firebird, MS SQL, Sybase, Oracle e SQLite).

1

vorrei andare con Sqlite utilizzando Aducom componenti SQLite, sono facili da lavorare con SQLite di DiSQLite, libero e il lavoro come componenti TDataset, voterei per sqlite perché:

  1. E 'molto veloce e compatto Banca dati.
  2. Impronta molto piccola, solo circa 200kb Dll.
  3. È possibile collegarlo statico se utilizzato con i componenti di Aducom, quindi non è necessario distribuire la DLL.
  4. Ha incorporato il supporto per la ricerca di testo completo.
  5. È utilizzato e utilizzato in molte applicazioni gratuite e commerciali come memoria esterna.
  6. Ha la maggior parte degli standard SQL, quindi verrà utilizzata la maggior parte delle tue conoscenze in sql.
1

Sqlite è praticamente solo per singolo utente/connessione singola. Fare un aggiornamento blocca l'intero database. Ci si occupa di ciò impostando un valore di timeout per le altre connessioni in attesa (il valore predefinito non è il timeout). L'accesso multiutente può diventare molto lento e/o dare un timeout frequente a seconda del valore che si utilizza.

Ho utilizzato i componenti Asqlite da http://www.aducom.com/. Gratuito e Open source. Attualmente non supporta d2009 con gli sguardi, ma è in fase di sviluppo. Ci sono anche un certo numero di altri set di componenti, ma non ne ho mai usati altri.

È possibile aggiungere la ricerca di testo completo a qualsiasi app delphi utilizzando Rubicon (ora con nuova gestione allo http://www.href.com/rubicon). Tuttavia questo non è libero :(

-1

DBISAM tutta la strada. Works, molto solido, embedded, l'indicizzazione full text grandi opere (una vasta esperienza personale!)

ElevateDB è prob anche grande, ma non ho alcuna esperienza diretta con esso.

4

Sybase Advantage Database Server ha un motore di server locale royalty free (blocco a livello di record di multi-threaded e), grandi componenti discendenti Delphi TDataSet (codice sorgente incluso), e un grande completo motore di ricerca.

Advantage la ricerca a testo integrale supporta gli operatori AND, OR, NOT e NEAR ovides Funzioni scalari SCORE e SCOREDISTINCT che restituiscono il conteggio totale di tutte le istanze di parole nella condizione di ricerca.

Gli indici di testo completo Advantage vengono mantenuti al momento dell'aggiornamento dei record, il che significa che non richiedono alcuna ricostruzione. Gli indici sono in un formato compresso; quindi la dimensione dell'indice reale può essere molto più piccola dei dati fisici. È possibile eseguire ricerche full-text su dati non indicizzati, ma ciò richiede una ricerca fisica dei dati del record e può essere molto più lento. Le ricerche indicizzate utilizzano filtri bitmap per prestazioni ottimali.

La guida in linea ha tutti i dettagli per quanto riguarda le opzioni di indicizzazione, ecc .:

http://tinyurl.com/ctjoqg

0

ho una soluzione semi-Delphi lavorare qui: http://sourceforge.net/projects/mutis/, una porta per Delphi di Lucene.

La mayority di farlo funzionare bene, ma Unfortunally era basata nella realizzazione Delphi.NET morte lavoro in modo requiere per aggiornare ad una nativa (sì, è stato un grosso errore prendere la strada .NET :()

Problemi correlati