Domanda

Attualmente sto eseguendo Lucene.net in un'applicazione Web e mi chiedo quale sia il metodo migliore, dal punto di vista delle prestazioni.

Attualmente l'ho impostato in modo che tutte le scritture dell'indice vengano elaborate insieme in un processo pianificato, insieme all'ottimizzazione dell'indice.

Tuttavia per la ricerca: attualmente sto aprendo e chiudendo il ricercatore per ricerca, che so non è l'ideale.

Quale pensi che sia l'approccio migliore in questa situazione?

Dovrò chiudere e riaprire il cercatore di indici una volta elaborati gli aggiornamenti / ottimizzazione, quindi il processo pianificato (che è un'app console di Windows) deve comunicare che è finito all'applicazione web.

È stato utile?

Soluzione

Ho appena integrato Lucene.NET in BugTracker.NET. Non sono sicuro che quello che ho fatto sia il migliore, ma sembra funzionare bene.

Creo l'indice all'avvio dell'app.

Creo un ricercatore e lo tengo in giro in modo che l'indice non venga ricaricato con ogni ricerca. Tutti i thread condividono lo stesso ricercatore. Quando il ricercatore cerca, prende un lucchetto.

Nel frattempo, ho un IndexWriter che aggiorna l'indice in caso di modifica dei dati. Sta solo cambiando un po ', quindi svolge rapidamente il suo compito. Quando viene eseguito, ottiene lo stesso blocco, distrugge il ricercatore, aggiorna l'indice e ricrea nuovamente il ricercatore. Il nuovo ricercatore rimane attivo fino al prossimo aggiornamento dell'indice. Il ricercatore lavora sempre con un indice aggiornato.

Puoi ottenere l'origine BugTracker.NET e guardare i file my_lucene.cs e search_text.aspx. È tutto in quei due file e non c'è molto codice.

Altri suggerimenti

È possibile chiamare il metodo IsCurrent () dei lettori per verificare se è disponibile una nuova versione dell'indice e se è quindi riaprirlo. Non potrebbe essere il modo migliore, ma è abbastanza facile e se le tue esigenze non sono molto grandi sarà sufficiente.

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