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?

È stato utile?

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?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top