datomic - Datomic 中的 SQL LIKE 运算符

标签 datomic

我想运行一个sql查询,给定一个搜索关键字,将找到所有用户,他们的名字与该模式匹配。即在原始 SQL 中,类似于 WHERE users.name LIKE "%foo%"

我该怎么做呢?

当前查询结构 ->

(defn find-users [db, search]
  (->> (d/q '[:find ?u :where
              [?u :user/uuid ?id]
              [?u :user/name ..]
            db)
      (map first)))

最佳答案

我用的就是这个。也许您可以根据您的需要进行调整。

(defn find-items "Full text search titles and descriptions for [search-term]" [search-term]

    (let [keyys [:item-id :title :description]
          rules '[[(finditem ?item ?term) [(fulltext $ :item/title ?term) [[?item ?name]]]]
                  [(finditem ?item ?term) [(fulltext $ :item/description ?term) [[?item ?name]]]]]
          items (d/q '[:find ?item ?title ?description 
                       :in $ ?term % 
                       :where 
                       (finditem ?item ?term) 
                       [?item :item/title ?title] 
                       [?item :item/description ?description]]
                     (d/db db/CONN) 
                     search-term rules)]
       (map #(zipmap keyys %) items)))

这使用规则,您可以在此处阅读:http://docs.datomic.com/query.html 。规则相当于一个很好的 SQL OR 等效项,这就是我在上面的示例中大海捞针的方式。

关于datomic - Datomic 中的 SQL LIKE 运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24745383/

相关文章:

java - 连接 Datomic 数据库时出错

scalability - 数据原子和写入可扩展性

consistency - Datomic:在 Peer 上,Connection.db() 是否在 Connection.transact() 之后读取您的写入

clojure - 在datomic中,如何找出哪些键可用于反向查找?

clojure - Datomic Pull API 仅检索一个实体

clojure - 在 Datomic 中,在没有撤回的情况下查询字段历史记录?

clojure - 有没有一种规范的方法可以从特定的原子命名空间中获取所有标识?

java - 设置 Datomic 类路径函数以供 Windows 中的事务处理程序使用

clojure - "SSL doesn' t have a valid keystore"尝试连接到 Datomic Cloud 时出错

windows - Datomic dev-local 可以安装在 Windows 上吗?