@@ -152,8 +152,8 @@ module Database.Bloodhound.Types
152 , IndexSelection(..)
152 , IndexSelection(..)
153 , NodeSelection(..)
153 , NodeSelection(..)
154 , NodeSelector(..)
154 , NodeSelector(..)
155− , IndexOptimizationSettings(..)
155+ , ForceMergeIndexSettings(..)
156− , defaultIndexOptimizationSettings
156+ , defaultForceMergeIndexSettings
157 , TemplateName(..)
157 , TemplateName(..)
158 , TemplatePattern(..)
158 , TemplatePattern(..)
159 , MappingName(..)
159 , MappingName(..)
@@ -178,7 +178,6 @@ module Database.Bloodhound.Types
178 , BoostingQuery(..)
178 , BoostingQuery(..)
179 , CommonTermsQuery(..)
179 , CommonTermsQuery(..)
180 , DisMaxQuery(..)
180 , DisMaxQuery(..)
182 , FuzzyLikeThisQuery(..)
181 , FuzzyLikeThisQuery(..)
183 , FuzzyLikeFieldQuery(..)
182 , FuzzyLikeFieldQuery(..)
184 , FuzzyQuery(..)
183 , FuzzyQuery(..)
@@ -452,7 +451,7 @@ runBH e f = runReaderT (unBH f) e
452{-| 'Version' is embedded in 'Status' -}
451{-| 'Version' is embedded in 'Status' -}
453data Version = Version { number :: VersionNumber
452data Version = Version { number :: VersionNumber
454 , build_hash :: BuildHash
453 , build_hash :: BuildHash
455− , build_timestamp :: UTCTime
454+ , build_date :: UTCTime
456 , build_snapshot :: Bool
455 , build_snapshot :: Bool
457 , lucene_version :: VersionNumber } deriving (Eq, Read, Show, Generic, Typeable)
456 , lucene_version :: VersionNumber } deriving (Eq, Read, Show, Generic, Typeable)
@@ -466,11 +465,11 @@ newtype VersionNumber = VersionNumber { versionNumber :: Vers.Version
466 <http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/indices-status.html#indices-status>
465 <http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/indices-status.html#indices-status>
469−data Status = Status { ok :: Maybe Bool
468+data Status = Status { name :: Text
470− , status :: Int
469+ , cluster_name :: Text
471− , name :: Text
470+ , cluster_uuid :: Text
472− , version :: Version
471+ , version :: Version
473− , tagline :: Text } deriving (Eq, Read, Show, Generic)
472+ , tagline :: Text } deriving (Eq, Read, Show, Generic)
475{-| 'IndexSettings' is used to configure the shards and replicas when you create
474{-| 'IndexSettings' is used to configure the shards and replicas when you create
476 an Elasticsearch Index.
475 an Elasticsearch Index.
@@ -487,12 +486,12 @@ defaultIndexSettings :: IndexSettings
487defaultIndexSettings = IndexSettings (ShardCount 3) (ReplicaCount 2)
486defaultIndexSettings = IndexSettings (ShardCount 3) (ReplicaCount 2)
490−{-| 'IndexOptimizationSettings' is used to configure index optimization. See
489+{-| 'ForceMergeIndexSettings' is used to configure index optimization. See
491− <https://www.elastic.co/guide/en/elasticsearch/reference/1.7/indices-optimize.html>
490+ <https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-forcemerge.html>
492 for more info.
491 for more info.
494−data IndexOptimizationSettings =
493+data ForceMergeIndexSettings =
495− IndexOptimizationSettings { maxNumSegments :: Maybe Int
494+ ForceMergeIndexSettings { maxNumSegments :: Maybe Int
496 -- ^ Number of segments to optimize to. 1 will fully optimize the index. If omitted, the default behavior is to only optimize if the server deems it necessary.
495 -- ^ Number of segments to optimize to. 1 will fully optimize the index. If omitted, the default behavior is to only optimize if the server deems it necessary.
497 , onlyExpungeDeletes :: Bool
496 , onlyExpungeDeletes :: Bool
498 -- ^ Should the optimize process only expunge segments with deletes in them? If the purpose of the optimization is to free disk space, this should be set to True.
497 -- ^ Should the optimize process only expunge segments with deletes in them? If the purpose of the optimization is to free disk space, this should be set to True.
@@ -501,12 +500,12 @@ data IndexOptimizationSettings =
501 } deriving (Eq, Show, Generic, Typeable)
500 } deriving (Eq, Show, Generic, Typeable)
504−{-| 'defaultIndexOptimizationSettings' implements the default settings that
503+{-| 'defaultForceMergeIndexSettings' implements the default settings that
505 ElasticSearch uses for index optimization. 'maxNumSegments' is Nothing,
504 ElasticSearch uses for index optimization. 'maxNumSegments' is Nothing,
506 'onlyExpungeDeletes' is False, and flushAfterOptimize is True.
505 'onlyExpungeDeletes' is False, and flushAfterOptimize is True.
508−defaultIndexOptimizationSettings :: IndexOptimizationSettings
507+defaultForceMergeIndexSettings :: ForceMergeIndexSettings
509−defaultIndexOptimizationSettings = IndexOptimizationSettings Nothing False True
508+defaultForceMergeIndexSettings = ForceMergeIndexSettings Nothing False True
511{-| 'UpdatableIndexSetting' are settings which may be updated after an index is created.
510{-| 'UpdatableIndexSetting' are settings which may be updated after an index is created.
@@ -845,6 +844,8 @@ data SortSpec = DefaultSortSpec DefaultSort
845{-| 'DefaultSort' is usually the kind of 'SortSpec' you'll want. There's a
844{-| 'DefaultSort' is usually the kind of 'SortSpec' you'll want. There's a
846 'mkSort' convenience function for when you want to specify only the most
845 'mkSort' convenience function for when you want to specify only the most
847 common parameters.
846 common parameters.
848+ The `ignoreUnmapped`, when `Just` field is used to set the elastic 'unmapped_type'
849<http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-request-sort.html#search-request-sort>
850<http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-request-sort.html#search-request-sort>
@@ -852,7 +853,7 @@ data DefaultSort =
852 DefaultSort { sortFieldName :: FieldName
853 DefaultSort { sortFieldName :: FieldName
853 , sortOrder :: SortOrder
854 , sortOrder :: SortOrder
854 -- default False
855 -- default False
855− , ignoreUnmapped :: Bool
856+ , ignoreUnmapped :: Maybe Text
856 , sortMode :: Maybe SortMode
857 , sortMode :: Maybe SortMode
857 , missingSort :: Maybe Missing
858 , missingSort :: Maybe Missing
858 , nestedFilter :: Maybe Filter } deriving (Eq, Read, Show, Generic, Typeable)
859 , nestedFilter :: Maybe Filter } deriving (Eq, Read, Show, Generic, Typeable)
@@ -887,7 +888,7 @@ data SortMode = SortMin
887 that you can concisely describe the usual kind of 'SortSpec's you want.
888 that you can concisely describe the usual kind of 'SortSpec's you want.
889mkSort :: FieldName -> SortOrder -> DefaultSort
890mkSort :: FieldName -> SortOrder -> DefaultSort
890−mkSort fieldName sOrder = DefaultSort fieldName sOrder False Nothing Nothing Nothing
891+mkSort fieldName sOrder = DefaultSort fieldName sOrder Nothing Nothing Nothing Nothing
892{-| 'Cache' is for telling ES whether it should cache a 'Filter' not.
893{-| 'Cache' is for telling ES whether it should cache a 'Filter' not.
893 'Query's cannot be cached.
894 'Query's cannot be cached.
@@ -1100,10 +1101,6 @@ data Search = Search { queryBody :: Maybe Query
1101data SearchType = SearchTypeQueryThenFetch
1102data SearchType = SearchTypeQueryThenFetch
1102 | SearchTypeDfsQueryThenFetch
1103 | SearchTypeDfsQueryThenFetch
1105− | SearchTypeQueryAndFetch
1106− | SearchTypeDfsQueryAndFetch
1107 deriving (Eq, Read, Show, Generic, Typeable)
1104 deriving (Eq, Read, Show, Generic, Typeable)
1109data Source =
1106data Source =
@@ -1183,10 +1180,8 @@ data Query =
1183 | QueryBoolQuery BoolQuery
1180 | QueryBoolQuery BoolQuery
1184 | QueryBoostingQuery BoostingQuery
1181 | QueryBoostingQuery BoostingQuery
1185 | QueryCommonTermsQuery CommonTermsQuery
1182 | QueryCommonTermsQuery CommonTermsQuery
1186− | ConstantScoreFilter Filter Boost
1187 | ConstantScoreQuery Query Boost
1183 | ConstantScoreQuery Query Boost
1188 | QueryDisMaxQuery DisMaxQuery
1184 | QueryDisMaxQuery DisMaxQuery
1189− | QueryFilteredQuery FilteredQuery
1190 | QueryFuzzyLikeThisQuery FuzzyLikeThisQuery
1185 | QueryFuzzyLikeThisQuery FuzzyLikeThisQuery
1191 | QueryFuzzyLikeFieldQuery FuzzyLikeFieldQuery
1186 | QueryFuzzyLikeFieldQuery FuzzyLikeFieldQuery
1192 | QueryFuzzyQuery FuzzyQuery
1187 | QueryFuzzyQuery FuzzyQuery
@@ -1203,8 +1198,21 @@ data Query =
1203 | QuerySimpleQueryStringQuery SimpleQueryStringQuery
1198 | QuerySimpleQueryStringQuery SimpleQueryStringQuery
1204 | QueryRangeQuery RangeQuery
1199 | QueryRangeQuery RangeQuery
1205 | QueryRegexpQuery RegexpQuery
1200 | QueryRegexpQuery RegexpQuery
1201+ | QueryExistsQuery FieldName
1202+ | QueryMatchNoneQuery
1206 deriving (Eq, Read, Show, Generic, Typeable)
1203 deriving (Eq, Read, Show, Generic, Typeable)
1205+-- | As of Elastic 2.0, 'Filters' are just 'Queries' housed in a Bool Query, and
1206+-- flagged in a different context.
1207+newtype Filter = Filter { unFilter :: Query }
1208+ deriving (Eq, Read, Show, Generic, Typeable)
1210+instance ToJSON Filter where
1211+ toJSON = toJSON . unFilter
1213+instance FromJSON Filter where
1214+ parseJSON v = Filter <$> parseJSON v
1208data RegexpQuery =
1216data RegexpQuery =
1209 RegexpQuery { regexpQueryField :: FieldName
1217 RegexpQuery { regexpQueryField :: FieldName
1210 , regexpQuery :: Regexp
1218 , regexpQuery :: Regexp
@@ -1385,11 +1393,6 @@ data FuzzyLikeThisQuery =
1385 , fuzzyLikeAnalyzer :: Maybe Analyzer
1393 , fuzzyLikeAnalyzer :: Maybe Analyzer
1386 } deriving (Eq, Read, Show, Generic, Typeable)
1394 } deriving (Eq, Read, Show, Generic, Typeable)
1388−data FilteredQuery =
1390− { filteredQuery :: Query
1391− , filteredFilter :: Filter } deriving (Eq, Read, Show, Generic, Typeable)
1393data DisMaxQuery =
1396data DisMaxQuery =
1394 DisMaxQuery { disMaxQueries :: [Query]
1397 DisMaxQuery { disMaxQueries :: [Query]
1395 -- default 0.0
1398 -- default 0.0
@@ -1450,6 +1453,7 @@ data MultiMatchQueryType =
1451data BoolQuery =
1454data BoolQuery =
1452 BoolQuery { boolQueryMustMatch :: [Query]
1455 BoolQuery { boolQueryMustMatch :: [Query]
1456+ , boolQueryFilter :: [Filter]
1453 , boolQueryMustNotMatch :: [Query]
1457 , boolQueryMustNotMatch :: [Query]
1454 , boolQueryShouldMatch :: [Query]
1458 , boolQueryShouldMatch :: [Query]
1455 , boolQueryMinimumShouldMatch :: Maybe MinimumMatch
1459 , boolQueryMinimumShouldMatch :: Maybe MinimumMatch
@@ -1457,9 +1461,9 @@ data BoolQuery =
1457 , boolQueryDisableCoord :: Maybe DisableCoord
1461 , boolQueryDisableCoord :: Maybe DisableCoord
1458 } deriving (Eq, Read, Show, Generic, Typeable)
1462 } deriving (Eq, Read, Show, Generic, Typeable)
1460−mkBoolQuery :: [Query] -> [Query] -> [Query] -> BoolQuery
1464+mkBoolQuery :: [Query] -> [Filter] -> [Query] -> [Query] -> BoolQuery
1461−mkBoolQuery must mustNot should =
1465+mkBoolQuery must filter mustNot should =
1462− BoolQuery must mustNot should Nothing Nothing Nothing
1466+ BoolQuery must filter mustNot should Nothing Nothing Nothing
1464data BoostingQuery =
1468data BoostingQuery =
1465 BoostingQuery { positiveQuery :: Query
1469 BoostingQuery { positiveQuery :: Query
@@ -1487,26 +1491,6 @@ data MinimumMatchHighLow =
1487 MinimumMatchHighLow { lowFreq :: MinimumMatch
1491 MinimumMatchHighLow { lowFreq :: MinimumMatch
1488 , highFreq :: MinimumMatch } deriving (Eq, Read, Show, Generic, Typeable)
1492 , highFreq :: MinimumMatch } deriving (Eq, Read, Show, Generic, Typeable)
1490−data Filter = AndFilter [Filter] Cache
1491− | OrFilter [Filter] Cache
1492− | NotFilter Filter Cache
1494− | BoolFilter BoolMatch
1495− | ExistsFilter FieldName -- always cached
1496− | GeoBoundingBoxFilter GeoBoundingBoxConstraint
1497− | GeoDistanceFilter GeoPoint Distance DistanceType OptimizeBbox Cache
1498− | GeoDistanceRangeFilter GeoPoint DistanceRange
1499− | GeoPolygonFilter FieldName [LatLon]
1500− | IdsFilter MappingName [DocId]
1502− | MissingFilter FieldName Existence NullValue
1503− | PrefixFilter FieldName PrefixValue Cache
1504− | QueryFilter Query Cache
1505− | RangeFilter FieldName RangeValue RangeExecution Cache
1506− | RegexpFilter FieldName Regexp RegexpFlags CacheName Cache CacheKey
1507− | TermFilter Term Cache
1508− deriving (Eq, Read, Show, Generic, Typeable)
1510data ZeroTermsQuery = ZeroTermsNone
1494data ZeroTermsQuery = ZeroTermsNone
1511 | ZeroTermsAll deriving (Eq, Read, Show, Generic, Typeable)
1495 | ZeroTermsAll deriving (Eq, Read, Show, Generic, Typeable)
@@ -1713,8 +1697,7 @@ data Interval = Year
1715 | Minute
1699 | Minute
1717− | FractionalInterval Float TimeInterval deriving (Eq, Read, Show, Generic, Typeable)
1700+ | Second deriving (Eq, Read, Show, Generic, Typeable)
1719data Aggregation = TermsAgg TermsAggregation
1702data Aggregation = TermsAgg TermsAggregation
1720 | CardinalityAgg CardinalityAggregation
1703 | CardinalityAgg CardinalityAggregation
@@ -1808,7 +1791,7 @@ mkCardinalityAggregation t = CardinalityAggregation t Nothing
1808instance ToJSON Version where
1791instance ToJSON Version where
1809 toJSON Version {..} = object ["number" .= number
1792 toJSON Version {..} = object ["number" .= number
1810 ,"build_hash" .= build_hash
1793 ,"build_hash" .= build_hash
1811− ,"build_timestamp" .= build_timestamp
1794+ ,"build_date" .= build_date
1812 ,"build_snapshot" .= build_snapshot
1795 ,"build_snapshot" .= build_snapshot
1813 ,"lucene_version" .= lucene_version]
1796 ,"lucene_version" .= lucene_version]
@@ -1817,7 +1800,7 @@ instance FromJSON Version where
1817 where parse o = Version
1800 where parse o = Version
1818 <$> o .: "number"
1801 <$> o .: "number"
1819 <*> o .: "build_hash"
1802 <*> o .: "build_hash"
1820− <*> o .: "build_timestamp"
1803+ <*> o .: "build_date"
1821 <*> o .: "build_snapshot"
1804 <*> o .: "build_snapshot"
1822 <*> o .: "lucene_version"
1805 <*> o .: "lucene_version"
@@ -1860,7 +1843,6 @@ instance ToJSON Interval where
1860 toJSON Hour = "hour"
1843 toJSON Hour = "hour"
1861 toJSON Minute = "minute"
1844 toJSON Minute = "minute"
1862 toJSON Second = "second"
1845 toJSON Second = "second"
1863− toJSON (FractionalInterval fraction interval) = toJSON $ show fraction ++ show interval
1865instance Show TimeInterval where
1847instance Show TimeInterval where
1866 show Weeks = "w"
1848 show Weeks = "w"
@@ -2058,193 +2040,6 @@ instance FromJSON POSIXMS where
2058 where parse n = let n' = truncate n :: Integer
2040 where parse n = let n' = truncate n :: Integer
2059 in POSIXMS (posixSecondsToUTCTime (fromInteger (n' `div` 1000)))
2041 in POSIXMS (posixSecondsToUTCTime (fromInteger (n' `div` 1000)))
2061−instance Monoid Filter where
2062− mempty = IdentityFilter
2063− mappend a b = AndFilter [a, b] defaultCache
2065−instance Seminearring Filter where
2066− a <||> b = OrFilter [a, b] defaultCache
2068−instance ToJSON Filter where
2069− toJSON (AndFilter filters cache) =
2071− object [ "filters" .= fmap toJSON filters
2072− , "_cache" .= cache]]
2074− toJSON (OrFilter filters cache) =
2076− object [ "filters" .= fmap toJSON filters
2077− , "_cache" .= cache]]
2079− toJSON (NotFilter notFilter cache) =
2081− object ["filter" .= notFilter
2082− , "_cache" .= cache]]
2084− toJSON (IdentityFilter) =
2085− object ["match_all" .= object []]
2087− toJSON (TermFilter (Term termFilterField termFilterValue) cache) =
2088− object ["term" .= object base]
2089− where base = [termFilterField .= termFilterValue,
2092− toJSON (ExistsFilter (FieldName fieldName)) =
2093− object ["exists" .= object
2094− ["field" .= fieldName]]
2096− toJSON (BoolFilter boolMatch) =
2097− object ["bool" .= boolMatch]
2099− toJSON (GeoBoundingBoxFilter bbConstraint) =
2100− object ["geo_bounding_box" .= bbConstraint]
2102− toJSON (GeoDistanceFilter (GeoPoint (FieldName distanceGeoField) geoDistLatLon)
2103− distance distanceType optimizeBbox cache) =
2104− object ["geo_distance" .=
2105− object ["distance" .= distance
2106− , "distance_type" .= distanceType
2107− , "optimize_bbox" .= optimizeBbox
2108− , distanceGeoField .= geoDistLatLon
2109− , "_cache" .= cache]]
2111− toJSON (GeoDistanceRangeFilter (GeoPoint (FieldName gddrField) drLatLon)
2112− (DistanceRange geoDistRangeDistFrom drDistanceTo)) =
2113− object ["geo_distance_range" .=
2114− object ["from" .= geoDistRangeDistFrom
2115− , "to" .= drDistanceTo
2116− , gddrField .= drLatLon]]
2118− toJSON (GeoPolygonFilter (FieldName geoPolygonFilterField) latLons) =
2119− object ["geo_polygon" .=
2120− object [geoPolygonFilterField .=
2121− object ["points" .= fmap toJSON latLons]]]
2123− toJSON (IdsFilter (MappingName mappingName) values) =
2125− object ["type" .= mappingName
2126− , "values" .= fmap unpackId values]]
2128− toJSON (LimitFilter limit) =
2129− object ["limit" .= object ["value" .= limit]]
2131− toJSON (MissingFilter (FieldName fieldName) (Existence existence) (NullValue nullValue)) =
2132− object ["missing" .=
2133− object ["field" .= fieldName
2134− , "existence" .= existence
2135− , "null_value" .= nullValue]]
2137− toJSON (PrefixFilter (FieldName fieldName) fieldValue cache) =
2138− object ["prefix" .=
2139− object [fieldName .= fieldValue
2140− , "_cache" .= cache]]
2142− toJSON (QueryFilter query False) =
2143− object ["query" .= toJSON query ]
2144− toJSON (QueryFilter query True) =
2145− object ["fquery" .=
2146− object [ "query" .= toJSON query
2147− , "_cache" .= True ]]
2149− toJSON (RangeFilter (FieldName fieldName) rangeValue rangeExecution cache) =
2151− object [ fieldName .= object (rangeValueToPair rangeValue)
2152− , "execution" .= rangeExecution
2153− , "_cache" .= cache]]
2155− toJSON (RegexpFilter (FieldName fieldName)
2156− (Regexp regexText) flags (CacheName cacheName) cache (CacheKey cacheKey)) =
2157− object ["regexp" .=
2158− object [fieldName .=
2159− object ["value" .= regexText
2160− , "flags" .= flags]
2161− , "_name" .= cacheName
2162− , "_cache" .= cache
2163− , "_cache_key" .= cacheKey]]
2165−instance FromJSON Filter where
2166− parseJSON = withObject "Filter" parse
2167− where parse o = andFilter `taggedWith` "and"
2168− <|> orFilter `taggedWith` "or"
2169− <|> notFilter `taggedWith` "not"
2170− <|> identityFilter `taggedWith` "match_all"
2171− <|> boolFilter `taggedWith` "bool"
2172− <|> existsFilter `taggedWith` "exists"
2173− <|> geoBoundingBoxFilter `taggedWith` "geo_bounding_box"
2174− <|> geoDistanceFilter `taggedWith` "geo_distance"
2175− <|> geoDistanceRangeFilter `taggedWith` "geo_distance_range"
2176− <|> geoPolygonFilter `taggedWith` "geo_polygon"
2177− <|> idsFilter `taggedWith` "ids"
2178− <|> limitFilter `taggedWith` "limit"
2179− <|> missingFilter `taggedWith` "missing"
2180− <|> prefixFilter `taggedWith` "prefix"
2181− <|> queryFilter `taggedWith` "query"
2182− <|> fqueryFilter `taggedWith` "fquery"
2183− <|> rangeFilter `taggedWith` "range"
2184− <|> regexpFilter `taggedWith` "regexp"
2185− <|> termFilter `taggedWith` "term"
2186− where taggedWith parser k = parser =<< o .: k
2187− andFilter o = AndFilter <$> o .: "filters"
2188− <*> o .:? "_cache" .!= defaultCache
2189− orFilter o = OrFilter <$> o .: "filters"
2190− <*> o .:? "_cache" .!= defaultCache
2191− notFilter o = NotFilter <$> o .: "filter"
2192− <*> o .: "_cache" .!= defaultCache
2193− identityFilter :: Object -> Parser Filter
2195− | HM.null m = pure IdentityFilter
2196− | otherwise = fail ("Identityfilter expected empty object but got " <> show m)
2197− boolFilter = pure . BoolFilter
2198− existsFilter o = ExistsFilter <$> o .: "field"
2199− geoBoundingBoxFilter = pure . GeoBoundingBoxFilter
2200− geoDistanceFilter o = do
2201− case HM.toList (deleteSeveral ["distance", "distance_type", "optimize_bbox", "_cache"] o) of
2203− gp <- GeoPoint (FieldName fn) <$> parseJSON v
2204− GeoDistanceFilter gp <$> o .: "distance"
2205− <*> o .: "distance_type"
2206− <*> o .: "optimize_bbox"
2207− <*> o .:? "_cache" .!= defaultCache
2208− _ -> fail "Could not find GeoDistanceFilter field name"
2209− geoDistanceRangeFilter o = do
2210− case HM.toList (deleteSeveral ["from", "to"] o) of
2212− gp <- GeoPoint (FieldName fn) <$> parseJSON v
2213− rng <- DistanceRange <$> o .: "from" <*> o .: "to"
2214− return (GeoDistanceRangeFilter gp rng)
2215− _ -> fail "Could not find GeoDistanceRangeFilter field name"
2216− geoPolygonFilter = fieldTagged $ \fn o -> GeoPolygonFilter fn <$> o .: "points"
2217− idsFilter o = IdsFilter <$> o .: "type"
2219− limitFilter o = LimitFilter <$> o .: "value"
2220− missingFilter o = MissingFilter <$> o .: "field"
2221− <*> o .: "existence"
2222− <*> o .: "null_value"
2223− prefixFilter o = case HM.toList (HM.delete "_cache" o) of
2224− [(fn, String v)] -> PrefixFilter (FieldName fn) v <$> o .:? "_cache" .!= defaultCache
2225− _ -> fail "Could not parse PrefixFilter"
2227− queryFilter q = pure (QueryFilter q False)
2228− fqueryFilter o = QueryFilter <$> o .: "query" <*> pure True
2229− rangeFilter o = case HM.toList (deleteSeveral ["execution", "_cache"] o) of
2230− [(fn, v)] -> RangeFilter (FieldName fn)
2232− <*> o .: "execution"
2233− <*> o .:? "_cache" .!= defaultCache
2234− _ -> fail "Could not find field name for RangeFilter"
2235− regexpFilter o = case HM.toList (deleteSeveral ["_name", "_cache", "_cache_key"] o) of
2236− [(fn, Object o')] -> RegexpFilter (FieldName fn)
2240− <*> o .:? "_cache" .!= defaultCache
2241− <*> o .: "_cache_key"
2242− _ -> fail "Could not find field name for RegexpFilter"
2243− termFilter o = case HM.toList (HM.delete "_cache" o) of
2244− [(termField, String termVal)] -> TermFilter (Term termField termVal)
2245− <$> o .:? "_cache" .!= defaultCache
2246− _ -> fail "Could not find term field for TermFilter"
2248fieldTagged :: Monad m => (FieldName -> Object -> m a) -> Object -> m a
2043fieldTagged :: Monad m => (FieldName -> Object -> m a) -> Object -> m a
2249fieldTagged f o = case HM.toList o of
2044fieldTagged f o = case HM.toList o of
2250 [(k, Object o')] -> f (FieldName k) o'
2045 [(k, Object o')] -> f (FieldName k) o'
@@ -2291,10 +2086,6 @@ instance ToJSON Query where
2291 toJSON (QueryCommonTermsQuery commonTermsQuery) =
2086 toJSON (QueryCommonTermsQuery commonTermsQuery) =
2292 object [ "common" .= commonTermsQuery ]
2087 object [ "common" .= commonTermsQuery ]
2294− toJSON (ConstantScoreFilter csFilter boost) =
2295− object ["constant_score" .= object ["filter" .= csFilter
2296− , "boost" .= boost]]
2298 toJSON (ConstantScoreQuery query boost) =
2089 toJSON (ConstantScoreQuery query boost) =
2299 object ["constant_score" .= object ["query" .= query
2090 object ["constant_score" .= object ["query" .= query
2300 , "boost" .= boost]]
2091 , "boost" .= boost]]
@@ -2302,9 +2093,6 @@ instance ToJSON Query where
2302 toJSON (QueryDisMaxQuery disMaxQuery) =
2093 toJSON (QueryDisMaxQuery disMaxQuery) =
2303 object [ "dis_max" .= disMaxQuery ]
2094 object [ "dis_max" .= disMaxQuery ]
2305− toJSON (QueryFilteredQuery qFilteredQuery) =
2306− object [ "filtered" .= qFilteredQuery ]
2308 toJSON (QueryFuzzyLikeThisQuery fuzzyQuery) =
2096 toJSON (QueryFuzzyLikeThisQuery fuzzyQuery) =
2309 object [ "fuzzy_like_this" .= fuzzyQuery ]
2097 object [ "fuzzy_like_this" .= fuzzyQuery ]
@@ -2347,6 +2135,13 @@ instance ToJSON Query where
2347 toJSON (QuerySimpleQueryStringQuery query) =
2135 toJSON (QuerySimpleQueryStringQuery query) =
2348 object [ "simple_query_string" .= query ]
2136 object [ "simple_query_string" .= query ]
2138+ toJSON (QueryExistsQuery (FieldName fieldName)) =
2139+ object ["exists" .= object
2140+ ["field" .= fieldName]
2142+ toJSON QueryMatchNoneQuery =
2143+ object ["match_none" .= object []]
2350instance FromJSON Query where
2145instance FromJSON Query where
2351 parseJSON v = withObject "Query" parse v
2146 parseJSON v = withObject "Query" parse v
2352 where parse o = termQuery `taggedWith` "term"
2147 where parse o = termQuery `taggedWith` "term"
@@ -2358,10 +2153,8 @@ instance FromJSON Query where
2358 <|> queryBoolQuery `taggedWith` "bool"
2153 <|> queryBoolQuery `taggedWith` "bool"
2359 <|> queryBoostingQuery `taggedWith` "boosting"
2154 <|> queryBoostingQuery `taggedWith` "boosting"
2360 <|> queryCommonTermsQuery `taggedWith` "common"
2155 <|> queryCommonTermsQuery `taggedWith` "common"
2361− <|> constantScoreFilter `taggedWith` "constant_score"
2362 <|> constantScoreQuery `taggedWith` "constant_score"
2156 <|> constantScoreQuery `taggedWith` "constant_score"
2363 <|> queryDisMaxQuery `taggedWith` "dis_max"
2157 <|> queryDisMaxQuery `taggedWith` "dis_max"
2364− <|> queryFilteredQuery `taggedWith` "filtered"
2365 <|> queryFuzzyLikeThisQuery `taggedWith` "fuzzy_like_this"
2158 <|> queryFuzzyLikeThisQuery `taggedWith` "fuzzy_like_this"
2366 <|> queryFuzzyLikeFieldQuery `taggedWith` "fuzzy_like_this_field"
2159 <|> queryFuzzyLikeFieldQuery `taggedWith` "fuzzy_like_this_field"
2367 <|> queryFuzzyQuery `taggedWith` "fuzzy"
2160 <|> queryFuzzyQuery `taggedWith` "fuzzy"
@@ -2393,16 +2186,11 @@ instance FromJSON Query where
2393 queryBoolQuery = pure . QueryBoolQuery
2186 queryBoolQuery = pure . QueryBoolQuery
2394 queryBoostingQuery = pure . QueryBoostingQuery
2187 queryBoostingQuery = pure . QueryBoostingQuery
2395 queryCommonTermsQuery = pure . QueryCommonTermsQuery
2188 queryCommonTermsQuery = pure . QueryCommonTermsQuery
2396− constantScoreFilter o = case HM.lookup "filter" o of
2397− Just x -> ConstantScoreFilter <$> parseJSON x
2399− _ -> fail "Does not appear to be a ConstantScoreFilter"
2400 constantScoreQuery o = case HM.lookup "query" o of
2189 constantScoreQuery o = case HM.lookup "query" o of
2401 Just x -> ConstantScoreQuery <$> parseJSON x
2190 Just x -> ConstantScoreQuery <$> parseJSON x
2402 <*> o .: "boost"
2191 <*> o .: "boost"
2403 _ -> fail "Does not appear to be a ConstantScoreQuery"
2192 _ -> fail "Does not appear to be a ConstantScoreQuery"
2404 queryDisMaxQuery = pure . QueryDisMaxQuery
2193 queryDisMaxQuery = pure . QueryDisMaxQuery
2405− queryFilteredQuery = pure . QueryFilteredQuery
2406 queryFuzzyLikeThisQuery = pure . QueryFuzzyLikeThisQuery
2194 queryFuzzyLikeThisQuery = pure . QueryFuzzyLikeThisQuery
2407 queryFuzzyLikeFieldQuery = pure . QueryFuzzyLikeFieldQuery
2195 queryFuzzyLikeFieldQuery = pure . QueryFuzzyLikeFieldQuery
2408 queryFuzzyQuery = pure . QueryFuzzyQuery
2196 queryFuzzyQuery = pure . QueryFuzzyQuery
@@ -2417,6 +2205,7 @@ instance FromJSON Query where
2417 queryRangeQuery = pure . QueryRangeQuery
2205 queryRangeQuery = pure . QueryRangeQuery
2418 queryRegexpQuery = pure . QueryRegexpQuery
2206 queryRegexpQuery = pure . QueryRegexpQuery
2419 querySimpleQueryStringQuery = pure . QuerySimpleQueryStringQuery
2207 querySimpleQueryStringQuery = pure . QuerySimpleQueryStringQuery
2208+ queryExistsQuery o = QueryExistsQuery <$> o .: "field"
2422omitNulls :: [(Text, Value)] -> Value
2211omitNulls :: [(Text, Value)] -> Value
@@ -2425,7 +2214,6 @@ omitNulls = object . filter notNull where
2425 notNull (_, Array a) = (not . V.null) a
2214 notNull (_, Array a) = (not . V.null) a
2426 notNull _ = True
2215 notNull _ = True
2429instance ToJSON SimpleQueryStringQuery where
2217instance ToJSON SimpleQueryStringQuery where
2430 toJSON SimpleQueryStringQuery {..} =
2218 toJSON SimpleQueryStringQuery {..} =
2431 omitNulls (base ++ maybeAdd)
2219 omitNulls (base ++ maybeAdd)
@@ -2814,17 +2602,6 @@ instance FromJSON FuzzyLikeThisQuery where
2814 <*> o .: "boost"
2602 <*> o .: "boost"
2815 <*> o .:? "analyzer"
2603 <*> o .:? "analyzer"
2817−instance ToJSON FilteredQuery where
2818− toJSON (FilteredQuery query fFilter) =
2819− object [ "query" .= query
2820− , "filter" .= fFilter ]
2822−instance FromJSON FilteredQuery where
2823− parseJSON = withObject "FilteredQuery" parse
2824− where parse o = FilteredQuery
2828instance ToJSON DisMaxQuery where
2605instance ToJSON DisMaxQuery where
2829 toJSON (DisMaxQuery queries tiebreaker boost) =
2606 toJSON (DisMaxQuery queries tiebreaker boost) =
2830 omitNulls base
2607 omitNulls base
@@ -2896,9 +2673,10 @@ instance FromJSON BoostingQuery where
2896 <*> o .: "negative_boost"
2673 <*> o .: "negative_boost"
2898instance ToJSON BoolQuery where
2675instance ToJSON BoolQuery where
2899− toJSON (BoolQuery mustM notM shouldM bqMin boost disableCoord) =
2676+ toJSON (BoolQuery mustM filterM notM shouldM bqMin boost disableCoord) =
2900 omitNulls base
2677 omitNulls base
2901 where base = [ "must" .= mustM
2678 where base = [ "must" .= mustM
2679+ , "filter" .= filterM
2902 , "must_not" .= notM
2680 , "must_not" .= notM
2903 , "should" .= shouldM
2681 , "should" .= shouldM
2904 , "minimum_should_match" .= bqMin
2682 , "minimum_should_match" .= bqMin
@@ -2909,6 +2687,7 @@ instance FromJSON BoolQuery where
2909 parseJSON = withObject "BoolQuery" parse
2687 parseJSON = withObject "BoolQuery" parse
2910 where parse o = BoolQuery
2688 where parse o = BoolQuery
2911 <$> o .:? "must" .!= []
2689 <$> o .:? "must" .!= []
2690+ <*> o .:? "filter" .!= []
2912 <*> o .:? "must_not" .!= []
2691 <*> o .:? "must_not" .!= []
2913 <*> o .:? "should" .!= []
2692 <*> o .:? "should" .!= []
2914 <*> o .:? "minimum_should_match"
2693 <*> o .:? "minimum_should_match"
@@ -3023,9 +2802,9 @@ instance FromJSON MatchQueryType where
3024instance FromJSON Status where
2803instance FromJSON Status where
3025 parseJSON (Object v) = Status <$>
2804 parseJSON (Object v) = Status <$>
3027− (v .:? "status" .!= 200) <*>
3028 v .: "name" <*>
2805 v .: "name" <*>
2806+ v .: "cluster_name" <*>
2807+ v .: "cluster_uuid" <*>
3029 v .: "version" <*>
2808 v .: "version" <*>
3030 v .: "tagline"
2809 v .: "tagline"
3031 parseJSON _ = empty
2810 parseJSON _ = empty
@@ -3355,9 +3134,8 @@ instance FromJSON SearchAliasRouting where
3355 where parse t = SearchAliasRouting <$> parseNEJSON (String <$> T.splitOn "," t)
3134 where parse t = SearchAliasRouting <$> parseNEJSON (String <$> T.splitOn "," t)
3357instance ToJSON Search where
3136instance ToJSON Search where
3358− toJSON (Search query sFilter sort searchAggs highlight sTrackSortScores sFrom sSize _ sFields sSource) =
3137+ toJSON (Search mquery sFilter sort searchAggs highlight sTrackSortScores sFrom sSize _ sFields sSource) =
3359− omitNulls [ "query" .= query
3138+ omitNulls [ "query" .= query'
3360− , "filter" .= sFilter
3361 , "sort" .= sort
3139 , "sort" .= sort
3362 , "aggregations" .= searchAggs
3140 , "aggregations" .= searchAggs
3363 , "highlight" .= highlight
3141 , "highlight" .= highlight
@@ -3366,12 +3144,15 @@ instance ToJSON Search where
3366 , "track_scores" .= sTrackSortScores
3144 , "track_scores" .= sTrackSortScores
3367 , "fields" .= sFields
3145 , "fields" .= sFields
3368 , "_source" .= sSource]
3146 , "_source" .= sSource]
3148+ where query' = case sFilter of
3150+ Just x -> Just . QueryBoolQuery $ mkBoolQuery (maybeToList mquery) [x] [] []
3371instance ToJSON Source where
3152instance ToJSON Source where
3372 toJSON NoSource = toJSON False
3153 toJSON NoSource = toJSON False
3373 toJSON (SourcePatterns patterns) = toJSON patterns
3154 toJSON (SourcePatterns patterns) = toJSON patterns
3374− toJSON (SourceIncludeExclude incl excl) = object [ "include" .= incl, "exclude" .= excl ]
3155+ toJSON (SourceIncludeExclude incl excl) = object [ "includes" .= incl, "excludes" .= excl ]
3376instance ToJSON PatternOrPatterns where
3157instance ToJSON PatternOrPatterns where
3377 toJSON (PopPattern pattern) = toJSON pattern
3158 toJSON (PopPattern pattern) = toJSON pattern
@@ -3480,7 +3261,7 @@ instance ToJSON SortSpec where
3480 dsSortMode dsMissingSort dsNestedFilter)) =
3261 dsSortMode dsMissingSort dsNestedFilter)) =
3481 object [dsSortFieldName .= omitNulls base] where
3262 object [dsSortFieldName .= omitNulls base] where
3482 base = [ "order" .= dsSortOrder
3263 base = [ "order" .= dsSortOrder
3483− , "ignore_unmapped" .= dsIgnoreUnmapped
3264+ , "unmapped_type" .= dsIgnoreUnmapped
3484 , "mode" .= dsSortMode
3265 , "mode" .= dsSortMode
3485 , "missing" .= dsMissingSort
3266 , "missing" .= dsMissingSort
3486 , "nested_filter" .= dsNestedFilter ]
3267 , "nested_filter" .= dsNestedFilter ]
@@ -3887,7 +3668,7 @@ data NodeStats = NodeStats {
3887 , nodeStatsHTTP :: NodeHTTPStats
3668 , nodeStatsHTTP :: NodeHTTPStats
3888 , nodeStatsTransport :: NodeTransportStats
3669 , nodeStatsTransport :: NodeTransportStats
3889 , nodeStatsFS :: NodeFSStats
3670 , nodeStatsFS :: NodeFSStats
3890− , nodeStatsNetwork :: NodeNetworkStats
3671+ , nodeStatsNetwork :: Maybe NodeNetworkStats
3891 , nodeStatsThreadPool :: NodeThreadPoolsStats
3672 , nodeStatsThreadPool :: NodeThreadPoolsStats
3892 , nodeStatsJVM :: NodeJVMStats
3673 , nodeStatsJVM :: NodeJVMStats
3893 , nodeStatsProcess :: NodeProcessStats
3674 , nodeStatsProcess :: NodeProcessStats
@@ -3940,7 +3721,7 @@ data NodeDataPathStats = NodeDataPathStats {
3940 , nodeDataPathFree :: Bytes
3721 , nodeDataPathFree :: Bytes
3941 , nodeDataPathTotal :: Bytes
3722 , nodeDataPathTotal :: Bytes
3942 , nodeDataPathType :: Maybe Text
3723 , nodeDataPathType :: Maybe Text
3943− , nodeDataPathDevice :: Text
3724+ , nodeDataPathDevice :: Maybe Text
3944 , nodeDataPathMount :: Text
3725 , nodeDataPathMount :: Text
3945 , nodeDataPathPath :: Text
3726 , nodeDataPathPath :: Text
3946 } deriving (Eq, Show, Generic, Typeable)
3727 } deriving (Eq, Show, Generic, Typeable)
@@ -3979,17 +3760,17 @@ data NodeThreadPoolsStats = NodeThreadPoolsStats {
3979 , nodeThreadPoolsStatsGet :: NodeThreadPoolStats
3760 , nodeThreadPoolsStatsGet :: NodeThreadPoolStats
3980 , nodeThreadPoolsStatsManagement :: NodeThreadPoolStats
3761 , nodeThreadPoolsStatsManagement :: NodeThreadPoolStats
3981 , nodeThreadPoolsStatsFetchShardStore :: Maybe NodeThreadPoolStats
3762 , nodeThreadPoolsStatsFetchShardStore :: Maybe NodeThreadPoolStats
3982− , nodeThreadPoolsStatsOptimize :: NodeThreadPoolStats
3763+ , nodeThreadPoolsStatsOptimize :: Maybe NodeThreadPoolStats
3983 , nodeThreadPoolsStatsFlush :: NodeThreadPoolStats
3764 , nodeThreadPoolsStatsFlush :: NodeThreadPoolStats
3984 , nodeThreadPoolsStatsSearch :: NodeThreadPoolStats
3765 , nodeThreadPoolsStatsSearch :: NodeThreadPoolStats
3985 , nodeThreadPoolsStatsWarmer :: NodeThreadPoolStats
3766 , nodeThreadPoolsStatsWarmer :: NodeThreadPoolStats
3986 , nodeThreadPoolsStatsGeneric :: NodeThreadPoolStats
3767 , nodeThreadPoolsStatsGeneric :: NodeThreadPoolStats
3987− , nodeThreadPoolsStatsSuggest :: NodeThreadPoolStats
3768+ , nodeThreadPoolsStatsSuggest :: Maybe NodeThreadPoolStats
3988 , nodeThreadPoolsStatsRefresh :: NodeThreadPoolStats
3769 , nodeThreadPoolsStatsRefresh :: NodeThreadPoolStats
3989 , nodeThreadPoolsStatsIndex :: NodeThreadPoolStats
3770 , nodeThreadPoolsStatsIndex :: NodeThreadPoolStats
3990 , nodeThreadPoolsStatsListener :: Maybe NodeThreadPoolStats
3771 , nodeThreadPoolsStatsListener :: Maybe NodeThreadPoolStats
3991 , nodeThreadPoolsStatsFetchShardStarted :: Maybe NodeThreadPoolStats
3772 , nodeThreadPoolsStatsFetchShardStarted :: Maybe NodeThreadPoolStats
3992− , nodeThreadPoolsStatsPercolate :: NodeThreadPoolStats
3773+ , nodeThreadPoolsStatsPercolate :: Maybe NodeThreadPoolStats
3993 } deriving (Eq, Show, Generic, Typeable)
3774 } deriving (Eq, Show, Generic, Typeable)
3995data NodeThreadPoolStats = NodeThreadPoolStats {
3776data NodeThreadPoolStats = NodeThreadPoolStats {
@@ -4040,34 +3821,26 @@ data JVMPoolStats = JVMPoolStats {
4040 } deriving (Eq, Show, Generic, Typeable)
3821 } deriving (Eq, Show, Generic, Typeable)
4042data NodeProcessStats = NodeProcessStats {
3823data NodeProcessStats = NodeProcessStats {
4043− nodeProcessMemTotalVirtual :: Bytes
3824+ nodeProcessTimestamp :: UTCTime
4044− , nodeProcessMemShare :: Bytes
4045− , nodeProcessMemResident :: Bytes
4046− , nodeProcessCPUTotal :: NominalDiffTime
4047− , nodeProcessCPUUser :: NominalDiffTime
4048− , nodeProcessCPUSys :: NominalDiffTime
4049− , nodeProcessCPUPercent :: Int
4050 , nodeProcessOpenFDs :: Int
3825 , nodeProcessOpenFDs :: Int
4051− , nodeProcessTimestamp :: UTCTime
3826+ , nodeProcessMaxFDs :: Int
3827+ , nodeProcessCPUPercent :: Int
3828+ , nodeProcessCPUTotal :: NominalDiffTime
3829+ , nodeProcessMemTotalVirtual :: Bytes
4052 } deriving (Eq, Show, Generic, Typeable)
3830 } deriving (Eq, Show, Generic, Typeable)
4054data NodeOSStats = NodeOSStats {
3832data NodeOSStats = NodeOSStats {
4055− nodeOSSwapFree :: Bytes
3833+ nodeOSTimestamp :: UTCTime
4056− , nodeOSSwapUsed :: Bytes
3834+ , nodeOSCPUPercent :: Int
4057− , nodeOSMemActualUsed :: Bytes
3835+ , nodeOSLoad :: Maybe LoadAvgs
4058− , nodeOSMemActualFree :: Bytes
3836+ , nodeOSMemTotal :: Bytes
4059− , nodeOSMemUsedPercent :: Int
3837+ , nodeOSMemFree :: Bytes
4060 , nodeOSMemFreePercent :: Int
3838 , nodeOSMemFreePercent :: Int
4061 , nodeOSMemUsed :: Bytes
3839 , nodeOSMemUsed :: Bytes
4062− , nodeOSMemFree :: Bytes
3840+ , nodeOSMemUsedPercent :: Int
4063− , nodeOSCPUStolen :: Int
3841+ , nodeOSSwapTotal :: Bytes
4064− , nodeOSCPUUsage :: Int
3842+ , nodeOSSwapFree :: Bytes
4065− , nodeOSCPUIdle :: Int
3843+ , nodeOSSwapUsed :: Bytes
4066− , nodeOSCPUUser :: Int
4067− , nodeOSCPUSys :: Int
4068− , nodeOSLoad :: Maybe LoadAvgs
4069− , nodeOSUptime :: NominalDiffTime
4070− , nodeOSTimestamp :: UTCTime
4071 } deriving (Eq, Show, Generic, Typeable)
3844 } deriving (Eq, Show, Generic, Typeable)
4073data LoadAvgs = LoadAvgs {
3846data LoadAvgs = LoadAvgs {
@@ -4084,9 +3857,9 @@ data NodeIndicesStats = NodeIndicesStats {
4084 , nodeIndicesStatsQueryCacheHits :: Maybe Int
3857 , nodeIndicesStatsQueryCacheHits :: Maybe Int
4085 , nodeIndicesStatsQueryCacheEvictions :: Maybe Int
3858 , nodeIndicesStatsQueryCacheEvictions :: Maybe Int
4086 , nodeIndicesStatsQueryCacheSize :: Maybe Bytes
3859 , nodeIndicesStatsQueryCacheSize :: Maybe Bytes
4087− , nodeIndicesStatsSuggestCurrent :: Int
3860+ , nodeIndicesStatsSuggestCurrent :: Maybe Int
4088− , nodeIndicesStatsSuggestTime :: NominalDiffTime
3861+ , nodeIndicesStatsSuggestTime :: Maybe NominalDiffTime
4089− , nodeIndicesStatsSuggestTotal :: Int
3862+ , nodeIndicesStatsSuggestTotal :: Maybe Int
4090 , nodeIndicesStatsTranslogSize :: Bytes
3863 , nodeIndicesStatsTranslogSize :: Bytes
4091 , nodeIndicesStatsTranslogOps :: Int
3864 , nodeIndicesStatsTranslogOps :: Int
4092 , nodeIndicesStatsSegFixedBitSetMemory :: Maybe Bytes
3865 , nodeIndicesStatsSegFixedBitSetMemory :: Maybe Bytes
@@ -4096,16 +3869,13 @@ data NodeIndicesStats = NodeIndicesStats {
4096 , nodeIndicesStatsSegMemory :: Bytes
3869 , nodeIndicesStatsSegMemory :: Bytes
4097 , nodeIndicesStatsSegCount :: Int
3870 , nodeIndicesStatsSegCount :: Int
4098 , nodeIndicesStatsCompletionSize :: Bytes
3871 , nodeIndicesStatsCompletionSize :: Bytes
4099− , nodeIndicesStatsPercolateQueries :: Int
3872+ , nodeIndicesStatsPercolateQueries :: Maybe Int
4100− , nodeIndicesStatsPercolateMemory :: Bytes
3873+ , nodeIndicesStatsPercolateMemory :: Maybe Bytes
4101− , nodeIndicesStatsPercolateCurrent :: Int
3874+ , nodeIndicesStatsPercolateCurrent :: Maybe Int
4102− , nodeIndicesStatsPercolateTime :: NominalDiffTime
3875+ , nodeIndicesStatsPercolateTime :: Maybe NominalDiffTime
4103− , nodeIndicesStatsPercolateTotal :: Int
3876+ , nodeIndicesStatsPercolateTotal :: Maybe Int
4104 , nodeIndicesStatsFieldDataEvictions :: Int
3877 , nodeIndicesStatsFieldDataEvictions :: Int
4105 , nodeIndicesStatsFieldDataMemory :: Bytes
3878 , nodeIndicesStatsFieldDataMemory :: Bytes
4106− , nodeIndicesStatsIDCacheMemory :: Bytes
4107− , nodeIndicesStatsFilterCacheEvictions :: Int
4108− , nodeIndicesStatsFilterCacheMemory :: Bytes
4109 , nodeIndicesStatsWarmerTotalTime :: NominalDiffTime
3879 , nodeIndicesStatsWarmerTotalTime :: NominalDiffTime
4110 , nodeIndicesStatsWarmerTotal :: Int
3880 , nodeIndicesStatsWarmerTotal :: Int
4111 , nodeIndicesStatsWarmerCurrent :: Int
3881 , nodeIndicesStatsWarmerCurrent :: Int
@@ -4163,7 +3933,7 @@ newtype PluginName = PluginName { pluginName :: Text }
4163 deriving (Eq, Ord, Generic, Show, Typeable, FromJSON)
3933 deriving (Eq, Ord, Generic, Show, Typeable, FromJSON)
4165data NodeInfo = NodeInfo {
3935data NodeInfo = NodeInfo {
4166− nodeInfoHTTPAddress :: EsAddress
3936+ nodeInfoHTTPAddress :: Maybe EsAddress
4167 , nodeInfoBuild :: BuildHash
3937 , nodeInfoBuild :: BuildHash
4168 , nodeInfoESVersion :: VersionNumber
3938 , nodeInfoESVersion :: VersionNumber
4169 , nodeInfoIP :: Server
3939 , nodeInfoIP :: Server
@@ -4174,7 +3944,7 @@ data NodeInfo = NodeInfo {
4174 , nodeInfoPlugins :: [NodePluginInfo]
3944 , nodeInfoPlugins :: [NodePluginInfo]
4175 , nodeInfoHTTP :: NodeHTTPInfo
3945 , nodeInfoHTTP :: NodeHTTPInfo
4176 , nodeInfoTransport :: NodeTransportInfo
3946 , nodeInfoTransport :: NodeTransportInfo
4177− , nodeInfoNetwork :: NodeNetworkInfo
3947+ , nodeInfoNetwork :: Maybe NodeNetworkInfo
4178 , nodeInfoThreadPool :: NodeThreadPoolsInfo
3948 , nodeInfoThreadPool :: NodeThreadPoolsInfo
4179 , nodeInfoJVM :: NodeJVMInfo
3949 , nodeInfoJVM :: NodeJVMInfo
4180 , nodeInfoProcess :: NodeProcessInfo
3950 , nodeInfoProcess :: NodeProcessInfo
@@ -4206,7 +3976,7 @@ data NodeTransportInfo = NodeTransportInfo {
4207data BoundTransportAddress = BoundTransportAddress {
3977data BoundTransportAddress = BoundTransportAddress {
4208 publishAddress :: EsAddress
3978 publishAddress :: EsAddress
4209− , boundAddress :: EsAddress
3979+ , boundAddress :: [EsAddress]
4210 } deriving (Eq, Show, Generic, Typeable)
3980 } deriving (Eq, Show, Generic, Typeable)
4212data NodeNetworkInfo = NodeNetworkInfo {
3982data NodeNetworkInfo = NodeNetworkInfo {
@@ -4229,15 +3999,15 @@ data NodeNetworkInterface = NodeNetworkInterface {
4229data NodeThreadPoolsInfo = NodeThreadPoolsInfo {
3999data NodeThreadPoolsInfo = NodeThreadPoolsInfo {
4230 nodeThreadPoolsRefresh :: NodeThreadPoolInfo
4000 nodeThreadPoolsRefresh :: NodeThreadPoolInfo
4231 , nodeThreadPoolsManagement :: NodeThreadPoolInfo
4001 , nodeThreadPoolsManagement :: NodeThreadPoolInfo
4232− , nodeThreadPoolsPercolate :: NodeThreadPoolInfo
4002+ , nodeThreadPoolsPercolate :: Maybe NodeThreadPoolInfo
4233 , nodeThreadPoolsListener :: Maybe NodeThreadPoolInfo
4003 , nodeThreadPoolsListener :: Maybe NodeThreadPoolInfo
4234 , nodeThreadPoolsFetchShardStarted :: Maybe NodeThreadPoolInfo
4004 , nodeThreadPoolsFetchShardStarted :: Maybe NodeThreadPoolInfo
4235 , nodeThreadPoolsSearch :: NodeThreadPoolInfo
4005 , nodeThreadPoolsSearch :: NodeThreadPoolInfo
4236 , nodeThreadPoolsFlush :: NodeThreadPoolInfo
4006 , nodeThreadPoolsFlush :: NodeThreadPoolInfo
4237 , nodeThreadPoolsWarmer :: NodeThreadPoolInfo
4007 , nodeThreadPoolsWarmer :: NodeThreadPoolInfo
4238− , nodeThreadPoolsOptimize :: NodeThreadPoolInfo
4008+ , nodeThreadPoolsOptimize :: Maybe NodeThreadPoolInfo
4239 , nodeThreadPoolsBulk :: NodeThreadPoolInfo
4009 , nodeThreadPoolsBulk :: NodeThreadPoolInfo
4240− , nodeThreadPoolsSuggest :: NodeThreadPoolInfo
4010+ , nodeThreadPoolsSuggest :: Maybe NodeThreadPoolInfo
4241 , nodeThreadPoolsMerge :: NodeThreadPoolInfo
4011 , nodeThreadPoolsMerge :: NodeThreadPoolInfo
4242 , nodeThreadPoolsSnapshot :: NodeThreadPoolInfo
4012 , nodeThreadPoolsSnapshot :: NodeThreadPoolInfo
4243 , nodeThreadPoolsGet :: NodeThreadPoolInfo
4013 , nodeThreadPoolsGet :: NodeThreadPoolInfo
@@ -4300,11 +4070,12 @@ newtype PID = PID {
4300 } deriving (Eq, Show, Generic, Typeable, FromJSON)
4070 } deriving (Eq, Show, Generic, Typeable, FromJSON)
4302data NodeOSInfo = NodeOSInfo {
4072data NodeOSInfo = NodeOSInfo {
4303− nodeOSSwap :: Bytes
4073+ nodeOSRefreshInterval :: NominalDiffTime
4304− , nodeOSMem :: Bytes
4074+ , nodeOSName :: Text
4305− , nodeOSCPUInfo :: CPUInfo
4075+ , nodeOSArch :: Text
4076+ , nodeOSVersion :: VersionNumber
4306 , nodeOSAvailableProcessors :: Int
4077 , nodeOSAvailableProcessors :: Int
4307− , nodeOSRefreshInterval :: NominalDiffTime
4078+ , nodeOSAllocatedProcessors :: Int
4308 } deriving (Eq, Show, Generic, Typeable)
4079 } deriving (Eq, Show, Generic, Typeable)
4310data CPUInfo = CPUInfo {
4081data CPUInfo = CPUInfo {
@@ -4320,7 +4091,7 @@ data CPUInfo = CPUInfo {
4320data NodeProcessInfo = NodeProcessInfo {
4091data NodeProcessInfo = NodeProcessInfo {
4321 nodeProcessMLockAll :: Bool
4092 nodeProcessMLockAll :: Bool
4322 -- ^ See <https://www.elastic.co/guide/en/elasticsearch/reference/current/setup-configuration.html>
4093 -- ^ See <https://www.elastic.co/guide/en/elasticsearch/reference/current/setup-configuration.html>
4323− , nodeProcessMaxFileDescriptors :: Int
4094+ , nodeProcessMaxFileDescriptors :: Maybe Int
4324 , nodeProcessId :: PID
4095 , nodeProcessId :: PID
4325 , nodeProcessRefreshInterval :: NominalDiffTime
4096 , nodeProcessRefreshInterval :: NominalDiffTime
4326 } deriving (Eq, Show, Generic, Typeable)
4097 } deriving (Eq, Show, Generic, Typeable)
@@ -4725,7 +4496,7 @@ instance FromJSON NodeDataPathStats where
4725 <*> o .: "free_in_bytes"
4496 <*> o .: "free_in_bytes"
4726 <*> o .: "total_in_bytes"
4497 <*> o .: "total_in_bytes"
4727 <*> o .:? "type"
4498 <*> o .:? "type"
4728− <*> o .: "dev"
4499+ <*> o .:? "dev"
4729 <*> o .: "mount"
4500 <*> o .: "mount"
4730 <*> o .: "path"
4501 <*> o .: "path"
@@ -4772,21 +4543,21 @@ instance FromJSON NodeThreadPoolsStats where
4773 parse o = NodeThreadPoolsStats <$> o .: "snapshot"
4544 parse o = NodeThreadPoolsStats <$> o .: "snapshot"
4774 <*> o .: "bulk"
4545 <*> o .: "bulk"
4775− <*> o .: "merge"
4546+ <*> o .: "force_merge"
4776 <*> o .: "get"
4547 <*> o .: "get"
4777 <*> o .: "management"
4548 <*> o .: "management"
4778 <*> o .:? "fetch_shard_store"
4549 <*> o .:? "fetch_shard_store"
4779− <*> o .: "optimize"
4550+ <*> o .:? "optimize"
4780 <*> o .: "flush"
4551 <*> o .: "flush"
4781 <*> o .: "search"
4552 <*> o .: "search"
4782 <*> o .: "warmer"
4553 <*> o .: "warmer"
4783 <*> o .: "generic"
4554 <*> o .: "generic"
4784− <*> o .: "suggest"
4555+ <*> o .:? "suggest"
4785 <*> o .: "refresh"
4556 <*> o .: "refresh"
4786 <*> o .: "index"
4557 <*> o .: "index"
4787 <*> o .:? "listener"
4558 <*> o .:? "listener"
4788 <*> o .:? "fetch_shard_started"
4559 <*> o .:? "fetch_shard_started"
4789− <*> o .: "percolate"
4560+ <*> o .:? "percolate"
4790instance FromJSON NodeThreadPoolStats where
4561instance FromJSON NodeThreadPoolStats where
4791 parseJSON = withObject "NodeThreadPoolStats" parse
4562 parseJSON = withObject "NodeThreadPoolStats" parse
@@ -4859,15 +4630,12 @@ instance FromJSON NodeProcessStats where
4859 parse o = do
4630 parse o = do
4860 mem <- o .: "mem"
4631 mem <- o .: "mem"
4861 cpu <- o .: "cpu"
4632 cpu <- o .: "cpu"
4862− NodeProcessStats <$> mem .: "total_virtual_in_bytes"
4633+ NodeProcessStats <$> (posixMS <$> o .: "timestamp")
4863− <*> mem .: "share_in_bytes"
4864− <*> mem .: "resident_in_bytes"
4865− <*> (unMS <$> cpu .: "total_in_millis")
4866− <*> (unMS <$> cpu .: "user_in_millis")
4867− <*> (unMS <$> cpu .: "sys_in_millis")
4868− <*> cpu .: "percent"
4869 <*> o .: "open_file_descriptors"
4634 <*> o .: "open_file_descriptors"
4870− <*> (posixMS <$> o .: "timestamp")
4635+ <*> o .: "max_file_descriptors"
4636+ <*> cpu .: "percent"
4637+ <*> (unMS <$> cpu .: "total_in_millis")
4638+ <*> mem .: "total_virtual_in_bytes"
4872instance FromJSON NodeOSStats where
4640instance FromJSON NodeOSStats where
4873 parseJSON = withObject "NodeOSStats" parse
4641 parseJSON = withObject "NodeOSStats" parse
@@ -4877,22 +4645,17 @@ instance FromJSON NodeOSStats where
4877 mem <- o .: "mem"
4645 mem <- o .: "mem"
4878 cpu <- o .: "cpu"
4646 cpu <- o .: "cpu"
4879 load <- o .:? "load_average"
4647 load <- o .:? "load_average"
4648+ NodeOSStats <$> (posixMS <$> o .: "timestamp")
4649+ <*> cpu .: "percent"
4651+ <*> mem .: "total_in_bytes"
4880− NodeOSStats <$> swap .: "free_in_bytes"
4652+ <*> mem .: "free_in_bytes"
4881− <*> swap .: "used_in_bytes"
4882− <*> mem .: "actual_used_in_bytes"
4883− <*> mem .: "actual_free_in_bytes"
4884− <*> mem .: "used_percent"
4885 <*> mem .: "free_percent"
4653 <*> mem .: "free_percent"
4886 <*> mem .: "used_in_bytes"
4654 <*> mem .: "used_in_bytes"
4655+ <*> mem .: "used_percent"
4656+ <*> swap .: "total_in_bytes"
4887− <*> mem .: "free_in_bytes"
4657+ <*> swap .: "free_in_bytes"
4888− <*> cpu .: "stolen"
4658+ <*> swap .: "used_in_bytes"
4894− <*> (unMS <$> o .: "uptime_in_millis")
4895− <*> (posixMS <$> o .: "timestamp")
4897instance FromJSON LoadAvgs where
4660instance FromJSON LoadAvgs where
4898 parseJSON = withArray "LoadAvgs" parse
4661 parseJSON = withArray "LoadAvgs" parse
@@ -4912,14 +4675,12 @@ instance FromJSON NodeIndicesStats where
4912 Nothing -> pure Nothing
4675 Nothing -> pure Nothing
4913 mRecovery <- o .:? "recovery"
4676 mRecovery <- o .:? "recovery"
4914 mQueryCache <- o .:? "query_cache"
4677 mQueryCache <- o .:? "query_cache"
4915− suggest <- o .: "suggest"
4678+ mSuggest <- o .:? "suggest"
4916 translog <- o .: "translog"
4679 translog <- o .: "translog"
4917 segments <- o .: "segments"
4680 segments <- o .: "segments"
4918 completion <- o .: "completion"
4681 completion <- o .: "completion"
4919− percolate <- o .: "percolate"
4682+ mPercolate <- o .:? "percolate"
4920 fielddata <- o .: "fielddata"
4683 fielddata <- o .: "fielddata"
4921− idCache <- o .: "id_cache"
4922− filterCache <- o .: "filter_cache"
4923 warmer <- o .: "warmer"
4684 warmer <- o .: "warmer"
4924 flush <- o .: "flush"
4685 flush <- o .: "flush"
4925 refresh <- o .: "refresh"
4686 refresh <- o .: "refresh"
@@ -4936,9 +4697,9 @@ instance FromJSON NodeIndicesStats where
4936 <*> mQueryCache .:: "hit_count"
4697 <*> mQueryCache .:: "hit_count"
4937 <*> mQueryCache .:: "evictions"
4698 <*> mQueryCache .:: "evictions"
4938 <*> mQueryCache .:: "memory_size_in_bytes"
4699 <*> mQueryCache .:: "memory_size_in_bytes"
4939− <*> suggest .: "current"
4700+ <*> mSuggest .:: "current"
4940− <*> (unMS <$> suggest .: "time_in_millis")
4701+ <*> (fmap unMS <$> mSuggest .:: "time_in_millis")
4941− <*> suggest .: "total"
4702+ <*> mSuggest .:: "total"
4942 <*> translog .: "size_in_bytes"
4703 <*> translog .: "size_in_bytes"
4943 <*> translog .: "operations"
4704 <*> translog .: "operations"
4944 <*> segments .:? "fixed_bit_set_memory_in_bytes"
4705 <*> segments .:? "fixed_bit_set_memory_in_bytes"
@@ -4948,16 +4709,13 @@ instance FromJSON NodeIndicesStats where
4948 <*> segments .: "memory_in_bytes"
4709 <*> segments .: "memory_in_bytes"
4949 <*> segments .: "count"
4710 <*> segments .: "count"
4950 <*> completion .: "size_in_bytes"
4711 <*> completion .: "size_in_bytes"
4951− <*> percolate .: "queries"
4712+ <*> mPercolate .:: "queries"
4952− <*> percolate .: "memory_size_in_bytes"
4713+ <*> mPercolate .:: "memory_size_in_bytes"
4953− <*> percolate .: "current"
4714+ <*> mPercolate .:: "current"
4954− <*> (unMS <$> percolate .: "time_in_millis")
4715+ <*> (fmap unMS <$> mPercolate .:: "time_in_millis")
4955− <*> percolate .: "total"
4716+ <*> mPercolate .:: "total"
4956 <*> fielddata .: "evictions"
4717 <*> fielddata .: "evictions"
4957 <*> fielddata .: "memory_size_in_bytes"
4718 <*> fielddata .: "memory_size_in_bytes"
4958− <*> idCache .: "memory_size_in_bytes"
4959− <*> filterCache .: "evictions"
4960− <*> filterCache .: "memory_size_in_bytes"
4961 <*> (unMS <$> warmer .: "total_time_in_millis")
4719 <*> (unMS <$> warmer .: "total_time_in_millis")
4962 <*> warmer .: "total"
4720 <*> warmer .: "total"
4963 <*> warmer .: "current"
4721 <*> warmer .: "current"
@@ -5015,7 +4773,7 @@ parseNodeStats fnid o = do
5015 <*> o .: "http"
4773 <*> o .: "http"
5016 <*> o .: "transport"
4774 <*> o .: "transport"
5017 <*> o .: "fs"
4775 <*> o .: "fs"
5018− <*> o .: "network"
4776+ <*> o .:? "network"
5019 <*> o .: "thread_pool"
4777 <*> o .: "thread_pool"
5020 <*> o .: "jvm"
4778 <*> o .: "jvm"
5021 <*> o .: "process"
4779 <*> o .: "process"
@@ -5024,8 +4782,8 @@ parseNodeStats fnid o = do
5025parseNodeInfo :: FullNodeId -> Object -> Parser NodeInfo
4783parseNodeInfo :: FullNodeId -> Object -> Parser NodeInfo
5026parseNodeInfo nid o =
4784parseNodeInfo nid o =
5027− NodeInfo <$> o .: "http_address"
4785+ NodeInfo <$> o .:? "http_address"
5028− <*> o .: "build"
4786+ <*> o .: "build_hash"
5029 <*> o .: "version"
4787 <*> o .: "version"
5030 <*> o .: "ip"
4788 <*> o .: "ip"
5031 <*> o .: "host"
4789 <*> o .: "host"
@@ -5035,7 +4793,7 @@ parseNodeInfo nid o =
5035 <*> o .: "plugins"
4793 <*> o .: "plugins"
5036 <*> o .: "http"
4794 <*> o .: "http"
5037 <*> o .: "transport"
4795 <*> o .: "transport"
5038− <*> o .: "network"
4796+ <*> o .:? "network"
5039 <*> o .: "thread_pool"
4797 <*> o .: "thread_pool"
5040 <*> o .: "jvm"
4798 <*> o .: "jvm"
5041 <*> o .: "process"
4799 <*> o .: "process"
@@ -5067,13 +4825,12 @@ instance FromJSON NodeOSInfo where
5067 parseJSON = withObject "NodeOSInfo" parse
4825 parseJSON = withObject "NodeOSInfo" parse
5069 parse o = do
4827 parse o = do
5070− swap <- o .: "swap"
4828+ NodeOSInfo <$> (unMS <$> o .: "refresh_interval_in_millis")
5071− mem <- o .: "mem"
4829+ <*> o .: "name"
5072− NodeOSInfo <$> swap .: "total_in_bytes"
4830+ <*> o .: "arch"
5073− <*> mem .: "total_in_bytes"
4831+ <*> o .: "version"
5075 <*> o .: "available_processors"
4832 <*> o .: "available_processors"
5076− <*> (unMS <$> o .: "refresh_interval_in_millis")
4833+ <*> o .: "allocated_processors"
5079instance FromJSON CPUInfo where
4836instance FromJSON CPUInfo where
@@ -5091,7 +4848,7 @@ instance FromJSON NodeProcessInfo where
5091 parseJSON = withObject "NodeProcessInfo" parse
4848 parseJSON = withObject "NodeProcessInfo" parse
5093 parse o = NodeProcessInfo <$> o .: "mlockall"
4850 parse o = NodeProcessInfo <$> o .: "mlockall"
5094− <*> o .: "max_file_descriptors"
4851+ <*> o .:? "max_file_descriptors"
5095 <*> o .: "id"
4852 <*> o .: "id"
5096 <*> (unMS <$> o .: "refresh_interval_in_millis")
4853 <*> (unMS <$> o .: "refresh_interval_in_millis")
@@ -5127,16 +4884,16 @@ instance FromJSON NodeThreadPoolsInfo where
5128 parse o = NodeThreadPoolsInfo <$> o .: "refresh"
4885 parse o = NodeThreadPoolsInfo <$> o .: "refresh"
5129 <*> o .: "management"
4886 <*> o .: "management"
5130− <*> o .: "percolate"
4887+ <*> o .:? "percolate"
5131 <*> o .:? "listener"
4888 <*> o .:? "listener"
5132 <*> o .:? "fetch_shard_started"
4889 <*> o .:? "fetch_shard_started"
5133 <*> o .: "search"
4890 <*> o .: "search"
5134 <*> o .: "flush"
4891 <*> o .: "flush"
5135 <*> o .: "warmer"
4892 <*> o .: "warmer"
5136− <*> o .: "optimize"
4893+ <*> o .:? "optimize"
5137 <*> o .: "bulk"
4894 <*> o .: "bulk"
5138− <*> o .: "suggest"
4895+ <*> o .:? "suggest"
5139− <*> o .: "merge"
4896+ <*> o .: "force_merge"
5140 <*> o .: "snapshot"
4897 <*> o .: "snapshot"
5141 <*> o .: "get"
4898 <*> o .: "get"
5142 <*> o .:? "fetch_shard_store"
4899 <*> o .:? "fetch_shard_store"