Exemple #1
0
            /// <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));
            }
Exemple #2
0
            /// <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)));
            }