Lucene.Net: indicizzare nullable date con un FieldBridge custom

You think it's good?

L’altro giorno mi è capitato di dover effettuare con Lucene delle ricerche per un intervallo di date (data inizio e data fine). Siccome le date in questione potevano essere nulle si poneva il problema di come indicizzarle perchè fossero confrontabili con i valori forniti dalla ricerca (esempio minore di e maggiore di…).

Non potendo rinunciare al valore nullo sul database ho pensato di intervenire al momento dell’indicizzazione dell’entità andando a sostituire il valore nullo con un valore di default che fosse uguale al valore minimo di DateTime per la data di inizio e al valore massimo di DateTime per la data di fine.

Avvalendomi dell’aiuto di NHibernate.Search ho realizzato un FieldBridge custom che potesse intervenire nel momento dell’indicizzazione della mia entità. Un FieldBridge non è altro che un “codec” da object a string che consente di indicizzare il contenuto di una proprietà (Object To String) e di recuperarne il valore originale dall’indice (String To Object). Ecco il codice:

Per utilizzare questo FieldBridge è sufficiente decorare con un attributo la proprietà di tipo DateTime che si vuole indicizzare come nell’esempio di codice seguente:

Comments are closed.