(eval-when (:compile-toplevel :load-toplevel :execute) (require :montezuma)) (defpackage :montezuma-test (:use :cl) (:export #:add-dir-to-index #:search-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) (let ((seq (make-string (file-length stream)))) (read-sequence seq stream) seq))) (defparameter *index* (make-instance 'montezuma:index :path "/tmp/montezuma-test")) (defun add-dir-to-index (dir-name) (cl-fad:walk-directory dir-name #'(lambda (file) (ignore-errors (montezuma:add-document-to-index *index* `(("file" . ,(princ-to-string file)) ("content" . ,(slurp-file file)))))))) (defun search-index (keyword) (montezuma:search-each *index* (concatenate 'string "content:" keyword) #'(lambda (doc score) (format t "~a score: ~a~n" (montezuma:document-value (montezuma:get-document *index* doc) "file") score))))