(eval-when (:compile-toplevel :load-toplevel :execute) (require :montezuma)) (defpackage :montezuma-test (:use :cl) (:export #:add-dir-to-index #:search-index #:optimize-index)) (in-package :montezuma-test) ;; maybe this isn't a fast way to read a file (defun slurp-file (filename) (with-open-file (stream filename :direction :input :external-format :latin-1) (let ((seq (make-string (file-length stream)))) (read-sequence seq stream) seq))) (defparameter *index* (make-instance 'montezuma:index :path "/tmp/montezuma-test" :analyzer (make-instance 'montezuma:whitespace-analyzer) :min-merge-docs 500 :default-field "*" :fields '("file" "content"))) (defun add-dir-to-index (dir-name) (cl-fad:walk-directory dir-name #'(lambda (file) (montezuma:add-document-to-index *index* `(("file" . ,(princ-to-string file)) ("content" . ,(slurp-file file))))))) (defun optimize-index () (montezuma:optimize *index*)) (defun search-index (keyword) (montezuma:search-each *index* keyword #'(lambda (doc score) (format t "~&~a score: ~a" (montezuma:document-value (montezuma:get-document *index* doc) "file") score))))