Come si esegue Lucene su .net?
Domanda
Lucene è un eccellente motore di ricerca, ma la versione .NET è dietro la versione ufficiale di Java (l'ultima versione stabile di .NET è la 2.0, ma l'ultima versione di Lucene Java è la 2.4, che ha più funzionalità).
Come aggirare questo?
Soluzione
Un modo che ho trovato, che è stato sorpreso potrebbe funzionare: creare una DLL .NET da un file .jar Java! Utilizzando IKVM puoi scarica Lucene , ottieni il file .jar ed esegui:
ikvmc -target:library <path-to-lucene.jar>
che genera una dll .NET come questa: lucene-core-2.4.0.dll
Puoi quindi fare riferimento a questa DLL dal tuo progetto e sei a posto! Esistono alcuni tipi di Java necessari, quindi fai riferimento anche a IKVM.OpenJDK.ClassLibrary.dll. Il tuo codice potrebbe apparire un po 'così:
QueryParser parser = new QueryParser("field1", analyzer);
java.util.Map boosts = new java.util.HashMap();
boosts.put("field1", new java.lang.Float(1.0));
boosts.put("field2", new java.lang.Float(10.0));
MultiFieldQueryParser multiParser = new MultiFieldQueryParser
(new string[] { "field1", "field2" }, analyzer, boosts);
multiParser.setDefaultOperator(QueryParser.Operator.OR);
Query query = multiParser.parse("ABC");
Hits hits = isearcher.search(query);
Non ho mai saputo che potessi avere l'interoperabilità da Java a .NET così facilmente. La parte migliore è che C # e Java sono "quasi" codice sorgente compatibile (per quanto riguarda gli esempi di Lucene). Sostituisci System.Out
con Console.Writeln
:).
=======
Aggiornamento: quando crei librerie come l'evidenziatore Lucene, assicurati di fare riferimento all'assemblaggio principale (altrimenti riceverai avvisi sulle classi mancanti). Quindi l'evidenziatore è costruito in questo modo:
ikvmc -target:library lucene-highlighter-2.4.0.jar -r:lucene-core-2.4.0.dll
Altri suggerimenti
Scarica il sorgente e crealo. L'ho fatto solo lo scorso fine settimana ed è stato facile. Nessun problema. La fonte è alla versione 2.3.1.
Sono iscritto alla mailing list e, a giudicare da ciò, Lucene.Net è in fase di sviluppo attivo.
Lucene.net è in fase di sviluppo e ora ha tre committer
Ho convertito Lucene 2.4 da jar a dll in questo modo, ma ora mi dà un errore che "Tipo o spazio dei nomi Lucene non è stato trovato". Ho rimosso la vecchia dll dal progetto e ho aggiunto il riferimento per quello nuovo. Voglio davvero sbarazzarmi della vecchia versione in quanto ci sono voluti circa 2 giorni e alla fine durante l'ottimizzazione ha dato qualche errore e ora l'indice non è aggiornabile: S. Ho letto da qualche parte che la velocità di indicizzazione di Lucene 2.4 è molte volte più veloce delle vecchie versioni, se uso 2.3.1 da SVN sarà anche più veloce?