diff options
author | Arun Isaac <arunisaac@systemreboot.net> | 2020-02-28 02:11:50 +0530 |
---|---|---|
committer | Guix Patches Tester <> | 2020-02-27 20:44:11 +0000 |
commit | 7b4c903e337d004677ed22b13ba74c0e28dc302d (patch) | |
tree | c5578664dad6313eb3a2448f831186488801eae0 /gnu | |
parent | 810e6c096ec7961962fdecece0ead0a010d7dd2a (diff) | |
download | patches-series-3037.tar patches-series-3037.tar.gz |
gnu: Use xapian index for package search.series-3037
* gnu/packages.scm (search-package-index): New function.
* guix/scripts/package.scm (find-packages-by-description): Search using the
xapian package index if search patterns are literal strings. Else, search
using fold-packages.
Diffstat (limited to 'gnu')
-rw-r--r-- | gnu/packages.scm | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/gnu/packages.scm b/gnu/packages.scm index e91753e2a8..5b5b29bf84 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: ;;; @@ -453,6 +454,20 @@ reducing the memory footprint." db-path) +(define (search-package-index profile querystring) + (let ((offset 0) + (pagesize 10)) + (call-with-database (string-append profile %package-search-index) + (lambda (db) + (let ((query (parse-query querystring #:stemmer (make-stem "en")))) + (mset-fold (lambda (item result) + (match (find-packages-by-name + (document-data (mset-item-document item))) + ((package _ ...) + (append result `((,package . ,(mset-item-weight item))))))) + '() + (enquire-mset (enquire db query) offset pagesize))))))) + (define %sigint-prompt ;; The prompt to jump to upon SIGINT. |