public static AbstractField CreateField(FieldSearchType field, object value) { var s = field.SearchType.Store ? LuceneField.Store.YES : LuceneField.Store.NO; AbstractField abstractField; switch (field.Field.Type) { case "byte": abstractField = new NumericField(field.Alias, s, field.SearchType.Index).SetIntValue(Convert.ToInt32(value)); break; case "short": case "int16": abstractField = new NumericField(field.Alias, s, field.SearchType.Index).SetIntValue(Convert.ToInt32(value)); break; case "int": case "int32": abstractField = new NumericField(field.Alias, s, field.SearchType.Index).SetIntValue((int)value); break; case "int64": case "long": abstractField = new NumericField(field.Alias, s, field.SearchType.Index).SetLongValue((long)value); break; case "double": abstractField = new NumericField(field.Alias, s, field.SearchType.Index).SetDoubleValue((double)value); break; case "decimal": abstractField = new LuceneField(field.Alias, ((decimal)value).ToString(LuceneConversion.CalculateDecimalFormat(field.Field.Precision, field.Field.Scale)), s, field.SearchType.Index ? LuceneField.Index.NOT_ANALYZED_NO_NORMS : LuceneField.Index.NO, LuceneField.TermVector.NO); break; case "float": case "single": abstractField = new NumericField(field.Alias, s, field.SearchType.Index).SetFloatValue((float)value); break; case "bool": case "boolean": abstractField = new LuceneField(field.Alias, (bool)value ? "1" : "0", s, LuceneField.Index.NOT_ANALYZED_NO_NORMS); break; case "datetime": abstractField = new LuceneField(field.Alias, DateTools.DateToString((DateTime)value, DateTools.Resolution.MILLISECOND), s, field.SearchType.Index ? LuceneField.Index.NOT_ANALYZED_NO_NORMS : LuceneField.Index.NO, LuceneField.TermVector.NO); break; case "rowversion": case "byte[]": abstractField = field.SearchType.Index ? new LuceneField(field.Alias, Utility.BytesToHexString((byte[])value), s, LuceneField.Index.NOT_ANALYZED_NO_NORMS) : new LuceneField(field.Alias, (byte[])value, s); break; case "string": var iString = field.SearchType.Index ? ( field.SearchType.Analyzer.Equals("keyword") ? (field.SearchType.Norms ? LuceneField.Index.NOT_ANALYZED : LuceneField.Index.NOT_ANALYZED_NO_NORMS) : (field.SearchType.Norms ? LuceneField.Index.ANALYZED : LuceneField.Index.ANALYZED_NO_NORMS) ) : LuceneField.Index.NO; abstractField = new LuceneField(field.Alias, value.ToString(), s, iString); break; default: var i = field.SearchType.Index ? (field.SearchType.Norms ? LuceneField.Index.NOT_ANALYZED : LuceneField.Index.NOT_ANALYZED_NO_NORMS) : LuceneField.Index.NO; abstractField = new LuceneField(field.Alias, value.ToString(), s, i); break; } return(abstractField); }