@@ -24,9 +24,7 @@
24module Database.Bloodhound.Types
24module Database.Bloodhound.Types
25 ( defaultCache
25 ( defaultCache
26 , defaultIndexSettings
26 , defaultIndexSettings
30 , showText
28 , showText
31 , unpackId
29 , unpackId
32 , mkMatchQuery
30 , mkMatchQuery
@@ -69,13 +67,16 @@ module Database.Bloodhound.Types
69 , DistanceRange(..)
67 , DistanceRange(..)
70 , OptimizeBbox(..)
68 , OptimizeBbox(..)
71 , LatLon(..)
69 , LatLon(..)
72− , Range(..)
70+ , RangeValue(..)
74 , RangeExecution(..)
71 , RangeExecution(..)
75 , LessThan(..)
72 , LessThan(..)
76 , LessThanEq(..)
73 , LessThanEq(..)
77 , GreaterThan(..)
74 , GreaterThan(..)
78 , GreaterThanEq(..)
75 , GreaterThanEq(..)
79 , Regexp(..)
80 , Regexp(..)
80 , RegexpFlags(..)
81 , RegexpFlags(..)
81 , RegexpFlag(..)
82 , RegexpFlag(..)
@@ -636,10 +637,10 @@ data RegexpQuery =
637data RangeQuery =
638data RangeQuery =
638 RangeQuery { rangeQueryField :: FieldName
639 RangeQuery { rangeQueryField :: FieldName
639− , rangeQueryRange :: Either HalfRange Range
640+ , rangeQueryRange :: RangeValue
640 , rangeQueryBoost :: Boost } deriving (Eq, Show)
641 , rangeQueryBoost :: Boost } deriving (Eq, Show)
642−mkRangeQuery :: FieldName -> Either HalfRange Range -> RangeQuery
643+mkRangeQuery :: FieldName -> RangeValue -> RangeQuery
643mkRangeQuery f r = RangeQuery f r (Boost 1.0)
644mkRangeQuery f r = RangeQuery f r (Boost 1.0)
645data SimpleQueryStringQuery =
646data SimpleQueryStringQuery =
@@ -922,7 +923,7 @@ data Filter = AndFilter [Filter] Cache
922 | LimitFilter Int
923 | LimitFilter Int
923 | MissingFilter FieldName Existence NullValue
924 | MissingFilter FieldName Existence NullValue
924 | PrefixFilter FieldName PrefixValue Cache
925 | PrefixFilter FieldName PrefixValue Cache
925− | RangeFilter FieldName (Either HalfRange Range) RangeExecution Cache
926+ | RangeFilter FieldName RangeValue RangeExecution Cache
926 | RegexpFilter FieldName Regexp RegexpFlags CacheName Cache CacheKey
927 | RegexpFilter FieldName Regexp RegexpFlags CacheName Cache CacheKey
927 | TermFilter Term Cache
928 | TermFilter Term Cache
928 deriving (Eq, Show)
929 deriving (Eq, Show)
@@ -930,22 +931,6 @@ data Filter = AndFilter [Filter] Cache
930data ZeroTermsQuery = ZeroTermsNone
931data ZeroTermsQuery = ZeroTermsNone
931 | ZeroTermsAll deriving (Eq, Show)
932 | ZeroTermsAll deriving (Eq, Show)
934−newtype LessThan = LessThan Double deriving (Eq, Show)
935−newtype LessThanEq = LessThanEq Double deriving (Eq, Show)
936−newtype GreaterThan = GreaterThan Double deriving (Eq, Show)
937−newtype GreaterThanEq = GreaterThanEq Double deriving (Eq, Show)
939−data HalfRange = HalfRangeLt LessThan
940− | HalfRangeLte LessThanEq
941− | HalfRangeGt GreaterThan
942− | HalfRangeGte GreaterThanEq deriving (Eq, Show)
944−data Range = RangeLtGt LessThan GreaterThan
945− | RangeLtGte LessThan GreaterThanEq
946− | RangeLteGt LessThanEq GreaterThan
947− | RangeLteGte LessThanEq GreaterThanEq deriving (Eq, Show)
949data RangeExecution = RangeExecutionIndex
934data RangeExecution = RangeExecutionIndex
950 | RangeExecutionFielddata deriving (Eq, Show)
935 | RangeExecutionFielddata deriving (Eq, Show)
@@ -962,19 +947,52 @@ data RegexpFlag = AnyString
962 | Intersection
947 | Intersection
963 | Interval deriving (Eq, Show)
948 | Interval deriving (Eq, Show)
965−halfRangeToKV :: HalfRange -> (Text, Double)
950+newtype LessThan = LessThan Double deriving (Eq, Show)
966−halfRangeToKV (HalfRangeLt (LessThan n)) = ("lt", n)
951+newtype LessThanEq = LessThanEq Double deriving (Eq, Show)
967−halfRangeToKV (HalfRangeLte (LessThanEq n)) = ("lte", n)
952+newtype GreaterThan = GreaterThan Double deriving (Eq, Show)
968−halfRangeToKV (HalfRangeGt (GreaterThan n)) = ("gt", n)
953+newtype GreaterThanEq = GreaterThanEq Double deriving (Eq, Show)
969−halfRangeToKV (HalfRangeGte (GreaterThanEq n)) = ("gte", n)
971−rangeToKV :: Range -> (Text, Double, Text, Double)
972−rangeToKV (RangeLtGt (LessThan m) (GreaterThan n)) = ("lt", m, "gt", n)
973−rangeToKV (RangeLtGte (LessThan m) (GreaterThanEq n)) = ("lt", m, "gte", n)
974−rangeToKV (RangeLteGt (LessThanEq m) (GreaterThan n)) = ("lte", m, "gt", n)
975−rangeToKV (RangeLteGte (LessThanEq m) (GreaterThanEq n)) = ("lte", m, "gte", n)
977−-- phew. Coulda used Agda style case breaking there but, you know, whatever. :)
955+newtype LessThanD = LessThanD UTCTime deriving (Eq, Show)
956+newtype LessThanEqD = LessThanEqD UTCTime deriving (Eq, Show)
957+newtype GreaterThanD = GreaterThanD UTCTime deriving (Eq, Show)
958+newtype GreaterThanEqD = GreaterThanEqD UTCTime deriving (Eq, Show)
960+data RangeValue = RangeDateLte LessThanEqD
961+ | RangeDateLt LessThanD
962+ | RangeDateGte GreaterThanEqD
963+ | RangeDateGt GreaterThanD
964+ | RangeDateGtLt GreaterThanD LessThanD
965+ | RangeDateGteLte GreaterThanEqD LessThanEqD
966+ | RangeDateGteLt GreaterThanEqD LessThanD
967+ | RangeDateGtLte GreaterThanD LessThanEqD
968+ | RangeDoubleLte LessThanEq
969+ | RangeDoubleLt LessThan
970+ | RangeDoubleGte GreaterThanEq
971+ | RangeDoubleGt GreaterThan
972+ | RangeDoubleGtLt GreaterThan LessThan
973+ | RangeDoubleGteLte GreaterThanEq LessThanEq
974+ | RangeDoubleGteLt GreaterThanEq LessThan
975+ | RangeDoubleGtLte GreaterThan LessThanEq
978+rangeValueToPair :: RangeValue -> [Pair]
979+rangeValueToPair rv = case rv of
980+ RangeDateLte (LessThanEqD t) -> ["lte" .= t]
981+ RangeDateGte (GreaterThanEqD t) -> ["gte" .= t]
982+ RangeDateLt (LessThanD t) -> ["lt" .= t]
983+ RangeDateGt (GreaterThanD t) -> ["gt" .= t]
984+ RangeDateGteLte (GreaterThanEqD l) (LessThanEqD g) -> ["gte" .= l, "lte" .= g]
985+ RangeDateGtLte (GreaterThanD l) (LessThanEqD g) -> ["gt" .= l, "lte" .= g]
986+ RangeDateGteLt (GreaterThanEqD l) (LessThanD g) -> ["gte" .= l, "lt" .= g]
987+ RangeDateGtLt (GreaterThanD l) (LessThanD g) -> ["gt" .= l, "lt" .= g]
988+ RangeDoubleLte (LessThanEq t) -> ["lte" .= t]
989+ RangeDoubleGte (GreaterThanEq t) -> ["gte" .= t]
990+ RangeDoubleLt (LessThan t) -> ["lt" .= t]
991+ RangeDoubleGt (GreaterThan t) -> ["gt" .= t]
992+ RangeDoubleGteLte (GreaterThanEq l) (LessThanEq g) -> ["gte" .= l, "lte" .= g]
993+ RangeDoubleGtLte (GreaterThan l) (LessThanEq g) -> ["gt" .= l, "lte" .= g]
994+ RangeDoubleGteLt (GreaterThanEq l) (LessThan g) -> ["gte" .= l, "lt" .= g]
995+ RangeDoubleGtLt (GreaterThan l) (LessThan g) -> ["gt" .= l, "lt" .= g]
979data Term = Term { termField :: Text
997data Term = Term { termField :: Text
980 , termValue :: Text } deriving (Eq, Show)
998 , termValue :: Text } deriving (Eq, Show)
@@ -1338,24 +1356,11 @@ instance ToJSON Filter where
1338 object [fieldName .= fieldValue
1356 object [fieldName .= fieldValue
1339 , "_cache" .= cache]]
1357 , "_cache" .= cache]]
1341− toJSON (RangeFilter (FieldName fieldName) (Left halfRange) rangeExecution cache) =
1359+ toJSON (RangeFilter (FieldName fieldName) rangeValue rangeExecution cache) =
1343− object [fieldName .=
1344− object [rqFKey .= rqFVal]
1345− , "execution" .= toJSON rangeExecution
1346− , "_cache" .= cache]]
1348− (rqFKey, rqFVal) = halfRangeToKV halfRange
1350− toJSON (RangeFilter (FieldName fieldName) (Right range) rangeExecution cache) =
1351 object ["range" .=
1360 object ["range" .=
1352− object [fieldName .=
1361+ object [ fieldName .= object (rangeValueToPair rangeValue)
1353− object [lessKey .= lessVal
1354− , greaterKey .= greaterVal]
1355 , "execution" .= toJSON rangeExecution
1362 , "execution" .= toJSON rangeExecution
1356 , "_cache" .= cache]]
1363 , "_cache" .= cache]]
1358− (lessKey, lessVal, greaterKey, greaterVal) = rangeToKV range
1360 toJSON (RegexpFilter (FieldName fieldName)
1365 toJSON (RegexpFilter (FieldName fieldName)
1361 (Regexp regexText) flags (CacheName cacheName) cache (CacheKey cacheKey)) =
1366 (Regexp regexText) flags (CacheName cacheName) cache (CacheKey cacheKey)) =
@@ -1549,18 +1554,9 @@ instance ToJSON QueryStringQuery where
1551instance ToJSON RangeQuery where
1556instance ToJSON RangeQuery where
1552− toJSON (RangeQuery (FieldName fieldName) (Right range) boost) =
1557+ toJSON (RangeQuery (FieldName fieldName) range boost) =
1553− object [ fieldName .= conjoined ]
1554− where conjoined = [ "boost" .= toJSON boost
1555− , lessKey .= lessVal
1556− , greaterKey .= greaterVal ]
1557− (lessKey, lessVal, greaterKey, greaterVal) = rangeToKV range
1559− toJSON (RangeQuery (FieldName fieldName) (Left halfRange) boost) =
1560 object [ fieldName .= conjoined ]
1558 object [ fieldName .= conjoined ]
1561− where conjoined = [ "boost" .= toJSON boost
1559+ where conjoined = [ "boost" .= toJSON boost ] ++ (rangeValueToPair range)
1563− (rqKey, rqVal) = halfRangeToKV halfRange
1566instance ToJSON PrefixQuery where
1562instance ToJSON PrefixQuery where