blob: eef075f75c711799ce71c83fe591723a4c9ab63b (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
|
;;; guile-xapian --- Guile bindings for Xapian
;;; Copyright © 2020, 2021 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 (pagesize 10))
;; Open database for reading. call-with-database automatically
;; closes the database once we're done.
(call-with-database dbpath
(lambda (db)
(let (;; Parse querystring passing a stemmer and suitable
;; prefixes for field search.
(query (parse-query querystring
#:stemmer (make-stem "en")
#:prefixes '(("title" . "S")
("description" . "XD")))))
;; Fold over the results, printing them.
(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
;; Get an Enquire object from the database with the
;; search results. Then, extract the MSet from the
;; Enquire object.
(enquire-mset (enquire db query)
#:maximum-items pagesize))))))
;; Handle command line arguments
(match (command-line)
((_ dbpath . query-terms)
(search dbpath (string-join query-terms)))
((program . _)
(format (current-error-port) "Usage: ~a DBPATH QUERYTERM...~%" program)))
|