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)))
|