git.iko.soy/typeable/bloodhound
on master help sign in
Added fields support to Search
72c1939John Galt
src/Database/Bloodhound/Client.hs+6−6
@@ -533,9 +533,9 @@ searchByType (IndexName indexName)
533--
533--
534-- >>> let query = TermQuery (Term "user" "bitemyapp") Nothing
534-- >>> let query = TermQuery (Term "user" "bitemyapp") Nothing
535-- >>> mkSearch (Just query) Nothing
535-- >>> mkSearch (Just query) Nothing
536−-- Search {queryBody = Just (TermQuery (Term {termField = "user", termValue = "bitemyapp"}) Nothing), filterBody = Nothing, sortBody = Nothing, aggBody = Nothing, highlight = Nothing, trackSortScores = False, from = From 0, size = Size 10}
536+-- Search {queryBody = Just (TermQuery (Term {termField = "user", termValue = "bitemyapp"}) Nothing), filterBody = Nothing, sortBody = Nothing, aggBody = Nothing, highlight = Nothing, trackSortScores = False, from = From 0, size = Size 10, fields = Nothing}
537mkSearch :: Maybe Query -> Maybe Filter -> Search
537mkSearch :: Maybe Query -> Maybe Filter -> Search
538−mkSearch query filter = Search query filter Nothing Nothing Nothing False (From 0) (Size 10)
538+mkSearch query filter = Search query filter Nothing Nothing Nothing False (From 0) (Size 10) Nothing
539
539
540-- | 'mkAggregateSearch' is a helper function that defaults everything in a 'Search' except for
540-- | 'mkAggregateSearch' is a helper function that defaults everything in a 'Search' except for
541-- the 'Query' and the 'Aggregation'.
541-- the 'Query' and the 'Aggregation'.
@@ -545,7 +545,7 @@ mkSearch query filter = Search query filter Nothing Nothing Nothing False (From
545-- TermsAgg (TermsAggregation {term = Left "user", termInclude = Nothing, termExclude = Nothing, termOrder = Nothing, termMinDocCount = Nothing, termSize = Nothing, termShardSize = Nothing, termCollectMode = Just BreadthFirst, termExecutionHint = Nothing, termAggs = Nothing})
545-- TermsAgg (TermsAggregation {term = Left "user", termInclude = Nothing, termExclude = Nothing, termOrder = Nothing, termMinDocCount = Nothing, termSize = Nothing, termShardSize = Nothing, termCollectMode = Just BreadthFirst, termExecutionHint = Nothing, termAggs = Nothing})
546-- >>> let myAggregation = mkAggregateSearch Nothing $ mkAggregations "users" terms
546-- >>> let myAggregation = mkAggregateSearch Nothing $ mkAggregations "users" terms
547mkAggregateSearch :: Maybe Query -> Aggregations -> Search
547mkAggregateSearch :: Maybe Query -> Aggregations -> Search
548−mkAggregateSearch query mkSearchAggs = Search query Nothing Nothing (Just mkSearchAggs) Nothing False (From 0) (Size 0)
548+mkAggregateSearch query mkSearchAggs = Search query Nothing Nothing (Just mkSearchAggs) Nothing False (From 0) (Size 0) Nothing
549
549
550-- | 'mkHighlightSearch' is a helper function that defaults everything in a 'Search' except for
550-- | 'mkHighlightSearch' is a helper function that defaults everything in a 'Search' except for
551-- the 'Query' and the 'Aggregation'.
551-- the 'Query' and the 'Aggregation'.
@@ -554,7 +554,7 @@ mkAggregateSearch query mkSearchAggs = Search query Nothing Nothing (Just mkSear
554-- >>> let testHighlight = Highlights Nothing [FieldHighlight (FieldName "message") Nothing]
554-- >>> let testHighlight = Highlights Nothing [FieldHighlight (FieldName "message") Nothing]
555-- >>> let search = mkHighlightSearch (Just query) testHighlight
555-- >>> let search = mkHighlightSearch (Just query) testHighlight
556mkHighlightSearch :: Maybe Query -> Highlights -> Search
556mkHighlightSearch :: Maybe Query -> Highlights -> Search
557−mkHighlightSearch query searchHighlights = Search query Nothing Nothing Nothing (Just searchHighlights) False (From 0) (Size 10)
557+mkHighlightSearch query searchHighlights = Search query Nothing Nothing Nothing (Just searchHighlights) False (From 0) (Size 10) Nothing
558
558
559-- | 'pageSearch' is a helper function that takes a search and assigns the from
559-- | 'pageSearch' is a helper function that takes a search and assigns the from
560-- and size fields for the search. The from parameter defines the offset
560-- and size fields for the search. The from parameter defines the offset
@@ -564,9 +564,9 @@ mkHighlightSearch query searchHighlights = Search query Nothing Nothing Nothing
564-- >>> let query = QueryMatchQuery $ mkMatchQuery (FieldName "_all") (QueryString "haskell")
564-- >>> let query = QueryMatchQuery $ mkMatchQuery (FieldName "_all") (QueryString "haskell")
565-- >>> let search = mkSearch (Just query) Nothing
565-- >>> let search = mkSearch (Just query) Nothing
566-- >>> search
566-- >>> search
567−-- Search {queryBody = Just (QueryMatchQuery (MatchQuery {matchQueryField = FieldName "_all", matchQueryQueryString = QueryString "haskell", matchQueryOperator = Or, matchQueryZeroTerms = ZeroTermsNone, matchQueryCutoffFrequency = Nothing, matchQueryMatchType = Nothing, matchQueryAnalyzer = Nothing, matchQueryMaxExpansions = Nothing, matchQueryLenient = Nothing})), filterBody = Nothing, sortBody = Nothing, aggBody = Nothing, highlight = Nothing, trackSortScores = False, from = From 0, size = Size 10}
567+-- Search {queryBody = Just (QueryMatchQuery (MatchQuery {matchQueryField = FieldName "_all", matchQueryQueryString = QueryString "haskell", matchQueryOperator = Or, matchQueryZeroTerms = ZeroTermsNone, matchQueryCutoffFrequency = Nothing, matchQueryMatchType = Nothing, matchQueryAnalyzer = Nothing, matchQueryMaxExpansions = Nothing, matchQueryLenient = Nothing})), filterBody = Nothing, sortBody = Nothing, aggBody = Nothing, highlight = Nothing, trackSortScores = False, from = From 0, size = Size 10, fields = Nothing}
568-- >>> pageSearch (From 10) (Size 100) search
568-- >>> pageSearch (From 10) (Size 100) search
569−-- Search {queryBody = Just (QueryMatchQuery (MatchQuery {matchQueryField = FieldName "_all", matchQueryQueryString = QueryString "haskell", matchQueryOperator = Or, matchQueryZeroTerms = ZeroTermsNone, matchQueryCutoffFrequency = Nothing, matchQueryMatchType = Nothing, matchQueryAnalyzer = Nothing, matchQueryMaxExpansions = Nothing, matchQueryLenient = Nothing})), filterBody = Nothing, sortBody = Nothing, aggBody = Nothing, highlight = Nothing, trackSortScores = False, from = From 10, size = Size 100}
569+-- Search {queryBody = Just (QueryMatchQuery (MatchQuery {matchQueryField = FieldName "_all", matchQueryQueryString = QueryString "haskell", matchQueryOperator = Or, matchQueryZeroTerms = ZeroTermsNone, matchQueryCutoffFrequency = Nothing, matchQueryMatchType = Nothing, matchQueryAnalyzer = Nothing, matchQueryMaxExpansions = Nothing, matchQueryLenient = Nothing})), filterBody = Nothing, sortBody = Nothing, aggBody = Nothing, highlight = Nothing, trackSortScores = False, from = From 10, size = Size 100, fields = Nothing}
570pageSearch :: From -- ^ The result offset
570pageSearch :: From -- ^ The result offset
571 -> Size -- ^ The number of results to return
571 -> Size -- ^ The number of results to return
572 -> Search -- ^ The current seach
572 -> Search -- ^ The current seach
src/Database/Bloodhound/Types.hs+5−3
@@ -707,7 +707,8 @@ data Search = Search { queryBody :: Maybe Query
707 -- default False
707 -- default False
708 , trackSortScores :: TrackSortScores
708 , trackSortScores :: TrackSortScores
709 , from :: From
709 , from :: From
710− , size :: Size } deriving (Eq, Show)
710+ , size :: Size
711+ , fields :: Maybe [FieldName] } deriving (Eq, Show)
711
712
712data Highlights = Highlights { globalsettings :: Maybe HighlightSettings
713data Highlights = Highlights { globalsettings :: Maybe HighlightSettings
713 , highlightFields :: [FieldHighlight]
714 , highlightFields :: [FieldHighlight]
@@ -2042,7 +2043,7 @@ instance (FromJSON a) => FromJSON (EsResult a) where
2042
2043
2043
2044
2044instance ToJSON Search where
2045instance ToJSON Search where
2045− toJSON (Search query sFilter sort searchAggs highlight sTrackSortScores sFrom sSize) =
2046+ toJSON (Search query sFilter sort searchAggs highlight sTrackSortScores sFrom sSize sFields) =
2046 omitNulls [ "query" .= query
2047 omitNulls [ "query" .= query
2047 , "filter" .= sFilter
2048 , "filter" .= sFilter
2048 , "sort" .= sort
2049 , "sort" .= sort
@@ -2050,7 +2051,8 @@ instance ToJSON Search where
2050 , "highlight" .= highlight
2051 , "highlight" .= highlight
2051 , "from" .= sFrom
2052 , "from" .= sFrom
2052 , "size" .= sSize
2053 , "size" .= sSize
2053− , "track_scores" .= sTrackSortScores]
2054+ , "track_scores" .= sTrackSortScores
2055+ , "fields" .= sFields]
2054
2056
2055
2057
2056instance ToJSON FieldHighlight where
2058instance ToJSON FieldHighlight where
tests/tests.hs+1−1
@@ -425,7 +425,7 @@ main = hspec $ do
425 let sortSpec = DefaultSortSpec $ mkSort (FieldName "age") Ascending
425 let sortSpec = DefaultSortSpec $ mkSort (FieldName "age") Ascending
426 let search = Search Nothing
426 let search = Search Nothing
427 (Just IdentityFilter) (Just [sortSpec]) Nothing Nothing
427 (Just IdentityFilter) (Just [sortSpec]) Nothing Nothing
428− False (From 0) (Size 10)
428+ False (From 0) (Size 10) Nothing
429 reply <- searchByIndex testIndex search
429 reply <- searchByIndex testIndex search
430 let result = eitherDecode (responseBody reply) :: Either String (SearchResult Tweet)
430 let result = eitherDecode (responseBody reply) :: Either String (SearchResult Tweet)
431 let myTweet = fmap (hitSource . head . hits . searchHits) result
431 let myTweet = fmap (hitSource . head . hits . searchHits) result