61 lines
2.0 KiB
Clojure
61 lines
2.0 KiB
Clojure
;; This buffer is for Clojure experiments and evaluation.
|
|
|
|
;; Press C-j to evaluate the last expression.
|
|
|
|
;; You can also press C-u C-j to evaluate the expression and pretty-print its result.
|
|
|
|
(require '[clj-http.client :as client])
|
|
(require ' [clojure.data.json :as json])
|
|
|
|
|
|
(defn upsert-schema []
|
|
(client/post
|
|
"http://localhost:8983/solr/gettingstarted/schema"
|
|
{:headers {"Content-Type" "application/json"}
|
|
:method "POST"
|
|
:body (json/write-str {"add-field" [{"name" "client-id"
|
|
"type" "string"}
|
|
{"name" "order-date"
|
|
"type" "pdate"}]})
|
|
}))
|
|
|
|
(defn load-sales-orders []
|
|
(clojure.pprint/pprint
|
|
(doseq [[client code] (dc/q '[:find ?c ?code :where [?c :client/code ?code]] (dc/db conn))
|
|
:let [_ (println "loading" code)]
|
|
|
|
batch (->> (dc/qseq '[:find ?so ?date ?client-id
|
|
:in $ ?client-id
|
|
:where
|
|
[?so :sales-order/client ?client-id]
|
|
[?so :sales-order/date ?date]
|
|
]
|
|
(dc/db conn)
|
|
client)
|
|
(map (fn [[so date client-id]]
|
|
{"id" so
|
|
"order-date" (str date)
|
|
"client-id" (str client-id)}))
|
|
(partition-all 1000)
|
|
)]
|
|
(print ".")
|
|
(flush)
|
|
(client/post
|
|
"http://localhost:8983/solr/gettingstarted/update?commitWithin=60000"
|
|
{:headers {"Content-Type" "application/json"}
|
|
:method "POST"
|
|
:body (json/write-str batch)}))))
|
|
|
|
|
|
(comment
|
|
(try
|
|
(upsert-schema)
|
|
(catch Exception e
|
|
(println e)))
|
|
|
|
(load-sales-orders)
|
|
|
|
(dc/pull (dc/db conn) '[:client/code :db/id] [:client/code "NGOP"])
|
|
|
|
)
|