| Safe Haskell | None |
|---|
Data.TCache.IndexText
Description
Implements full text indexation (indexText) and text search(contains), as an addition to
the query language implemented in IndexQuery
it also can index the lists of elements in a field (with indexList)
so that it is possible to ask for the registers that contains a given element
in the given field (with containsElem)
An example of full text search i before and after an update in the text field
data Doc= Doc{title, body :: String} deriving (Read,Show, Typeable)
instance Indexable Doc where
key Doc{title=t}= t
instance Serializable Doc where
serialize= pack . show
deserialize= read . unpack
main= do
indexText body T.pack
let doc= Doc{title= title, body= "hola que tal estamos"}
rdoc <- atomically $ newDBRef doc
r1 <- atomically $ select title $ body `'contains'\` "hola que tal"
print r1
atomically $ writeDBRef rdoc doc{ body= que tal}
r <- atomically $ select title $ body `'contains'\` "hola que tal"
print r
if r1 == [title doc] then print "OK" else print "FAIL"
if r== [] then print "OK" else print "FAIL"
- indexText :: (IResource a, Typeable a, Typeable b) => (a -> b) -> (b -> Text) -> IO ()
- indexList :: (IResource a, Typeable a, Typeable b) => (a -> b) -> (b -> [Text]) -> IO ()
- contains :: (IResource a, Typeable a, Typeable b) => (a -> b) -> String -> STM [DBRef a]
- containsElem :: (IResource a, Typeable a, Typeable b) => (a -> b) -> String -> STM [DBRef a]
Documentation
Arguments
| :: (IResource a, Typeable a, Typeable b) | |
| => (a -> b) | field to index |
| -> (b -> Text) | method to convert the field content to lazy Text (for example |
| -> IO () |
start a trigger to index the contents of a register field
Arguments
| :: (IResource a, Typeable a, Typeable b) | |
| => (a -> b) | field to index |
| -> (b -> [Text]) | method to convert a field element to Text (for example `pack . show` in case of elemets with Show instances) |
| -> IO () |
trigger the indexation of list fields with elements convertible to Text