Sto cercando di prototipo di un'applicazione di indicizzazione/ricerca che utilizza le fonti molto volatili dati indicizzazione (forum, social network, ecc), qui sono alcuni dei requisiti di prestazioni,Come gestire gli aggiornamenti molto frequenti per un indice di Lucene
tempo di ritorno molto veloce (con questo voglio dire che tutti i nuovi dati (come un nuovo messaggio su un forum) dovrebbero essere disponibili nei risultati di ricerca molto presto (meno di un minuto))
i è necessario eliminare i vecchi documenti su base abbastanza regolare per garantire che i risultati della ricerca non siano datati.
Ultimo ma non meno importante, l'applicazione di ricerca deve essere reattiva. (Latenza dell'ordine di 100 millisecondi, e dovrebbe sostenere almeno 10 QPS)
Tutti i requisiti che ho attualmente possono essere soddisfatti w/o utilizzando Lucene (e che mi permetteva di soddisfare tutti i 1,2 e 3), ma sto anticipando altri requisiti in futuro (come la rilevanza della ricerca, ecc.) che Lucene rende più facile da implementare. Tuttavia, poiché Lucene è progettato per casi d'uso molto più complessi di quello a cui sto lavorando attualmente, sto attraversando un periodo difficile per soddisfare le mie esigenze in termini di prestazioni.
Ecco alcune domande,
a. Ho letto che il metodo optimize() nella classe IndexWriter è costoso e non dovrebbe essere utilizzato da applicazioni che eseguono aggiornamenti frequenti, quali sono le alternative?
b. Per poter eseguire aggiornamenti incrementali, ho bisogno di continuare a inviare nuovi dati e di aggiornare il lettore di indici per assicurarmi che siano disponibili i nuovi dati. Questi stanno andando a influenzare 1 e 3 sopra. Dovrei provare gli indici duplicati? Quali sono alcuni approcci comuni per risolvere questo problema?
c. So che Lucene fornisce un metodo di eliminazione, che consente di eliminare tutti i documenti che corrispondono a una determinata query, nel mio caso, ho bisogno di cancellare tutti i documenti più vecchi di una certa età, ora l'unica opzione è aggiungere un campo data ad ogni documenta e usalo per cancellare i documenti più tardi. È possibile eseguire query di intervallo sugli ID dei documenti (posso creare il mio campo ID poiché penso che quello creato da Lucene continua a cambiare) per eliminare i documenti? È più veloce del confronto delle date rappresentate come stringhe?
So che queste sono domande molto aperte, quindi non sto cercando una risposta dettagliata, cercherò di trattare tutte le vostre risposte come suggerimenti e usarli per informare il mio progetto. Grazie! Per favore fatemi sapere se avete bisogno di altre informazioni.