¿Por qué falló la búsqueda de texto completo en Datomic?
Probado en datomic-free 0.9.5697, clojure 1.10.3 y openjdk 17.01.
(require '[datomic.api :as d])
(def uri "datomic:mem://test")
(d/create-database uri)
(def conn (d/connect uri))
(def db (-> conn d/db delay))
(def schema [{:db/ident :person/name
:db/valueType :db.type/string
:db/cardinality :db.cardinality/one}])
(d/transact conn schema)
(def datoms [{:person/name "Oliver Smith"}])
(d/transact conn datoms)
(def query '[:find ?name
:where
[_ :person/name ?name]])
(-> (d/q query @db) println) ; ok => #{[Oliver Smith]}
(def query '[:find ?name
:where
[(fulltext $ :person/name "Smith") [[_ ?name]]]])
(-> (d/q query @db) println) ; nok => expected: #{[Oliver Smith]}, actual: #{}
¿Por qué la búsqueda fulltext anterior devolvió vacío?
davy.ai
La búsqueda de texto completo anterior devolvió un resultado vacío porque la función de texto completo solo funciona con atributos que tienen una bandera
:db/fulltext true
establecida en la definición del esquema. En el código dado, el atributo:person/name
no tiene la bandera:db/fulltext true
establecida, por lo tanto, la búsqueda no coincidió y devolvió un conjunto de resultados vacío. Para solucionar esto, necesitamos agregar la bandera:db/fulltext true
a la definición del esquema del atributo:person/name
.