diff options
Diffstat (limited to 'examples/search.scm')
-rw-r--r-- | examples/search.scm | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/examples/search.scm b/examples/search.scm new file mode 100644 index 0000000..4b58313 --- /dev/null +++ b/examples/search.scm @@ -0,0 +1,50 @@ +;;; guile-xapian --- Guile bindings for Xapian +;;; Copyright © 2020 Arun Isaac <arunisaac@systemreboot.net> +;;; +;;; This file is part of guile-xapian. +;;; +;;; guile-xapian is free software: you can redistribute it and/or +;;; modify it under the terms of the GNU General Public License as +;;; published by the Free Software Foundation, either version 2 of the +;;; License, or (at your option) any later version. +;;; +;;; guile-xapian is distributed in the hope that it will be useful, +;;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +;;; General Public License for more details. +;;; +;;; You should have received a copy of the GNU General Public License +;;; along with guile-xapian. If not, see +;;; <https://www.gnu.org/licenses/>. + +(use-modules (ice-9 format) + (ice-9 match) + (xapian xapian)) + +(define (get-title record) + (match record + ((description title identifier) title))) + +(define* (search dbpath querystring #:key (offset 0) (pagesize 10)) + (call-with-database dbpath + (lambda (db) + (let ((query (parse-query querystring + #:stemmer (make-stem "en") + #:prefixes '(("title" ."S") + ("description" . "XD"))))) + (mset-fold (lambda (item _) + (format #t "~a: #~3,'0d ~a~%" + (mset-item-rank item) + (mset-item-docid item) + (get-title + (call-with-input-string + (document-data (mset-item-document item)) + read)))) + #f + (enquire-mset (enquire db query) offset pagesize)))))) + +(match (command-line) + ((_ dbpath . query-terms) + (search dbpath (string-join query-terms))) + ((program . _) + (format (current-error-port) "Usage: ~a DBPATH QUERYTERM...~%" program))) |