/// <summary> /// Makes a TermQuery for the given MappedField and expression. /// </summary> /// <param name="field"> /// The MappedField to create the query for. /// </param> /// <param name="term"> /// The constant to match in the query. /// </param> /// <returns> /// An instance of TermQuery. /// </returns> private static TermQuery MakeTermQuery(MappedField field, Expression term) { Debug.Assert(null != field, "The mapped field must not be null."); Debug.Assert(null != term, "The term must not be null."); Term tm; switch (field.Type) { case MappedField.FieldType.Float: { BytesRef bytes = new BytesRef(NumericUtils.BUF_SIZE_INT64); long l = NumericUtils.DoubleToSortableInt64(field.GetValueFromExpression <float>(term)); NumericUtils.Int64ToPrefixCoded(l, 0, bytes); tm = new Term(field.Name, bytes); break; } case MappedField.FieldType.Double: { BytesRef bytes = new BytesRef(NumericUtils.BUF_SIZE_INT64); long l = NumericUtils.DoubleToSortableInt64(field.GetValueFromExpression <double>(term)); NumericUtils.Int64ToPrefixCoded(l, 0, bytes); tm = new Term(field.Name, bytes); break; } case MappedField.FieldType.Short: case MappedField.FieldType.Int: { BytesRef bytes = new BytesRef(NumericUtils.BUF_SIZE_INT32); NumericUtils.Int32ToPrefixCoded(field.GetValueFromExpression <int>(term), 0, bytes); tm = new Term(field.Name, bytes); break; } case MappedField.FieldType.Long: { BytesRef bytes = new BytesRef(NumericUtils.BUF_SIZE_INT64); NumericUtils.Int64ToPrefixCoded(field.GetValueFromExpression <long>(term), 0, bytes); tm = new Term(field.Name, bytes); break; } case MappedField.FieldType.String: { tm = new Term(field.Name, field.GetValueFromExpression <string>(term)); break; } default: throw new InvalidOperationException(String.Format( "Cannot make a TermQuery for field '{0}' of type {1}.", field.Name, field.Type)); } return(new TermQuery(tm)); }
/// <summary> /// Makes a TermQuery for the given MappedField and expression. /// </summary> /// <param name="field"> /// The MappedField to create the query for. /// </param> /// <param name="term"> /// The constant to match in the query. /// </param> /// <returns> /// An instance of TermQuery. /// </returns> private static TermQuery MakeTermQuery(MappedField field, Expression term) { Debug.Assert(null != field, "The mapped field must not be null."); Debug.Assert(null != term, "The term must not be null."); string queryTerm; switch (field.Type) { case MappedField.FieldType.Float: queryTerm = NumericUtils.FloatToPrefixCoded(field.GetValueFromExpression <float>(term)); break; case MappedField.FieldType.Double: queryTerm = NumericUtils.DoubleToPrefixCoded(field.GetValueFromExpression <double>(term)); break; case MappedField.FieldType.Short: queryTerm = NumericUtils.IntToPrefixCoded(field.GetValueFromExpression <short>(term)); break; case MappedField.FieldType.Int: queryTerm = NumericUtils.IntToPrefixCoded(field.GetValueFromExpression <int>(term)); break; case MappedField.FieldType.Long: queryTerm = NumericUtils.LongToPrefixCoded(field.GetValueFromExpression <long>(term)); break; case MappedField.FieldType.String: queryTerm = field.GetValueFromExpression <string>(term); break; default: throw new InvalidOperationException(String.Format( "Cannot make a TermQuery for field '{0}' of type {1}.", field.Name, field.Type)); } return(new TermQuery(new Term(field.Name, queryTerm))); }