强曰为道
与天地相似,故不违。知周乎万物,而道济天下,故不过。旁行而不流,乐天知命,故不忧.
文档目录

Buku 书签管理完全指南 / 第 04 章:搜索详解

第 04 章:搜索详解

深入掌握 Buku 的搜索功能,包括正则表达式、模糊搜索、标签搜索和组合搜索。

4.1 搜索概览

Buku 提供多层次的搜索能力,从简单的关键词匹配到复杂的正则表达式,满足不同场景的需求。

搜索命令对比

命令搜索方式搜索范围说明
buku -s keyword精确匹配标题+URL+标签基本搜索
buku -st ,tag标签精确匹配仅标签标签搜索
buku -S keyword模糊匹配标题+URL+标签容错搜索
buku -s "/regex/"正则匹配标题+URL+标签正则搜索
buku -s keyword -x ,tag组合搜索排除特定标签排除搜索

搜索范围

┌────────────────────────────────────────────────────────┐
│                Buku 搜索范围示意                         │
├────────────────────────────────────────────────────────┤
│                                                        │
│  书签记录:                                               │
│  ┌──────────────────────────────────────────────────┐  │
│  │ URL:      https://github.com/jarun/buku          │  │
│  │ 标题:     Buku - 命令行书签管理器                   │  │
│  │ 标签:     ,bookmark,cli,python,open-source,       │  │
│  │ 描述:     A powerful bookmark manager             │  │
│  └──────────────────────────────────────────────────┘  │
│       │           │            │           │           │
│       ▼           ▼            ▼           ▼           │
│    URL搜索    标题搜索      标签搜索    描述搜索          │
│    (-s)       (-s)          (-st)       (-s)           │
│                                                        │
│  默认搜索 (-s) 会同时搜索 URL、标题和标签                    │
│  标签搜索 (-st) 仅搜索标签字段                             │
│  描述搜索 包含在 -s 的搜索范围内                            │
└────────────────────────────────────────────────────────┘

4.2 基本关键词搜索

单关键词搜索

# 搜索包含 "python" 的书签(标题或 URL)
buku -s python

# 输出示例:
# 1. Python 官方文档
#    https://docs.python.org
#    标签: ,python,doc,reference,
#
# 5. Buku - 命令行书签管理器
#    https://github.com/jarun/buku
#    标签: ,bookmark,cli,python,

多关键词搜索

# 搜索同时包含多个关键词的书签(AND 逻辑)
buku -s python tutorial
# 匹配: 同时包含 "python" 和 "tutorial"

# 搜索包含 "python" 和 "doc" 的书签
buku -s python doc

搜索不区分大小写

# 以下搜索结果相同
buku -s python
buku -s Python
buku -s PYTHON

搜索标签

# 搜索标签为 "python" 的书签
buku -s ,python
# 注意:逗号开头表示标签搜索

# 等价于
buku -st ,python

4.3 正则表达式搜索

Buku 支持使用正则表达式进行高级搜索,正则表达式需要用斜杠 / 包围。

基本正则语法

# 正则表达式搜索格式
buku -s "/pattern/"

# 搜索以 https 开头的书签
buku -s "/^https/"

# 搜索包含 .org 或 .edu 的 URL
buku -s "/\.org|\.edu/"

# 搜索 GitHub 仓库
buku -s "/github\.com\/[a-zA-Z0-9-]+\/[a-zA-Z0-9-]+/"

正则表达式示例

# 1. 搜索特定域名
buku -s "/github\.com/"
buku -s "/stackoverflow\.com/"

# 2. 搜索 URL 路径模式
buku -s "/\/docs?\//"              # 包含 /doc/ 或 /docs/ 的 URL
buku -s "/\/api\/v[0-9]+/"        # API 版本 URL

# 3. 搜索标题模式
buku -s "/^Python/"                # 标题以 Python 开头
buku -s "/tutorial$/i"            # 标题以 tutorial 结尾(忽略大小写)

# 4. 搜索标签模式
buku -s "/,python,.*/"            # 包含 python 标签
buku -s "/^,.*,web,.*$/"          # 包含 web 标签的任意标签组合

# 5. 排除特定模式
buku -s "/^(?!.*archive).*$/"     # 不包含 archive 的书签

常用正则模式

需求正则表达式说明
匹配特定域名/example\.com/转义点号
匹配多个关键词/python|golang|rust/使用 | 交替
匹配 URL 协议/^https:\/\//https:// 开头
匹配文件扩展名/\.pdf$/.pdf 结尾
匹配数字/page-[0-9]+/匹配数字部分
匹配单词边界/\bpython\b/精确匹配单词

正则表达式注意事项

# ⚠️ 正则表达式需要用斜杠包围
# 正确:
buku -s "/python/"
# 错误:
buku -s "python"       # 这是普通关键词搜索

# ⚠️ 转义特殊字符
# 搜索包含 . 的内容:
buku -s "/example\.com/"    # 正确:转义点号
buku -s "/example.com/"     # 错误:. 匹配任意字符

# ⚠️ 复杂正则可能影响性能
# 对于简单搜索,建议使用关键词搜索

4.4 标签搜索

标签精确搜索

# 搜索标签为 "python" 的书签
buku -st ,python

# 搜索标签为 "python" 或 "tutorial" 的书签
buku -st ,python ,tutorial

# 搜索同时包含两个标签的书签
buku -s ,python ,tutorial

标签搜索与关键词搜索的区别

# 场景:有以下书签
# 1. Python 官方文档  标签: ,python,doc,
# 2. Python教程网站   标签: ,tutorial,python,
# 3. Java 编程指南    标签: ,java,programming,
# 4. 编程语言对比     标签: ,programming,comparison,

# 关键词搜索 "python"(搜索标题、URL 和标签)
buku -s python
# 结果: 1, 2(标题或标签中包含 python)

# 标签搜索 ",python"(仅搜索标签)
buku -st ,python
# 结果: 1, 2(标签中包含 python)

# 关键词搜索 "programming"(搜索标题、URL 和标签)
buku -s programming
# 结果: 3, 4(标签中包含 programming)

# 搜索标签 "programming" 但不含 "java"
buku -s ,programming -x ,java
# 结果: 4

层级标签搜索

# 假设使用层级标签体系:
# ,tech/python/web/django,
# ,tech/python/web/flask,
# ,tech/python/ml/tensorflow,
# ,tech/rust/web/actix,

# 搜索所有 Python 相关
buku -s ,tech/python

# 搜索所有 Web 框架
buku -s ,web

# 搜索 Python Web 框架
buku -s ,tech/python/web

4.5 模糊搜索

基本模糊搜索

# 使用 -S 进行模糊搜索(允许拼写错误)
buku -S "pythn"       # 匹配 "python"
buku -S "githab"      # 匹配 "github"
buku -S "stackoverf"  # 匹配 "stackoverflow"

# 模糊搜索的工作原理
# 基于编辑距离(Levenshtein Distance)算法
# 允许 1-2 个字符的差异(插入、删除、替换)

模糊搜索适用场景

# 1. 不确定拼写时
buku -S "algoritm"    # 匹配 "algorithm"
buku -S "javascrpt"   # 匹配 "javascript"

# 2. 记忆模糊时
buku -S "那个python教程"  # 尝试匹配包含类似内容的书签

# 3. 从外部输入搜索(可能有错别字)
echo "pythn tutorail" | xargs buku -S

模糊搜索与精确搜索对比

# 精确搜索(-s):要求完全匹配关键词
buku -s python       # 只匹配包含 "python" 的书签

# 模糊搜索(-S):允许一定程度的差异
buku -S pythn        # 匹配 "python"(缺少 o)
buku -S pythonn      # 匹配 "python"(多了一个 n)
buku -S pytohn       # 匹配 "python"(字母顺序错误)

4.6 排除搜索

基本排除语法

# 搜索关键词但排除特定标签
buku -s python -x ,archive
# 匹配包含 "python" 但不含 "archive" 标签的书签

# 排除多个标签
buku -s python -x ,archive ,deprecated
# 匹配包含 "python" 但不含 "archive" 或 "deprecated" 标签的书签

排除搜索应用场景

# 1. 排除已归档的书签
buku -s python -x ,archived

# 2. 排除特定域名
buku -s tutorial -x ,blocked

# 3. 搜索活跃书签(排除待读和已读)
buku -s ,reference -x ,toread ,read

# 4. 搜索非工作相关书签
buku -s ,tech -x ,work ,meeting

排除搜索的组合使用

# 搜索 python 或 golang 书签,但排除 archived 和 deprecated
buku -s "/python|golang/" -x ,archived,deprecated

# 搜索 web 开发资源,但排除入门级
buku -s ,web -x ,beginner

# 搜索教程但排除视频教程
buku -s tutorial -x ,video

4.7 组合搜索

搜索条件组合

# 关键词 + 标签
buku -s python ,tutorial
# 匹配:标题/URL 中包含 "python" 且标签中包含 "tutorial"

# 多个关键词 + 标签
buku -s python web ,tutorial
# 匹配:标题/URL 中包含 "python" 和 "web" 且标签中包含 "tutorial"

# 正则 + 排除
buku -s "/github\.com/" -x ,archived
# 匹配:URL 包含 github.com 但不含 archived 标签

# 模糊 + 标签
buku -S "pythn" ,tutorial
# 匹配:模糊匹配 "pythn" 且标签包含 "tutorial"

搜索结果排序

# 默认按 ID 排序
buku -s python

# 按 URL 排序
buku -s python --sort url

# 按标题排序
buku -s python --sort title

# 按标签排序
buku -s python --sort tags

搜索结果格式化

# 默认格式
buku -s python

# 仅输出 URL
buku -f 4 -s python

# JSON 格式
buku -j -s python

# JSON 格式并使用 jq 处理
buku -j -s python | jq '.[] | {id, url, title: .metadata}'

4.8 高级搜索技巧

使用管道组合命令

# 搜索并统计数量
buku -s python | grep -c "^[0-9]"

# 搜索并排序
buku -s python | sort

# 搜索并过滤
buku -s python | grep "github"

# 搜索并打开第一个结果
buku -s python -o 1

搜索并批量操作

# 搜索并添加标签
buku -s python | grep "^[0-9]" | awk '{print $1}' | tr -d '.' | while read id; do
    buku -u "$id" + ,reviewed
done

# 搜索并导出
buku -j -s python | jq -r '.[].url' > python_urls.txt

# 搜索并检查死链
buku -f 4 -s python | while read url; do
    status=$(curl -o /dev/null -s -w "%{http_code}" "$url")
    echo "[$status] $url"
done

保存常用搜索

# 在 .bashrc 中定义搜索别名
cat >> ~/.bashrc << 'EOF'

# Buku 搜索别名
alias bkpy='buku -s python'
alias bkjs='buku -s javascript'
alias bkgit='buku -s github'
alias bktodo='buku -s ,toread'
alias bkref='buku -s ,reference'
alias bkrecent='buku -p --sort id | tail -20'

# 搜索并打开
bko() { buku -s "$1" -o 1; }

# 快速搜索
bks() { buku -s "$@"; }
EOF

source ~/.bashrc

# 使用别名
bkpy          # 搜索 python
bktodo        # 搜索待读书签
bko python    # 搜索 python 并打开第一个结果

4.9 搜索性能优化

性能考量

搜索类型性能适用场景
关键词搜索日常搜索
标签搜索按分类查找
正则搜索中等复杂模式匹配
模糊搜索较慢拼写不确定时
组合搜索中等多条件筛选

大规模书签库优化

# 当书签数量超过 10,000 条时:

# 1. 使用标签搜索代替关键词搜索(更快)
buku -st ,python  # 比 buku -s python 更快

# 2. 限制搜索结果数量
buku -s python | head -20

# 3. 使用精确匹配代替模糊搜索
buku -s python  # 比 buku -S pythn 更快

# 4. 定期优化数据库
sqlite3 ~/.local/share/buku/bookmarks.db "VACUUM;"

4.10 搜索模式速查表

需求命令示例
关键词搜索buku -s keywordbuku -s python
多关键词buku -s kw1 kw2buku -s python tutorial
标签搜索buku -s ,tagbuku -s ,python
精确标签搜索buku -st ,tagbuku -st ,python
正则搜索buku -s "/regex/"buku -s "/github\.com/"
模糊搜索buku -S keywordbuku -S pythn
排除搜索buku -s kw -x ,tagbuku -s python -x ,old
组合搜索buku -s kw ,tagbuku -s python ,tutorial
仅输出 URLbuku -f 4 -s kwbuku -f 4 -s python
JSON 输出buku -j -s kwbuku -j -s python
搜索并打开buku -s kw -o Nbuku -s python -o 1

4.11 本章小结

要点说明
基本搜索buku -s keyword 搜索标题、URL 和标签
标签搜索buku -s ,tagbuku -st ,tag 精确匹配标签
正则搜索buku -s "/regex/" 使用正则表达式
模糊搜索buku -S keyword 允许拼写错误
排除搜索buku -s kw -x ,tag 排除特定标签
组合搜索多种条件可自由组合
性能建议优先使用标签搜索,正则和模糊搜索性能较低

扩展阅读


下一章第 05 章:标签管理 — 掌握 Buku 的标签系统,包括自动标签、层级标签和批量操作。