Function: nnir-run-hyrex
nnir-run-hyrex is a byte-compiled function defined in nnir.el.gz.
Signature
(nnir-run-hyrex QUERY SERVER &optional GROUP)
Documentation
Run given QUERY with GROUP on SERVER against hyrex.
Source Code
;; Defined in /usr/src/emacs/lisp/obsolete/nnir.el.gz
;; HyREX interface
(defun nnir-run-hyrex (query server &optional group)
"Run given QUERY with GROUP on SERVER against hyrex."
(save-excursion
(let ((artlist nil)
(groupspec (cdr (assq 'hyrex-group query)))
(qstring (cdr (assq 'query query)))
(prefix (nnir-read-server-parm 'nnir-hyrex-remove-prefix server))
score artno dirnam)
(when (and (not groupspec) group)
(setq groupspec
(regexp-opt
(mapcar (lambda (x) (gnus-group-real-name x)) group))))
(set-buffer (gnus-get-buffer-create nnir-tmp-buffer))
(erase-buffer)
(message "Doing hyrex-search query %s..." query)
(let* ((cp-list
`( ,nnir-hyrex-program
nil ; input from /dev/null
t ; output
nil ; don't redisplay
"-i",(nnir-read-server-parm 'nnir-hyrex-index-directory server) ; index directory
,@(nnir-read-server-parm 'nnir-hyrex-additional-switches server)
,qstring ; the query, in hyrex-search format
))
(exitstatus
(progn
(message "%s args: %s" nnir-hyrex-program
(mapconcat #'identity (nthcdr 4 cp-list) " "))
(apply #'call-process cp-list))))
(unless (or (null exitstatus)
(zerop exitstatus))
(nnheader-report 'nnir "Couldn't run hyrex-search: %s" exitstatus)
;; nnir-search failure reason is in this buffer, show it if
;; the user wants it.
(when (> gnus-verbose 6)
(display-buffer nnir-tmp-buffer)))) ;; FIXME: Don't clear buffer !
(message "Doing hyrex-search query \"%s\"...done" qstring)
(sit-for 0)
;; nnir-search returns:
;; for nnml/nnfolder: "filename mailid weight"
;; for nnimap: "group mailid weight"
(goto-char (point-min))
(delete-non-matching-lines "^\\S + [0-9]+ [0-9]+$")
;; HyREX doesn't search directly in groups -- so filter out here.
(when groupspec
(keep-lines groupspec))
;; extract data from result lines
(goto-char (point-min))
(while (re-search-forward
"\\(\\S +\\) \\([0-9]+\\) \\([0-9]+\\)" nil t)
(setq dirnam (match-string 1)
artno (match-string 2)
score (match-string 3))
(when (string-match prefix dirnam)
(setq dirnam (replace-match "" t t dirnam)))
(push (vector (gnus-group-full-name
(string-replace "/" "." dirnam) server)
(string-to-number artno)
(string-to-number score))
artlist))
(message "Massaging hyrex-search output...done.")
(apply #'vector
(sort artlist
(lambda (x y)
(if (string-lessp (nnir-artitem-group x)
(nnir-artitem-group y))
t
(< (nnir-artitem-number x)
(nnir-artitem-number y))))))
)))