首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Haskell Persistent BackendFilter

Haskell Persistent BackendFilter
EN

Stack Overflow用户
提问于 2018-07-09 14:40:55
回答 0查看 102关注 0票数 0

我正在尝试使用Sqlite3 FTS3/4表的持久化(在Yesod中)的match操作符。

我已经成功地创建了自己的匹配运算符:

代码语言:javascript
运行
复制
-- | Implements the `match` operator. This operator is specific to Sqlite3 and
--   is used to look for keywords in FTS3/4/5 tables.
match :: EntityField record Text    -- ^ Field to filter on
      -> Text                       -- ^ Text to compare with
      -> Filter record              -- ^ Resulting filter
match field val = Filter field (Left val) (BackendSpecificFilter "match")

它工作得很好,但不允许使用非常具体的(奇怪?)Sqlite3 FTS3/4表的特性:您可以指定表名,而不仅仅是列名。其效果是match操作符将在表的每一列中查找搜索到的术语。

这意味着您可以编写如下查询:

代码语言:javascript
运行
复制
SELECT *
FROM   tablename
WHERE  tablename MATCH "hello";

Sqlite3 FTS3/4 documentation https://sqlite.org/fts3.html#simple_fts_queries》中介绍了此类查询

阅读持久化文档和Filter定义,可以使用BackendFilter创建此过滤器,但我还没有找到实际使用它的任何示例。

同样让我困惑的是在PersistFilter中用作构造函数的类型族BackendSpecificFilter的使用。

我希望能够编写如下查询:

代码语言:javascript
运行
复制
mkPersist persistSettings [persist|
    User
        forename String
        surname String
        bio String
|]

users <- runDB $ selectList [ User `matchAll` searchedTerms ] []

有人能告诉我在这种情况下使用BackFilter的正确方法吗?

谢谢

EN

回答

页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51239487

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档