;;; guile-xapian --- Guile bindings for Xapian ;;; Copyright © 2020 Arun Isaac ;;; ;;; 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 ;;; . (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)))