diff options
author | Arun Isaac <arunisaac@systemreboot.net> | 2020-03-07 19:01:16 +0530 |
---|---|---|
committer | Guix Patches Tester <> | 2020-03-07 13:33:14 +0000 |
commit | a84513a496349455fc8944c505bade9d35428a12 (patch) | |
tree | f1609da5f613aeba2754de2476866019d0fc8006 /gnu/packages.scm | |
parent | c32a5b44aadb89b818d4a7c317443b376afdd22f (diff) | |
download | guix-patches-a84513a496349455fc8944c505bade9d35428a12.tar guix-patches-a84513a496349455fc8944c505bade9d35428a12.tar.gz |
gnu: Use Xapian index for package search.
* gnu/packages.scm (search-package-index): New function.
* guix/ui.scm (display-package-search-results): New function.
* guix/scripts/package.scm (process-query): Search using the Xapian package
index if current profile is available. Else, search using regexps.
Diffstat (limited to 'gnu/packages.scm')
-rw-r--r-- | gnu/packages.scm | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/gnu/packages.scm b/gnu/packages.scm index c8e221de68..3cbd7c63e3 100644 --- a/gnu/packages.scm +++ b/gnu/packages.scm @@ -67,7 +67,8 @@ specifications->manifest generate-package-cache - generate-package-search-index)) + generate-package-search-index + search-package-index)) ;;; Commentary: ;;; @@ -466,6 +467,25 @@ reducing the memory footprint." db-path) +(define (search-package-index profile query-string) + "Search Xapian index in PROFILE for packages matching the Xapian query +QUERY-STRING. Return a list of search result texts each corresponding to one +matching package." + (call-with-database (string-append profile %package-search-index) + (lambda (db) + (let ((query (parse-query query-string #:stemmer (make-stem "en")))) + (mset-fold (lambda (item result) + (let ((search-result-text + (call-with-output-string + (cut format <> "~a~%relevance: ~a~%~%" + (document-data (mset-item-document item)) + ;; Round score to one decimal place. + (/ (round (* 10 (mset-item-weight item))) 10))))) + (append result (list search-result-text)))) + '() + (enquire-mset (enquire db query) + #:maximum-items (database-document-count db))))))) + (define %sigint-prompt ;; The prompt to jump to upon SIGINT. |