 
 
 (defn lower-words [x]
-  (set (remove str/blank? (str/split (.toLowerCase x) #"[ ,.]"))))
+  (set/difference
+   (set (remove str/blank? (str/split (.toLowerCase (or x "")) #"[ ,.()-]")))
+   #{"the"}))
 
 (def adjuncts
-  {:author {:tokenize-tags (comp lower-words :author)
+  {:artist {:tokenize-tags (comp #'lower-words :artist)
             :tokenize-query lower-words}
-   :title {:tokenize-tags (comp lower-words :title)
+   :album {:tokenize-tags (comp #'lower-words :album)
+           :tokenize-query lower-words}
+   :title {:tokenize-tags (comp #'lower-words :title)
            :tokenize-query lower-words}
    })
 

;; and have the end result attached to the primary index
;; somehow

;; XXX async updates have to fit into this somehow eventually

;;;
;; the main index maps from pathname to hash of tags

(defn open-index [name]

              (reduce (fn [m [k v]] (assoc m k v))
                      {}
                      (take-while identity forms))))
          {})
        adjunct-maps (adjunctivize name-map)
        ]
    (or (.isDirectory folder) (.mkdir folder))
    (or (.exists logfile) (.createNewFile logfile))
    {:folder folder :log logfile :data (atom name-map) :adjuncts adjunct-maps}
    ))

(defonce the-index (atom nil))
