2009-08-11 8 views
42

Sto cercando di decidere su una tecnologia di ricerca/indicizzazione open source per un progetto .Net. Sembra che lo standard per i progetti Java sia Lucene, ma per quanto riguarda .Net, il progetto Lucene.Net sembra essere piuttosto inattivo. Questa è ancora l'opzione migliore là fuori? O ci sono altre valide alternative?Qual è la migliore e più attiva tecnologia di ricerca open source .Net?

+4

+1: Sono davvero interessato a questo. Ho provato a seguire il percorso dell'utilizzo del processore di indicizzazione a tutto testo di SQL Server. Funziona bene con la ricerca di file binari come pdf, doc, ecc; ma è lento cane durante la ricerca di colonne regolari. 6 secondi per cercare una tabella di 7000 righe è, a mio avviso, inaccettabile. Per ora sto solo usando LIKE 'value%' semplici ricerche che tornano estremamente veloci. – NotMe

risposta

23

Mentre non erano versioni "complete" (per esempio, documentazione completa, aggiornamenti del sito web) di Lucene.Net per un po 'di tempo, ci sono ancora nuovi commit nel suo repository SVN. L'ultima versione (2.3.2) ad esempio è stata taggata in 24/07/09 (see here). Dato che lo sviluppo è ancora attivo, lo userei per nuovi progetti di ricerca full-text.

+0

Ho capito che questa sarebbe stata la risposta. Lucene.Net è allora. Grazie a tutti! – jamesaharvey

2

Dai un'occhiata a www.searcharoo.net. Ha un crawler e ha funzionalità come la generazione di lavoro, l'indicizzazione di documenti di Office/PDF. L'autore è molto attivo sugli articoli codeproject e risponde alle domande abbastanza velocemente.

6

lucene.net sarà necessariamente in ritardo rispetto a java poiché è un porto. Inoltre non mi piace come la porta lucene sia una copia dritta, anche se lo rende più facile sui documenti, suppongo. Qualcosa da considerare sta usando Solr se non hai bisogno di un'integrazione super stretta (binaria). L'ho usato prima con un buon successo. È ancora alimentato da Lucene, ma penso che sia meglio perché ha alcune caratteristiche migliori. Puoi usarlo da .net tramite un endpoint HTTP.

Una domanda da porsi è ciò di cui si ha realmente bisogno/desidera in una soluzione di ricerca. Esistono molti modi per implementare la ricerca e non tutte le soluzioni funzionano per ogni situazione.

3

Anche se non è .NET Ti consiglio di utilizzare Solr come costruito su Lucene e sarà semplice da integrare in considerazione del fatto che restituisce XML/HTTP e JSON

6

SQLite ha FTS3 (Full Text Search 3) che possono fai ciò che vuoi che faccia. Non ho esperienza diretta con esso, ma credo che sia stato sviluppato esplicitamente per fare ciò che Lucene fa, almeno nel caso semplice. Non credo che tu possa modificare il tokenizer o altro (senza modificare il codice sorgente, comunque), ma è un'opzione.

+1

Utilizziamo SQLite FTS nel nostro prodotto ed è molto buono e molto più veloce di Lucene.NET per i nostri casi specifici. –

11

io so questo non è open-source, ma è un gratuito e molto completa offerta da Microsoft:

Microsoft Search Server 2008 Express

  • Out-of-the- rilevanza della scatola.

    Interfaccia localizzata.

    Esperienza di ricerca estensibile.

    Nessun limite di documento preimpostato.

    Indicizzazione di propagazione continua.

    Out-of-the-box connettori di indicizzazione

    Contenuto riepiloghi.

    Evidenziare.

    Migliori pronostici e definizioni.

    Correzione di query.

    Duplicato collasso.

    Filtra per proprietà.

    Filtra per lingua.

    Ordina per data.

    E-mail/RSS avverte

+2

Tuttavia, il limite della dimensione del DB è facilmente raggiungibile se si intende utilizzarlo per un indice di ricerca. Inoltre, non è progettato principalmente per l'indicizzazione del testo e, sebbene l'indicizzazione del testo possa funzionare, funzionerà piuttosto male rispetto a qualcosa come il lucene. –

+1

Interessante- non sapevo che MS avesse fatto un prodotto come questo. – RichardOD

+1

ms cerca ... schifo! – ADAM

3

quanto ho capito, è necessario "solo" un indice full-text sul database esistente, e SQL Server di ricerca full-text in linea di principio lavorato per voi, ma la tua implementazione/configurazione corrente è troppo lenta.

Se fossi in te, non andrei per un approccio completamente diverso (basti pensare al pasticcio per mantenere un indice esterno sincronizzato con il tuo database, o unire i risultati delle query di entrambi, ecc.). Prova a risolvere il problema di prestazioni con SQL Server, dato che nessuno potrebbe seriamente supporre che 6sec per la ricerca di righe 7k sia l'ultima parola per una soluzione di classe enterprise utilizzata per alcuni dei database più grandi in circolazione ... Forse prova a fare una nuova domanda sulle insidie ​​più comuni con questa funzionalità (non sono un esperto su questo), e potresti finire con una semplice soluzione invece di una ricostruzione completa della tua architettura di ricerca;)

0

Se non insisti davvero su .Net, puoi dare una prova a Sphinx. Open source e disponibile per tutte le piattaforme (Windows/Linux).

4

Lucene.net è implementato in NHibernate, quindi se si sta cercando un mapper O/R, la combinazione potrebbe valere un controllo più approfondito.

Attualmente sviluppiamo un prototipo e la configurazione di Lucene viene eseguita in pochi minuti (noi usiamo fluentemente il niberniato).

+0

Anche io sto dando una prova ad ibernazione. Grazie per le informazioni. – jamesaharvey

5

Dopo aver utilizzato Lucene.Net in un paio di progetti, vorrei anche aggiungere il suggerimento di compilare la versione Java di lucene nel codice .net con IKVM.NET. Funziona meravigliosamente e non devi mai preoccuparti di non essere aggiornato rispetto alla versione di Java. Hai anche la possibilità di compilare tutte le librerie extra e usarle (sto usando le ricerche GIS in un progetto).

+1

Hai mai pensato di creare un progetto di codeplex per questo? Forse impostare una build periodica – Mikos

+0

+1 per questa opzione ovvia ma facilmente trascurata, dato Lucene.NET Non ci ho ancora pensato; hai incontrato ostacoli che potrebbero rendere questo difficile per i negozi non Java o la tua esperienza con l'utilizzo di IKVM per un progetto di dimensioni così piccole come sembra? –

+1

@Mikos: un'idea carina; nel caso in cui risultasse fattibile con un progetto delle dimensioni di Lucene potrebbe essere una buona precedenza per questo approccio - o è già questo approccio comune e mi sono appena perso? –

1

Ho usato DotLucene ma ho riscontrato una serie di problemi. uno dei maggiori era il fatto che richiedeva piena fiducia per funzionare.

allora ho spostato utilizzando SearchAroo: http://www.searcharoo.net/

utilizza un archivio dati XML, e ho trovato le sue prestazioni ad essere molto simile a puntino Lucene.

se stai cercando un'altra opzione, darei sicuramente un'occhiata.

Problemi correlati