module Text.Search.Sphinx.Types where
import Data.ByteString.Lazy (ByteString)
import Data.Int (Int64)
data SearchdCommand = ScSearch
| ScExcerpt
| ScUpdate
| ScKeywords
deriving (Show, Enum)
searchdCommand :: SearchdCommand -> Int
searchdCommand = fromEnum
data VerCommand = VcSearch
| VcExcerpt
| VcUpdate
| VcKeywords
deriving (Show)
verCommand VcSearch = 0x113
verCommand VcExcerpt = 0x100
verCommand VcUpdate = 0x101
verCommand VcKeywords = 0x100
data Searchd = Ok
| Error
| Retry
| Warning
deriving (Show, Enum)
searchd :: Searchd -> Int
searchd = fromEnum
data MatchMode = All
| Any
| Phrase
| Boolean
| Extended
| Fullscan
| Extended2
deriving (Show, Enum)
matchMode :: MatchMode -> Int
matchMode = fromEnum
data Rank = ProximityBm25
| Bm25
| None
| WordCount
deriving (Show, Enum)
rank :: Rank -> Int
rank = fromEnum
data Sort = Relevance
| AttrDesc
| AttrAsc
| TimeSegments
| SortExtended
| Expr
deriving (Show, Enum)
sort :: Sort -> Int
sort = fromEnum
data Filter = Values
| Range
| FloatRange
deriving (Show, Enum)
filter :: Filter -> Int
filter = fromEnum
data AttrT = AttrTInteger
| AttrTTimestamp
| AttrTOrdinal
| AttrTBool
| AttrTFloat
| AttrTMulti
deriving (Show)
instance Enum AttrT where
toEnum = toAttrT
fromEnum = attrT
toAttrT 1 = AttrTInteger
toAttrT 2 = AttrTTimestamp
toAttrT 3 = AttrTOrdinal
toAttrT 4 = AttrTBool
toAttrT 5 = AttrTFloat
toAttrT 0x40000000 = AttrTMulti
attrT AttrTInteger = 1
attrT AttrTTimestamp = 2
attrT AttrTOrdinal = 3
attrT AttrTBool = 4
attrT AttrTFloat = 5
attrT AttrTMulti = 0x40000000
data GroupByFunction = Day
| Week
| Month
| Year
| Attr
| AttrPair
deriving (Show, Enum)
groupByFunction :: GroupByFunction -> Int
groupByFunction = fromEnum
data SearchResult = SearchResult {
matches :: [Match]
, total :: Int
, totalFound :: Int
, words :: [(ByteString, Int, Int)]
}
deriving Show
data Match = Match {
documentId :: Int64
, documentWeight :: Int
, attributeValues :: [Attr]
}
deriving Show
data Attr = AttrMulti [Int]
| AttrNum Int
deriving Show