aboutsummaryrefslogtreecommitdiff
path: root/examples/index.scm
blob: 396df7cfc6b792168f917ffa51eccdb7aed9627b (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
;;; 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 match)
             (srfi srfi-26)
             (xapian xapian))

(define (index datapath dbpath)
  (call-with-writable-database dbpath
    (lambda (db)
      (for-each
       (lambda (record)
         (match record
           ((description title identifier)
            (let* ((idterm (string-append "Q" identifier))
                   (doc (make-document #:data (call-with-output-string (cut write record <>))
                                       #:terms `((,idterm . 0))))
                   (term-generator (make-term-generator #:stem (make-stem "en")
                                                        #:document doc)))
              (index-text! term-generator title #:prefix "S")
              (index-text! term-generator description #:prefix "XD")
              (index-text! term-generator title)
              (increase-termpos! term-generator)
              (index-text! term-generator description)
              (replace-document! db idterm doc)))))
       (call-with-input-file datapath read)))))

(match (command-line)
  ((_ datapath dbpath)
   (index datapath dbpath))
  ((program . _)
   (format (current-error-port) "Usage: ~a DATAPATH DBPATH~%" program)))