Holumbus-Searchengine 1.2.0 → 1.2.1
raw patch · 12 files changed
+159/−69 lines, 12 filesdep ~containersdep ~deepseq
Dependency ranges changed: containers, deepseq
Files
- Holumbus-Searchengine.cabal +15/−5
- src/Control/Monad/ReaderStateIO.hs +2/−1
- src/Holumbus/Index/Common.hs +8/−2
- src/Holumbus/Index/Common/DocId.hs +1/−1
- src/Holumbus/Index/Common/DocIdMap.hs +111/−38
- src/Holumbus/Index/Common/Document.hs +0/−2
- src/Holumbus/Index/Common/Occurences.hs +12/−12
- src/Holumbus/Index/Common/RawResult.hs +2/−4
- src/Holumbus/Index/CompactDocuments.hs +2/−1
- src/Holumbus/Index/CompactSmallDocuments.hs +2/−1
- src/Holumbus/Index/Inverted/CompressedPrefixMem.hs +2/−0
- src/Holumbus/Index/Inverted/PrefixMem.hs +2/−2
Holumbus-Searchengine.cabal view
@@ -1,9 +1,9 @@ name: Holumbus-Searchengine-version: 1.2.0+version: 1.2.1 license: MIT license-file: LICENSE author: Sebastian M. Gauck, Timo B. Huebel, Uwe Schmidt-copyright: Copyright (c) 2007 - 2012 Uwe Schmidt, Sebastian M. Gauck and Timo B. Huebel+copyright: Copyright (c) 2007 - 2012 Uwe Schmidt, Sebastian M. Gauck and Timo B. Kranz maintainer: Timo B. Huebel <tbh@holumbus.org>, Uwe Schmidt <uwe@fh-wedel.de> stability: experimental category: Text, Data@@ -24,8 +24,6 @@ , binary >= 0.5 && < 1 , bytestring >= 0.9 && < 1 , bzlib >= 0.4 && < 1- , containers >= 0.2 && < 1- , deepseq >= 1.1 && < 2 , directory >= 1 && < 2 , enummapset >= 0 && < 1 , filepath >= 1 && < 2@@ -42,6 +40,14 @@ , process >= 1 && < 2 , unix >= 2.3 && < 3 + -- instance NFData (Map k v) has moved from deepseq into containers (dependency hell)+ if impl(ghc < 7.4)+ build-depends: containers >= 0.2 && < 0.4.2+ , deepseq >= 1.1 && < 1.2+ else+ build-depends: containers >= 0.4.2+ , deepseq >= 1.2+ exposed-modules: Control.Concurrent.MapFold Control.Monad.ReaderStateIO@@ -94,4 +100,8 @@ ghc-options: -Wall -funbox-strict-fields -fwarn-tabs - extensions:+ extensions: MultiParamTypeClasses+ FlexibleContexts+ FlexibleInstances+ GeneralizedNewtypeDeriving+ TypeSynonymInstances
src/Control/Monad/ReaderStateIO.hs view
@@ -1,4 +1,5 @@-{-# OPTIONS -XMultiParamTypeClasses -XFunctionalDependencies -XFlexibleInstances #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE FlexibleInstances #-} -- ------------------------------------------------------------
src/Holumbus/Index/Common.hs view
@@ -1,10 +1,16 @@-{-# OPTIONS -XMultiParamTypeClasses -XFlexibleContexts -XFlexibleInstances -XGeneralizedNewtypeDeriving -XTypeSynonymInstances -fno-warn-orphans #-}+{-# OPTIONS -fno-warn-orphans #-} +{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE GeneralizedNewtypeDeriving #-}+{-# LANGUAGE TypeSynonymInstances #-}+ -- ---------------------------------------------------------------------------- {- | Module : Holumbus.Index.Common- Copyright : Copyright (C) 2007 Sebastian M. Schlatt, Timo B. Huebel+ Copyright : Copyright (C) 2007-2012 Sebastian M. Schlatt, Timo B. Huebel, Uwe Schmidt License : MIT Maintainer : Timo B. Huebel (tbh@holumbus.org)
src/Holumbus/Index/Common/DocId.hs view
@@ -1,4 +1,4 @@-{-# OPTIONS -XGeneralizedNewtypeDeriving #-}+{-# LANGUAGE GeneralizedNewtypeDeriving #-} -- ----------------------------------------------------------------------------
src/Holumbus/Index/Common/DocIdMap.hs view
@@ -1,10 +1,10 @@-{-# OPTIONS -XTypeSynonymInstances -fno-warn-orphans #-}+{-# LANGUAGE GeneralizedNewtypeDeriving #-} -- ---------------------------------------------------------------------------- {- | Module : Holumbus.Index.Common.DocIdMap- Copyright : Copyright (C) 2011 Sebastian M. Schlatt, Timo B. Huebel, Uwe Schmidt+ Copyright : Copyright (C) 2012 Sebastian M. Schlatt, Timo B. Huebel, Uwe Schmidt License : MIT Maintainer : Timo B. Huebel (tbh@holumbus.org)@@ -18,56 +18,92 @@ -- ---------------------------------------------------------------------------- module Holumbus.Index.Common.DocIdMap+ ( DocIdMap+ , emptyDocIdMap+ , singletonDocIdMap+ , nullDocIdMap+ , memberDocIdMap+ , lookupDocIdMap+ , insertDocIdMap+ , deleteDocIdMap+ , insertWithDocIdMap+ , sizeDocIdMap+ , minKeyDocIdMap+ , maxKeyDocIdMap+ , isIntervallDocIdMap+ , unionDocIdMap+ , differenceDocIdMap+ , unionWithDocIdMap+ , intersectionWithDocIdMap+ , differenceWithDocIdMap+ , unionsWithDocIdMap+ , mapDocIdMap+ , filterDocIdMap+ , filterWithKeyDocIdMap+ , mapWithKeyDocIdMap+ , foldDocIdMap+ , foldWithKeyDocIdMap+ , fromListDocIdMap+ , toListDocIdMap+ , keysDocIdMap+ , elemsDocIdMap+ ) where import Control.DeepSeq -import Data.Binary ( Binary (..) )-import qualified- Data.Binary as B-import qualified- Data.EnumMap as IM+import Data.Binary ( Binary (..) )+import qualified Data.Binary as B+import qualified Data.EnumMap as IM+import Data.Foldable import Holumbus.Index.Common.DocId --- import Text.XML.HXT.Core- -- ------------------------------------------------------------ -type DocIdMap v = IM.EnumMap DocId v+newtype DocIdMap v = DIM { unDIM :: IM.EnumMap DocId v }+ deriving (Eq, Show, Foldable) +liftDIM :: (IM.EnumMap DocId v -> IM.EnumMap DocId r) ->+ (DocIdMap v -> DocIdMap r)+liftDIM f = DIM . f . unDIM++liftDIM2 :: (IM.EnumMap DocId v -> IM.EnumMap DocId v -> IM.EnumMap DocId v) ->+ (DocIdMap v -> DocIdMap v -> DocIdMap v)+liftDIM2 f x y = DIM $ f (unDIM x) (unDIM y)+ emptyDocIdMap :: DocIdMap v-emptyDocIdMap = IM.empty+emptyDocIdMap = DIM $ IM.empty singletonDocIdMap :: DocId -> v -> DocIdMap v singletonDocIdMap d v = insertDocIdMap d v emptyDocIdMap nullDocIdMap :: DocIdMap v -> Bool-nullDocIdMap = IM.null+nullDocIdMap = IM.null . unDIM memberDocIdMap :: DocId -> DocIdMap v -> Bool-memberDocIdMap = IM.member+memberDocIdMap x = IM.member x . unDIM lookupDocIdMap :: DocId -> DocIdMap v -> Maybe v-lookupDocIdMap = IM.lookup+lookupDocIdMap x = IM.lookup x . unDIM insertDocIdMap :: DocId -> v -> DocIdMap v -> DocIdMap v-insertDocIdMap = IM.insert+insertDocIdMap x y = liftDIM $ IM.insert x y deleteDocIdMap :: DocId -> DocIdMap v -> DocIdMap v-deleteDocIdMap = IM.delete+deleteDocIdMap x = liftDIM $ IM.delete x insertWithDocIdMap :: (v -> v -> v) -> DocId -> v -> DocIdMap v -> DocIdMap v-insertWithDocIdMap = IM.insertWith+insertWithDocIdMap f x y = liftDIM $ IM.insertWith f x y sizeDocIdMap :: DocIdMap v -> Int-sizeDocIdMap = IM.size+sizeDocIdMap = IM.size . unDIM minKeyDocIdMap :: DocIdMap v -> DocId-minKeyDocIdMap = maybe nullDocId (fst . fst) . IM.minViewWithKey+minKeyDocIdMap = maybe nullDocId (fst . fst) . IM.minViewWithKey . unDIM maxKeyDocIdMap :: DocIdMap v -> DocId-maxKeyDocIdMap = maybe nullDocId (fst . fst) . IM.maxViewWithKey+maxKeyDocIdMap = maybe nullDocId (fst . fst) . IM.maxViewWithKey . unDIM isIntervallDocIdMap :: DocIdMap v -> Bool isIntervallDocIdMap m = nullDocIdMap m@@ -77,55 +113,92 @@ ) unionDocIdMap :: DocIdMap v -> DocIdMap v -> DocIdMap v-unionDocIdMap = IM.union+unionDocIdMap = liftDIM2 $ IM.union differenceDocIdMap :: DocIdMap v -> DocIdMap v -> DocIdMap v-differenceDocIdMap = IM.difference+differenceDocIdMap = liftDIM2 $ IM.difference unionWithDocIdMap :: (v -> v -> v) -> DocIdMap v -> DocIdMap v -> DocIdMap v-unionWithDocIdMap = IM.unionWith+unionWithDocIdMap f = liftDIM2 $ IM.unionWith f intersectionWithDocIdMap :: (v -> v -> v) -> DocIdMap v -> DocIdMap v -> DocIdMap v-intersectionWithDocIdMap = IM.intersectionWith+intersectionWithDocIdMap f = liftDIM2 $ IM.intersectionWith f +differenceWithDocIdMap :: (v -> v -> Maybe v) -> DocIdMap v -> DocIdMap v -> DocIdMap v+differenceWithDocIdMap f = liftDIM2 $ IM.differenceWith f+ unionsWithDocIdMap :: (v -> v -> v) -> [DocIdMap v] -> DocIdMap v-unionsWithDocIdMap = IM.unionsWith+unionsWithDocIdMap f = DIM . IM.unionsWith f . map unDIM mapDocIdMap :: (v -> r) -> DocIdMap v -> DocIdMap r-mapDocIdMap = IM.map+mapDocIdMap f = liftDIM $ IM.map f filterDocIdMap :: (v -> Bool) -> DocIdMap v -> DocIdMap v-filterDocIdMap = IM.filter+filterDocIdMap p = liftDIM $ IM.filter p filterWithKeyDocIdMap :: (DocId -> v -> Bool) -> DocIdMap v -> DocIdMap v-filterWithKeyDocIdMap = IM.filterWithKey+filterWithKeyDocIdMap p = liftDIM $ IM.filterWithKey p mapWithKeyDocIdMap :: (DocId -> v -> r) -> DocIdMap v -> DocIdMap r-mapWithKeyDocIdMap = IM.mapWithKey+mapWithKeyDocIdMap f = liftDIM $ IM.mapWithKey f foldDocIdMap :: (v -> b -> b) -> b -> DocIdMap v -> b-foldDocIdMap = IM.fold+foldDocIdMap f u = IM.fold f u . unDIM foldWithKeyDocIdMap :: (DocId -> v -> b -> b) -> b -> DocIdMap v -> b-foldWithKeyDocIdMap = IM.foldWithKey+foldWithKeyDocIdMap f u = IM.foldWithKey f u . unDIM fromListDocIdMap :: [(DocId, v)] -> DocIdMap v-fromListDocIdMap = IM.fromList+fromListDocIdMap = DIM . IM.fromList toListDocIdMap :: DocIdMap v -> [(DocId, v)]-toListDocIdMap = IM.toList+toListDocIdMap = IM.toList . unDIM keysDocIdMap :: DocIdMap v -> [DocId]-keysDocIdMap = IM.keys+keysDocIdMap = IM.keys . unDIM elemsDocIdMap :: DocIdMap v -> [v]-elemsDocIdMap = IM.elems+elemsDocIdMap = IM.elems . unDIM instance NFData v => NFData (DocIdMap v) where- rnf m = rnf (IM.toList m)+ rnf = rnf . toListDocIdMap instance Binary v => Binary (DocIdMap v) where- put = B.put . IM.toList- get = B.get >>= return . IM.fromList+ put = B.put . toListDocIdMap+ get = B.get >>= return . fromListDocIdMap+++-- ------------------------------------------------------------++{-# INLINE liftDIM #-}+{-# INLINE liftDIM2 #-}+{-# INLINE emptyDocIdMap #-}+{-# INLINE singletonDocIdMap #-}+{-# INLINE nullDocIdMap #-}+{-# INLINE memberDocIdMap #-}+{-# INLINE lookupDocIdMap #-}+{-# INLINE insertDocIdMap #-}+{-# INLINE deleteDocIdMap #-}+{-# INLINE insertWithDocIdMap #-}+{-# INLINE sizeDocIdMap #-}+{-# INLINE minKeyDocIdMap #-}+{-# INLINE maxKeyDocIdMap #-}+{-# INLINE isIntervallDocIdMap #-}+{-# INLINE unionDocIdMap #-}+{-# INLINE differenceDocIdMap #-}+{-# INLINE unionWithDocIdMap #-}+{-# INLINE intersectionWithDocIdMap #-}+{-# INLINE differenceWithDocIdMap #-}+{-# INLINE unionsWithDocIdMap #-}+{-# INLINE mapDocIdMap #-}+{-# INLINE filterDocIdMap #-}+{-# INLINE filterWithKeyDocIdMap #-}+{-# INLINE mapWithKeyDocIdMap #-}+{-# INLINE foldDocIdMap #-}+{-# INLINE foldWithKeyDocIdMap #-}+{-# INLINE fromListDocIdMap #-}+{-# INLINE toListDocIdMap #-}+{-# INLINE keysDocIdMap #-}+{-# INLINE elemsDocIdMap #-} -- ------------------------------------------------------------
src/Holumbus/Index/Common/Document.hs view
@@ -24,8 +24,6 @@ import Control.DeepSeq import Data.Binary ( Binary (..) )-import qualified- Data.Binary as B import Holumbus.Index.Common.BasicTypes
src/Holumbus/Index/Common/Occurences.hs view
@@ -26,7 +26,6 @@ import qualified Data.Binary as B -import qualified Data.EnumMap as IM import qualified Data.EnumSet as IS import Holumbus.Index.Common.BasicTypes@@ -44,39 +43,40 @@ -- | Create an empty set of positions. emptyOccurrences :: Occurrences-emptyOccurrences = IM.empty+emptyOccurrences = emptyDocIdMap -- | Create an empty set of positions. singletonOccurrence :: DocId -> Position -> Occurrences-singletonOccurrence d p = insertOccurrence d p IM.empty+singletonOccurrence d p = insertOccurrence d p emptyDocIdMap -- | Test on empty set of positions. nullOccurrences :: Occurrences -> Bool-nullOccurrences = IM.null+nullOccurrences = nullDocIdMap -- | Determine the number of positions in a set of occurrences. sizeOccurrences :: Occurrences -> Int-sizeOccurrences = IM.fold ((+) . IS.size) 0+sizeOccurrences = foldDocIdMap ((+) . IS.size) 0 insertOccurrence :: DocId -> Position -> Occurrences -> Occurrences-insertOccurrence d p = IM.insertWith IS.union d (singletonPos p)+insertOccurrence d p = insertWithDocIdMap IS.union d (singletonPos p) deleteOccurrence :: DocId -> Position -> Occurrences -> Occurrences-deleteOccurrence d p = substractOccurrences (IM.singleton d (singletonPos p))+deleteOccurrence d p = substractOccurrences (singletonDocIdMap d (singletonPos p)) updateOccurrences :: (DocId -> DocId) -> Occurrences -> Occurrences-updateOccurrences f = IM.foldWithKey (\ d ps res -> IM.insertWith IS.union (f d) ps res) emptyOccurrences+updateOccurrences f = foldWithKeyDocIdMap+ (\ d ps res -> insertWithDocIdMap IS.union (f d) ps res) emptyOccurrences -- | Merge two occurrences. mergeOccurrences :: Occurrences -> Occurrences -> Occurrences-mergeOccurrences = IM.unionWith IS.union+mergeOccurrences = unionWithDocIdMap IS.union diffOccurrences :: Occurrences -> Occurrences -> Occurrences-diffOccurrences = IM.difference+diffOccurrences = differenceDocIdMap -- | Substract occurrences from some other occurrences. substractOccurrences :: Occurrences -> Occurrences -> Occurrences-substractOccurrences = IM.differenceWith substractPositions+substractOccurrences = differenceWithDocIdMap substractPositions where substractPositions p1 p2 = if IS.null diffPos@@ -88,7 +88,7 @@ -- | The XML pickler for the occurrences of a word. xpOccurrences :: PU Occurrences-xpOccurrences = xpWrap (IM.fromList, IM.toList)+xpOccurrences = xpWrap (fromListDocIdMap, toListDocIdMap) (xpList xpOccurrence) where xpOccurrence = xpElem "doc" $
src/Holumbus/Index/Common/RawResult.hs view
@@ -1,4 +1,4 @@-{-# OPTIONS #-} {-XMultiParamTypeClasses -XFlexibleContexts -XFlexibleInstances -XGeneralizedNewtypeDeriving -XTypeSynonymInstances -fno-warn-orphans #-}+{-# OPTIONS #-} -- ---------------------------------------------------------------------------- @@ -20,8 +20,6 @@ module Holumbus.Index.Common.RawResult where -import qualified Data.EnumMap as IM- import Data.Map (Map) import qualified Data.Map as M @@ -46,7 +44,7 @@ resultByDocument :: Context -> RawResult -> DocIdMap (Map Context (Map Word Positions)) resultByDocument c os = mapDocIdMap transform $- IM.unionsWith (flip $ (:) . head) (map insertWords os)+ unionsWithDocIdMap (flip $ (:) . head) (map insertWords os) where insertWords (w, o) = mapDocIdMap (\p -> [(w, p)]) o transform w = M.singleton c (M.fromList w)
src/Holumbus/Index/CompactDocuments.hs view
@@ -1,4 +1,5 @@-{-# OPTIONS -XFlexibleInstances -XMultiParamTypeClasses #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE MultiParamTypeClasses #-} -- ----------------------------------------------------------------------------
src/Holumbus/Index/CompactSmallDocuments.hs view
@@ -1,4 +1,5 @@-{-# OPTIONS -XFlexibleInstances -XMultiParamTypeClasses #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE MultiParamTypeClasses #-} -- ----------------------------------------------------------------------------
src/Holumbus/Index/Inverted/CompressedPrefixMem.hs view
@@ -1,3 +1,5 @@+{-# OPTIONS #-}+ module Holumbus.Index.Inverted.CompressedPrefixMem ( Inverted(..) , Parts
src/Holumbus/Index/Inverted/PrefixMem.hs view
@@ -1,3 +1,5 @@+{-# OPTIONS #-}+ -- ---------------------------------------------------------------------------- {- |@@ -19,8 +21,6 @@ -} -- ------------------------------------------------------------------------------{-# OPTIONS -XTypeSynonymInstances -XFlexibleInstances -XMultiParamTypeClasses #-} module Holumbus.Index.Inverted.PrefixMem (