Clojure Datomic:不区分大小写的查询

Clojure Datomic:不区分大小写的查询,clojure,datomic,Clojure,Datomic,我是Datomic的新手,我正在努力理解如何进行不区分大小写的查询 例如: [:find (pull ?u [:user/email]) :where [?u :user/email "user1@example.net"]] 返回: {:user/email "user1@example.net"} 我希望此查询为指定为“”的电子邮件返回相同的值USER1@example.net但Datomic正在对电子邮件进行区分大小写的比较,如图所示 [:find (pull ?u [:us

我是Datomic的新手,我正在努力理解如何进行不区分大小写的查询

例如:

[:find (pull ?u [:user/email])
     :where [?u :user/email "user1@example.net"]]
返回:

{:user/email "user1@example.net"}
我希望此查询为指定为“”的电子邮件返回相同的值USER1@example.net但Datomic正在对电子邮件进行区分大小写的比较,如图所示

[:find (pull ?u [:user/email])
     :where [?u :user/email "USER1@example.net"]]
返回:

Nothing

关于形成查询以便进行区分大小写的比较的最佳方法有何建议?

要执行不区分大小写的查询,我使用Clojure
re find
函数形成查询,对传递的电子邮件执行不区分大小写的正则表达式匹配,如下所示:

  [:find (pull ?u [:user/email])
  :where
  [?u :user/email ?email]
  [(re-find #"(?i)USER1@example.net" ?email)]
  ] db)
现在返回:

   {:user/email "user1@example.net"}

只需将查询字符串和数据库项转换为小写

   (defn case-insensitive-get-email
      [email]
      (d/q '[:find ?lowercaseEmail .
             :in $ ?email
             :where
             [?e :user/email ?originalEmail]
             [(.toLowerCase ^String ?originalEmail) ?lowercaseEmail]
             [(= ?lowercaseEmail ?email)]]
      db (.toLowerCase email)
           )
      )
然后

(不区分大小写获取电子邮件)USER1@example.net“”

意志 返回

"user1@example.net"