git.iko.soy/typeable/bloodhound
on master help sign in
common terms query
commitff2e480a864b3502204c9828e3146d7a8cca5276 authorChris Allen <cma@bitemyapp.com> dateSun 27 Apr 2014, 13:25 (12 years ago) parent6ad6da6
3 files changed+44−5
Database/Bloodhound/Types.hs+5−2 Database/Bloodhound/Types/Instances.hs+27−3 tests/tests.hs+12
Database/Bloodhound/Types.hs+5−2
@@ -101,6 +101,8 @@ module Database.Bloodhound.Types
101101 , Tiebreaker(..)
102102 , MinimumMatch(..)
103103 , DisableCoord(..)
104+ , CommonMinimumMatch(..)
105+ , MinimumMatchHighLow(..)
104106 ) where
105107
106108import Data.Aeson
@@ -523,7 +525,8 @@ data BoostingQuery = BoostingQuery { positiveQuery :: Query
523525 , negativeBoost :: Boost } deriving (Eq, Show)
524526
525527data CommonTermsQuery =
526− CommonTermsQuery { commonQuery :: QueryString
528+ CommonTermsQuery { commonField :: FieldName
529+ , commonQuery :: QueryString
527530 , commonCutoffFrequency :: CutoffFrequency
528531 , commonLowFreqOperator :: BooleanOperator
529532 , commonHighFreqOperator :: BooleanOperator
@@ -534,7 +537,7 @@ data CommonTermsQuery =
534537 } deriving (Eq, Show)
535538
536539data CommonMinimumMatch = CommonMinimumMatchHighLow MinimumMatchHighLow
537− | CommonMinimumMatch MinimumMatchText deriving (Eq, Show)
540+ | CommonMinimumMatch MinimumMatch deriving (Eq, Show)
538541
539542data MinimumMatchHighLow =
540543 MinimumMatchHighLow { lowFreq :: MinimumMatch
Database/Bloodhound/Types/Instances.hs+27−3
@@ -13,6 +13,7 @@ import Data.Monoid
1313import qualified Data.Text as T
1414import Database.Bloodhound.Types
1515import Database.Bloodhound.Types.Class
16+import Data.Scientific
1617
1718instance Monoid Filter where
1819 mempty = IdentityFilter
@@ -129,9 +130,7 @@ instance ToJSON Query where
129130 object [termField .= object merged]]
130131 where
131132 base = [ "value" .= termValue ]
132− boosted = case boost of
133− (Just boostValue) -> [ "boost" .= boostValue ]
134− Nothing -> []
133+ boosted = maybe [] (return . ("boost" .=)) boost
135134 merged = mappend base boosted
136135
137136 toJSON (QueryMatchQuery matchQuery) =
@@ -146,11 +145,36 @@ instance ToJSON Query where
146145 toJSON (QueryBoostingQuery boostingQuery) =
147146 object ["boosting" .= toJSON boostingQuery]
148147
148+ toJSON (QueryCommonTermsQuery commonTermsQuery) =
149+ object ["common" .= toJSON commonTermsQuery]
149150
150151mField :: (ToJSON a, Functor f) => T.Text -> f a -> f (T.Text, Value)
151152mField field = fmap ((field .=) . toJSON)
152153
153154
155+instance ToJSON CommonTermsQuery where
156+ toJSON (CommonTermsQuery (FieldName fieldName)
157+ (QueryString query) cf lfo hfo msm
158+ boost analyzer disableCoord) =
159+ object [fieldName .= object conjoined]
160+ where base = [ "query" .= query
161+ , "cutoff_frequency" .= toJSON cf
162+ , "low_freq_operator" .= toJSON lfo
163+ , "high_freq_operator" .= toJSON hfo ]
164+ extension = catMaybes
165+ [ mField "minimum_should_match" msm
166+ , mField "boost" boost
167+ , mField "analyzer" analyzer
168+ , mField "disable_coord" disableCoord ]
169+ conjoined = base ++ extension
170+
171+
172+instance ToJSON CommonMinimumMatch where
173+ toJSON (CommonMinimumMatch mm) = toJSON mm
174+ toJSON (CommonMinimumMatchHighLow (MinimumMatchHighLow lowF highF)) =
175+ object [ "low_freq" .= toJSON lowF
176+ , "high_freq" .= toJSON highF ]
177+
154178instance ToJSON BoostingQuery where
155179 toJSON (BoostingQuery positiveQuery negativeQuery negativeBoost) =
156180 object [ "positive" .= toJSON positiveQuery
tests/tests.hs+12
@@ -191,6 +191,18 @@ main = hspec $ do
191191 myTweet <- searchTweet search
192192 myTweet `shouldBe` Right exampleTweet
193193
194+ it "returns document for common terms query" $ do
195+ _ <- insertData
196+ let query = QueryCommonTermsQuery $
197+ CommonTermsQuery (FieldName "user")
198+ (QueryString "bitemyapp")
199+ (CutoffFrequency 0.0001)
200+ Or Or Nothing Nothing Nothing Nothing
201+ let search = mkSearch (Just query) Nothing
202+ myTweet <- searchTweet search
203+ myTweet `shouldBe` Right exampleTweet
204+
205+
194206 describe "sorting" $ do
195207 it "returns documents in the right order" $ do
196208 _ <- insertData