(ns luduverse.search (:require [clojurewerkz.elastisch.rest :as el] [clojurewerkz.elastisch.rest.index :as eli] [clojurewerkz.elastisch.rest.document :as eld] [clojurewerkz.elastisch.rest.response :as elresp] [clojurewerkz.elastisch.query :as elq] [luduverse.models.entry :as entry])) (def connection (atom (el/connect "http://localhost:9200"))) (defn recreate-index [] (eli/delete @connection "luduverse") (eli/create @connection "luduverse" :mappings {"entry" {:properties {:query {:type "string"} :ld_uid {:type "integer" :store "yes"} :id {:type "integer" :store "yes"} :title {:type "string" :store "yes"} :description {:type "string"} :type {:type "string" :store "yes"} :username {:type "string" :store "yes"} :theme {:type "string" :store "yes"}}}})) (defn store [entry-id] (let [data (entry/by-id entry-id) query-string (str (:ld_uid data) " " (:title data) " " (:username data) " " (:type data) " " (:theme data) " " (:description data))] (eld/create @connection "luduverse" "entry" {:query query-string :ld_uid (:ld_uid data) :id (:id data) :title (:title data) :description (:description data) :type (:type data) :username (:username data) :theme (:theme data)}))) (defn store-all [] ; TODO: Delete all entries before (doseq [e (entry/all)] (store (:id e)))) (defn search [term] (let [con (el/connect "http://localhost:9200") res (eld/search con "luduverse" "entry" :query (elq/query-string :query term) :sort {:title "desc"} :from 0 :size 50) number-of-hits (elresp/total-hits res) hits (elresp/hits-from res)] {:hit-count number-of-hits :results hits}))