Stiamo utilizzando Lucene per sviluppare una casella di ricerca di testo libero per i dati consegnati a un utente, come nel caso di una casella di posta elettronica. Desideriamo consentire alla casella di gestire le date, ad esempio il 5/1/2011. Per rendere le cose più facili, stiamo limitando la versione corrente della funzione per soli due formati di data:Come rilevare una data in una query di ricerca libera del testo di Lucene?
mm/dd/yy
mm/dd/yyyy
Per il nostro prototipo abbiamo hacking il processo di analisi delle query per tentare di pre-processo la stringa di query per cercare questi due modelli di data. Questo era circa 2 anni fa, e noi eravamo su Lucene 2.4. Sono curioso di vedere se ci sono strumenti in Lucene pronti all'uso per accettare un DateFormat e restituire un TokenStream con date identificate. Guardando attraverso le javadocs per Lucene 2.9, ho trovato la classe:
org.apache.lucene.analysis.sinks.DateRecognizerSinkFilter
che sembra fare quello che mi serve, ma implementa una SinkFilter, un concetto che non sembra essere documentato nel Lucene Wiki. Qualcuno ha mai usato questo filtro e, in caso affermativo, qual è il modo più efficace per usarlo?
Grazie per la risposta! Darò una soluzione alla tua soluzione e pubblicherò i miei risultati. –
Ottimo! Si potrebbe anche implementarlo come un normale tokenizer in linea che emette la stringa originale e la data nella stessa posizione. In questo modo, se, ad esempio, il formato della tua data avesse nomi di mesi o date, potresti comunque cercare direttamente quelli. –