如果你跟我一样,办公桌上永远堆着没空整理的发票、合同、说明书,网盘里还散落着几百个命名混乱的扫描件,那么建议你花点时间了解一下 paperless-ngx 这套开源的文档管理系统。它是 Paperless 项目的下一代版本,核心能力就一句话:把纸质文件和散乱的 PDF 统一归档、自动识别文字、打上标签,然后你随时能在网页里搜到想要的那一份。适合所有被纸质文件淹没的个人用户、小团队,也适合想给自己建一套长期知识库的人。
我最早接触 paperless 还是老版本,后来迁移到 paperless-ngx,发现它在界面、权限、文档处理链路上都补了不少硬货。这篇文章不打算念官方文档,我直接按自己的实操顺序来写:先讲清楚它到底解决了什么痛点、内部是怎么运作的,再给你一套能直接抄的 Docker Compose 部署方案,最后把我踩过的坑和排查方法一次说清。建议大家先把文章过一遍,再决定要不要动手,因为部署本身不复杂,但前期的目录规划和参数选择,才是决定你半年后会不会后悔的关键。
1. 整体思路:paperless-ngx 到底解决什么问题
1.1 纸质文档和零散文件的核心痛点
我见过很多人对文档管理的理解就是“建一堆文件夹,把扫描件扔进去”。这个做法在文件少的时候没问题,文件一旦超过两三百份,问题就全部暴露出来:你要找一份两年前某银行的回单,得先回忆当时把它放在了“银行回单”还是“2023发票”还是“其他杂项”里;找到文件夹后,里面经常是 30 个名为「scan_001.pdf」的同款文件,只能一个个打开看缩略图。
paperless-ngx 的思路完全不同。它不强迫你按目录结构归档,而是让系统自己读取文档内容——扫描件也好、电子发票也好,进去之后先做 OCR 识别成文字,再结合你定义的对应方(correspondent)、文档类型(document type)、标签(tag),在数据库里建立索引。你要找东西的时候,不需要知道它放在哪个“文件夹”,只需要回忆一个关键词、一个时间范围或一个标签,就能把它捞出来。这个体验有点像给纸质文件上了一套搜索引擎,而且是本地私有化的。
1.2 为什么选 paperless-ngx 而不是其他方案
市面上的方案有商业的 Evernote、OneNote,也有开源的 Nextcloud、Calibre Web,为什么我最终选了 paperless-ngx,而且从老版本一路跟过来?几个实际理由:
第一,它把“输入”这件事做得很顺。你不需要手动填表格、填元数据,只要把文件丢进一个消费目录,或者发一封带附件的邮件,系统就自动完成 OCR、分类、归档。其他很多方案做不到这种“零维护”的摄入体验。
第二,它对扫描件、拍照件的识别效果好。底层用的是 OCRmyPDF 和 Tesseract,中文识别率在线,而且会自动生成带文字层的 PDF。即使你存进去的是纯图片,paperless-ngx 也能把它转成可搜索的 PDF。这对国内用户非常重要,因为很多发票、合同都是拍照件。
第三,部署足够轻量。官方推荐 Docker Compose 方式,一个服务器或者一台旧电脑,几行配置就能跑起来。数据都在你自己手里,没有平台迁移问题。相比于商业笔记软件,你不用担心中间商停服或者隐私数据外泄。
如果你纠结 paperless-ngx 和老版本 paperless-ng 的差别,我建议直接上新版本。它的前端从旧框架换成了新架构,交互体验和搜索响应都好很多,数据迁移也提供了现成脚本,从老版本升级过去并没有想象中麻烦。
2. 系统架构与数据处理链路
2.1 核心组件与分工
要驾驭 paperless-ngx,第一步得先理解它的容器组成。官方 docker-compose 里通常会有这几个角色:
| 容器名 | 职责 | 说明 |
|---|---|---|
| webserver | Web 管理界面和 API | 用户日常打交道的入口,也是绝大多数配置生效的地方 |
| consumer | 文档消费与处理 | 监听 consume 目录,执行 OCR、归档、索引的流水线 |
| db | PostgreSQL 数据库 | 存储元数据、标签、对应方、全文索引的辅助数据 |
| redis | 缓存与任务队列 | 给 consumer 和 webserver 做中间通信,也用于并发任务调度 |
| gotenberg | PDF 处理工具 | 渲染文档预览、转换 PDF 格式,是预览功能的重要依赖 |
| tika | 内容检测与元数据提取 | 负责从各种文件类型里抽取文本信息,辅助 OCR 结果整合 |
这套架构说白了就是一个前后端分离再加一个异步任务系统。你通过网页上传文档时,webserver 收到文件后把它写入 consume 目录;consumer 容器感知到新文件后,开始跑 OCR 和内容分析;处理完的数据进入 PostgreSQL,文件本体放在指定数据卷里。搜索的时候,webserver 直接从数据库检索并返回结果。这样的好处是,重活都在后台异步完成,界面不会卡死;你一次性塞进去 50 份文件也没问题,consumer 会按顺序排队处理。
2.2 一条文档从进来到被搜索,经历了什么
以一张扫描版合同为例,完整链路是这样的:
- 你把
scan.pdf放到documents/consume目录,或者通过网页上传; - consumer 容器检测到新文件,做格式初检;
- tika 抽取原始文本;如果发现是纯图片或者扫描件,则调用 OCRmyPDF 和 Tesseract 进行文字识别;
- 系统根据预设规则自动分配对应方、文档类型、标签(这一步是可选的,基于你配置的匹配规则);
- 原始文件被转成带文字层的标准 PDF,保存到归档目录;
- PostgreSQL 写入元数据和全文索引;
- 消费完成后,原文件从 consume 目录移走,网页界面立即出现这篇文档;
- 你在搜索框里输入合同里的任何一个关键词,就能定位到这份文件。
这套链路最妙的地方在于,“归档”不是终点,而是起点。正因为有全文索引,文件一旦入库,你基本不再需要关心它存放在哪个物理路径,也不用刻意建分类目录。这也是为什么我反复强调:目录规划不要过于复杂,把标签和搜索用起来,效率会高得多。
3. Docker 部署实操:从零搭起来
3.1 docker-compose 配置详解
部署部分,我直接给你一份我目前正在用的配置模板。它不是官网原版,而是我根据实际服务器环境调整过的,去掉了部分用不到的变量,补上了中文 OCR 和时区设置。先说明下前置条件:一台装有 Docker 和 Docker Compose 的 Linux 服务器,2核4G内存就够跑了,磁盘建议预留至少 50GB,因为文档和数据库会持续增长。
version: "3.4" services: broker: image: docker.io/library/redis:7 restart: unless-stopped volumes: - redisdata:/data db: image: docker.io/library/postgres:15 restart: unless-stopped volumes: - dbdata:/var/lib/postgresql/data environment: POSTGRES_DB: paperless POSTGRES_USER: paperless POSTGRES_PASSWORD: paperless webserver: image: ghcr.io/paperless-ngx/paperless-ngx:latest restart: unless-stopped depends_on: - db - broker - gotenberg - tika ports: - "8000:8000" volumes: - ./data:/usr/src/paperless/data - ./media:/usr/src/paperless/media - ./export:/usr/src/paperless/export - ./consume:/usr/src/paperless/consume environment: PAPERLESS_REDIS: redis://broker:6379 PAPERLESS_DBHOST: db PAPERLESS_DBUSER: paperless PAPERLESS_DBPASS: paperless PAPERLESS_DBNAME: paperless PAPERLESS_TIME_ZONE: Asia/Shanghai PAPERLESS_OCR_LANGUAGE: chi_sim+eng PAPERLESS_SECRET_KEY: change-me-to-a-long-random-string PAPERLESS_URL: http://192.168.1.100:8000 PAPERLESS_CONSUME_DUPLICATES: true PAPERLESS_FILENAME_FORMAT: "{{ created_year }}/{{ correspondent }}/{{ title }}" gotenberg: image: docker.io/gotenberg/gotenberg:7.10 restart: unless-stopped command: - "gotenberg" - "--chromium-disable-javascript=true" - "--chromium-allow-list=file:///tmp/*" tika: image: ghcr.io/paperless-ngx/tika:latest restart: unless-stopped volumes: data: {} dbdata: {} redisdata: {}这里重点说几个参数,因为很多人配置完跑不起来,多半是这里理解偏了:
PAPERLESS_REDIS必须写成redis://broker:6379,这里面的broker是 compose 里的服务名,不是你的 IP 地址。容器之间通过 Docker 内部网络通信,和宿主机没有关系。PAPERLESS_DBHOST同理,写db而不是localhost。PAPERLESS_OCR_LANGUAGE我设置为chi_sim+eng,这样中英文混排的文档都能识别。如果你只需要中文,可以只写chi_sim;但是国内文档常见中文夹杂英文数字,建议保留eng。PAPERLESS_SECRET_KEY是 Django 的签名密钥,一定不要用默认值,改成一段足够长的随机字符串。这个只影响登录 session 和 API 令牌,不涉及真正的数据加密,但用弱密钥总有隐患。PAPERLESS_URL决定了网页里的分享链接、下载链接前缀,如果你要配反向代理,这里要改成你的公网域名或 IP,不然点击某些按钮会跳到 localhost。PAPERLESS_CONSUME_DUPLICATES设置为 true 的意思是,即使系统检测到重复文件,也照样收下并归档。这个如果你希望系统自动去重,可以保持 false。我建议打开,因为真实场景里很多重复文件其实内容类似但不完全相同,自动去重误杀的概率不低。
3.2 启动前必须想好的几个参数
在敲docker compose up -d之前,有三件事最好提前定下来,不然后期改起来很折腾。
第一是目录映射。上面配置里我使用了./data、./media、./export、./consume四个相对目录,分别对应数据库文件、媒体文件、导出备份目录、消费目录。实际生产环境我建议把consume单独拿出来映射成一个显眼的路径,比如/home/yourname/paperless-consume,这样你平时扫码或者手机传文件的时候,直接丢到这个目录就行,不需要每次进容器看路径。
第二是文件命名规则。PAPERLESS_FILENAME_FORMAT控制归档后的文件名格式,我用的是“年份/对应方/标题”三层结构。有人喜欢{{ created_year }}/{{ correspondent }}/{{ created_month }}/{{ title }},也可以;但我不建议太深,因为这个路径是在后台自动生成的,层级太深反而会让导出的备份目录混乱。关键是{{ title }}默认是文档第一行文字,如果识别率不佳会生成一长串奇怪字符,所以建议配一个PAPERLESS_FILENAME_FORMAT时别把{{ title }}放在最前面,避免文件名前几字是乱码。
第三是反向代理。如果你不想每次都 IP:8000 这样访问,而是想配一个域名和 HTTPS,需要提前规划好。paperless-ngx 本身支持通过环境变量配置信任代理,比如PAPERLESS_TRUSTED_PROXIES设置为 Nginx 容器 IP,然后在 Nginx 里做proxy_pass http://你的服务器IP:8000。但这一步和 paperless-ngx 本身无关,容易出问题,建议新手先直接用 IP 访问,跑通以后再上 HTTPS。
3.3 首次登录与中文设置
配置写好后,执行docker compose up -d,等几十秒让容器初始化数据库。首次启动会在 data 目录里自动创建数据库,并且创建默认管理员账号。你可以用docker compose exec webserver createsuperuser命令创建管理员,按提示输入用户名、邮箱、密码即可。
登录网页后,在右上角「设置」里可以把语言切换为中文(或者在环境变量里写PAPERLESS_LANGUAGES),界面会立即变成中文。这一步不做也不影响使用,但中文界面确实能减少不少翻设置的时间。
有一点要提醒:很多人第一次启动后发现网页打不开,多数不是 paperless-ngx 自身问题,而是服务器防火墙没放行 8000 端口,或者云平台的安全组规则没加。先在本机用curl http://localhost:8000测一下,如果通,那就是防火墙问题,按各自的系统方式放行即可。
4. 日常配置与深度使用
4.1 OCR 参数调优:从能用到好用
系统默认的 OCR 配置对普通文档够用,但如果你像我一样需要处理大量手机拍照件、传真件、字迹浅的合同,建议做几个微调。
首先是分辨率与图像预处理。paperless-ngx 的环境变量里有PAPERLESS_OCR_IMAGE_DPI和PAPERLESS_OCR_CLEAN。PAPERLESS_OCR_CLEAN设为true会启用图像清理,对扫描件去噪、纠偏,实测对倾斜的拍照文字有明显改善。但要注意,图像清理会稍微增加处理时间,一次性导入几百份时能感觉到排队变久。
其次是 OCR 语言包的维护。如果PAPERLESS_OCR_LANGUAGE里面写了chi_sim+eng,容器启动时会检查 Tesseract 的语言包是否存在,不存在会自动下载。但网络不好时容易失败,表现为日志里报语言包相关错误。这种情况下可以手动进入容器安装对应语言包,或者直接把容器替换成一个带语言包的镜像。不过我实测下来,官方镜像的自动下载在多数网络环境下都能成功,只有公网带宽很差的机器会超时。
还有一个重要参数是PAPERLESS_OCR_MODE。默认是redo,意思是即使文档本身已经有文字层,也强制重新 OCR 一遍;如果改成skip,遇到已有文字层的 PDF 就直接跳过 OCR。我个人的建议是保持redo,因为很多 PDF 虽然带有文字层,但字库不全或用特殊字体渲染,提取出来是一堆乱码,重新 OCR 反而能得到干净文本。代价是处理时间变长,就看你怎么权衡了。
4.2 标签、对应方与文件命名规则
paperless-ngx 有三个核心元数据概念:对应方(Correspondent)、文档类型(Document Type)、标签(Tag)。对应方就是这份文件的来源或归属方,比如「XX银行」「XX物业」;文档类型就是文件性质,比如「发票」「合同」「说明书」;标签更像用户的自由分类,比如「待报销」「保修期内」。
首次导入大量旧文件时,手工逐个填元数据是最耗时的。我的做法是利用系统自带的「处理规则」(Workflow)来自动分配:
- 新建一个处理规则,匹配条件设为“文件名包含 invoice”,动作是设置文档类型为发票、对应方为某公司;
- 再建一个规则,匹配“文本内容包含 劳动合同”,动作是打上「合同」标签。
这样只要消费目录里的文件满足条件,归档时会自动完成分类。这个规则在「管理界面」里的「处理规则」模块配置,条件支持文件名、标题、文本内容等多种维度,逻辑还算灵活。
文件命名规则我觉得是 paperless-ngx 最容易被忽略但很值得花时间调的地方。默认情况下,归档文件会存成类似2024-05-01 发票扫描件.pdf这样的名字,看多了完全没有辨识度。我用的格式是:
{{ created_year }}/{{ correspondent }}/{{ title }}这样归档目录结构非常清晰:第一层年份,第二层对应方,第三层是文档标题。即使三年后我直接去文件系统翻,也能快速定位。注意标题字段如果识别为空,paperless 会默认用日期生成一个名字,不会报错,可以放心。
4.3 邮件消费:让文档自己进来
这个功能是我个人最常夸的。你可以在配置里开启邮件消费,给 paperless-ngx 配一个专用的邮箱账号,它定期去收件箱拉取带附件的邮件,附件自动进入消费流程。国内常用邮箱的 IMAP 设置基本都能配通,只需要填服务器地址、端口、账号密码。
配置路径在「管理界面」→「邮件账户」,按提示填写 IMAP 服务器、账号、密码,然后在「邮件规则」里设定哪些邮件、哪些附件要被消费。我通常会设一个独立的 QQ 邮箱或 Outlook 邮箱专门干这件事,手机里装个邮件 App,需要归档的附件发给这个邮箱即可。
好处是显而易见的:你不需要打开电脑、不需要进网页,手机随手转发一封邮件,paperless-ngx 自动收取、识别、归档。月底报销的时候,我在网页里搜「报销」标签,所有电子发票和扫描件一次全出来,体验非常好。
邮件消费里有一个细节要提醒:系统默认只处理未读邮件,处理完不会删除邮件,只是标记已读。如果你怕邮箱越积越多,可以在邮件规则里开启“删除邮件”选项,但我不建议这样做,万一系统误判,邮件丢了没法找回。保留已读邮件,定期手动清理,安全得多。
5. 备份、安全与长期维护
5.1 备份方案对比:千万别只复制文件夹
很多人以为备份就是压缩一下挂载的 data、media 目录,其实这样备份出来是残废的。paperless-ngx 的文档内容和数据库、全文索引是分开存的,如果你只拷贝了 data 目录但没备份 PostgreSQL,一旦数据库损坏,你只能拿到一堆匿名 PDF,元数据和搜索索引全部丢失。反过来,只备份数据库也会丢原始文件。
官方推荐的备份方式有两种:
| 方式 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| 官方 Document Exporter | 导出元数据和文件,结构清晰,可用document_importer恢复 | 导出频率需手动或脚本控制,恢复时要跑导入流程 | 关注文档可迁移性的场景 |
| 整机/磁盘快照 | 操作简单,恢复快 | 备份文件体积大,且数据库和文件系统需一致快照 | 服务器环境可控的小团队 |
我目前的方案是 3 个层面同时做:
- 每月跑一次官方导出,把导出目录同步到另一台机器的共享存储;
- 每周做一次 PostgreSQL 逻辑备份:
docker compose exec db pg_dump -U paperless paperless > backup.sql; - 每天用 rsync 把 data、media、consume 三块目录同步到备份服务器,并保留最近 7 天版本。
重点是搞清楚一件事:只有把所有部分备份齐全,并且做过至少一次“从备份的服务器完整恢复”的演练,你才能说自己的数据是安全的。很多人备份脚本写了几年,真正要恢复时发现某个路径错了或者数据库版本不匹配,那时候后悔就晚了。
5.2 数据库膨胀与全文索引维护
用过一段时间以后,你可能会发现 PostgreSQL 的数据目录越来越大。这主要是全文索引和文档历史版本造成的。paperless-ngx 每次重新保存文档都会生成新的数据记录,长期更新文件后,数据库里堆积了大量旧版本。这个不会在界面上直接体现,但会显著拖慢搜索和备份速度。
解决方法是定期做一次 VACUUM:
docker compose exec db psql -U paperless -d paperless -c "VACUUM (ANALYZE, VERBOSE);"这个命令能回收空闲空间并更新统计信息。如果你的数据库实在太大,也可以用VACUUM FULL,但这个操作会锁表,建议在半夜低峰期执行。
全文索引方面,paperless-ngx 每隔一段时间会自动运行索引优化任务,但如果你改了检索语言或添加了很多文档后感觉搜索变慢,可以手动触发:
docker compose exec webserver document_index rebuild_index这个命令会重新构建全文索引,耗时视文档数量而定,我跑过一次一万多份的索引,大概需要几分钟到十几分钟不等。重建期间搜索可能会短暂返回不完整结果,建议维护窗口执行。
5.3 多用户权限与安全加固
如果 paperless-ngx 部署在公司环境或者和同事共享使用,一定要花时间设置用户权限。新版本已经支持每个用户(组)对标签、对应方、文档类型的访问控制,可以在「管理界面」里分别分配权限。比如财务组只能看到发票类文档,人事组只能看合同类文档,admin 拥有全部权限。
安全方面有几个容易被忽视的细节:
- 不要用默认的
PAPERLESS_SECRET_KEY,一定要改成随机长字符串; - 如果服务器直接暴露公网,务必在前面加反向代理并启用 HTTPS,不要裸用 8000 端口;
- 如果你开启邮件消费功能,邮件账户密码会存在配置里,定期更换邮箱密码后要同步更新 paperless 的配置;
- 登录接口建议限制尝试次数,新版自带了这个功能,路径在「管理界面」→「用户」→「安全设置」,把登录失败次数调低一点。
6. 常见问题与排查技巧实录
6.1 OCR 不识别或输出乱码
这个问题几乎每个人都遇到过,尤其是处理中文文档时。现象分两种:一种是什么都识别不出来,标题空着或乱码;另一种是识别了但文字明显错乱。
排查分三步:
- 确认语言包:进入容器执行
tesseract --list-langs,看输出里是否包含chi_sim。如果没有,说明 OCR 语言包没装上,需要重新设置PAPERLESS_OCR_LANGUAGE=chi_sim+eng后重建容器。 - 确认输入文件质量:如果原始图片分辨率低于 200 DPI、或者文字本身就模糊,Tesseract 再怎么调也有限。可以用手机扫描类 App 先做一次增强再导入,比系统内调参更有效。
- 确认
PAPERLESS_OCR_MODE:如果你改成了skip,而原 PDF 的文字层是乱码,自然无法识别;改成redo会重新跑一遍。
我遇到过最奇葩的一种情况是:某份文件识别出来的文字全是英文单词,但文件内容是纯中文。后来发现是语言包优先级设置问题,chi_sim+eng里eng排在后面,但部分文档页面的中英文混排顺序让 Tesseract 误判了语言。这种情况没有完美解法,多试几种语言组合,或者把chi_sim放前面,多数情况能改善。
6.2 consumer 容器不动:文档一直卡在 consume 目录
导入文件后发现网页里没有新文档,先看 consume 目录,如果文件还在原地,说明 consumer 任务没触发或者处理失败了。按这个顺序排查:
docker compose logs consumer查看日志,这是最直接的线索;- 如果日志里有权限报错,检查 consume 目录的属主和权限,容器内用户 UID 默认是 1000,宿主机目录要
chown -R 1000:1000 ./consume; - 如果日志显示文件类型不支持,检查文件后缀和格式,paperless-ngx 对图片和 PDF 支持最好,但有些加密 PDF 它处理不了;
- 如果日志完全没动静,可能是 Redis 连接问题,
docker compose exec broker redis-cli ping看看是否返回PONG。
有一种情况很坑:你往 consume 目录里放了文件,但文件名里带了特殊字符,比如#、%、&,consumer 在解析文件名时可能直接跳过。我的建议是导入前统一把文件名改成简单的YYYY-MM-DD 标题.pdf格式,或者干脆靠邮件消费来避免这个坑。
6.3 时间显示不对和容器经常重启
时间显示不对十有八九是没设置PAPERLESS_TIME_ZONE,或者设置了但容器没重建。改完环境变量一定要docker compose up -d --force-recreate重建容器,单纯 restart 不会让新环境变量生效。
容器经常重启大概率是依赖服务没起来。paperless-ngx 的 webserver 启动时会去连数据库和 Redis,如果 db 还没就绪,webserver 会反复失败并触发 restart 策略。这时候别看 webserver 日志,先去docker compose ps看所有容器的状态,等 db 变成 healthy 再看。我在首次部署的时候遇到过这个问题,解决办法是在 compose 文件里给 db 加一个健康检查和depends_on条件,让它等待数据库真正就绪再启动 webserver。
6.4 搜索不到已经成功导入的文档
文档明明已经在列表里,但搜索某个关键词却找不到。这通常是全文索引没有覆盖到新文档。解法是手动重建索引:
docker compose exec webserver document_index rebuild_index如果重建完还搜不到,检查你的搜索关键字是不是被分词器拆掉或者被停用词过滤了。中文场景下,paperless 默认的分词机制对较长的中文字段支持没问题,但单字关键词搜索效果比较差。比如你搜“票”可能什么都搜不出,但搜“发票”就能命中。
6.5 迁移服务器时最容易被坑的路径问题
我身边有人迁移 paperless-ngx 时数据卷全拷过去了,但启动后网页却是空的,原因是旧服务器的PAPERLESS_MEDIA_ROOT和默认路径不一致,或者导出时的目录结构没完整带过来。迁移前先把环境变量列表截个图,尤其是PAPERLESS_DATA_DIR、PAPERLESS_MEDIA_ROOT、PAPERLESS_CONSUMPTION_DIR这些路径变量,确保新服务器上环境变量和旧服务器保持一致。
还有一个容易忽略的点:数据库版本。旧服务器如果跑的是 PostgreSQL 12,新服务器直接拉到 PostgreSQL 15,数据库文件是不能直接挂载使用的,会报版本不兼容。迁移时尽量保持数据库大版本一致,或者使用pg_dump+pg_restore做逻辑迁移。
写在最后
我个人的实际使用体会是,paperless-ngx 入门不难,难的是坚持用下去。很多人部署完新鲜两天,之后又回到把文件随便塞进网盘的旧习惯。我的经验是,把“摄入”环节做到足够无脑,你才能长期用它。对我来说,最常用的场景就是月底报销:手机上把发票拍照,丢到专门的邮箱,或者扔进 consume 目录,剩下的事全交给它。月底打开网页搜一个“报销”标签,该有的票据一张不缺,光是这点节省的时间,就值回部署成本了。
还有一个小技巧,如果你手头有大量历史扫描件,不要追求一天导完,可以每天丢几十份进去,让 OCR 任务在夜里慢慢跑,既不占用白天资源,也能看着文档库一天天丰满起来。只要熬过前两个月的积累期,后面你再也回不去那种在文件夹里翻半天找不到东西的日子了。