关于搜索性能问题

本贴最后更新于 506 天前,其中的信息可能已经水流花落

我个人感觉自从更新了按文档分类搜索后搜索时间增加了很多,目前我搜索一个东西无论是文档内还是全局搜索都是 5 秒左右,但是之前基本都是 1 秒就行,这导致我当初第一时间更新后又回退到旧版本了,旧版本的搜索还是很流畅。这两天发布了 2.5.3 后我又更新试了试但是发现搜索性能还是不行,我不知道是什么原因导致的,试过换成默认主题速度还是慢。跟之前速度对比起来确实相差好几倍。

但是在 2.5.3 我选择不分组搜索后速度还是很慢,我也不清楚是什么原因导致的。

我不知道有没有同样遇到这种问题的。

  • 思源笔记

    思源笔记是一款隐私优先的个人知识管理系统,支持完全离线使用,同时也支持端到端加密同步。

    融合块、大纲和双向链接,重构你的思维。

    18708 引用 • 69849 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • 同感,感觉目前的搜索时长已经接近无法忍耐的边缘了。

    1 回复
  • 麻烦提供一下日志,我们看下是否能看出问题,谢谢。

    1 回复
  • systemlog.zip

    已提供日志。

    刚才又仔细观察了一下,我所说的搜索时间长是指从输入完整的关键词到 ctrl+p 界面完整显示内容需要比较长的时间,中间大部分时间页面是空白的转圈状态,所以,不一定是搜索效率低,也可能是显示内容需要的时间长。

    1 回复
  • 打开了虚拟引用吗?开了的话加载文档会比较慢。

    2 回复
  • zhaoshengmu 1 评论

    我虚拟引用是打开的,但是应该不是它的问题,因为在 2.5.0 开虚拟引用搜索速度还是很快,并且我刚才关闭了虚拟引用并且重启了应用但是速度还是很慢,大概平均搜一个要转圈 5 秒,基本不可忍受的时间。systemlog.zip

    哦不对,我虚拟引用是一直关着的所以不是它的问题,我刚才说错了我看到设置-搜索中虚拟引用的地方开着我以为自己虚拟引用也开着,忘记前段时间已经关了它了,出现搜索问题前就关了
    zhaoshengmu
  • 我虚拟引用一直是开的,跟楼主的感受也差不多,就最近两三个版本开始明显变慢了。前面的版本都还好。我的比计数据量比较大(纯文本 52MB),不知道是否跟这个有关系。

    2 回复
  • zhaoshengmu 1 评论

    应该也不是,它是一个升级版本后断崖式搜索性能下降的问题,在没有搜索结果分类显示前性能都是好的,我之前一段时间都是回退版本使用的

    而且这个也是个例,在我电脑上就是有这个问题但是别的人就没这个问题
    zhaoshengmu
  • 我这边测试在一个 1G 大小的 siyuan.db 上、data 中 .sy 大小 300M,搜索性能没有太慢,默认使用的是 64 的搜索结果条目限制。

    有空的话可以帮忙测试在一个新的工作空间导入这个看看 https://github.com/Zettelkasten-Method/10000-markdown-files

    1 回复
  • 我没有导入新的工作空间(还在上班),仅仅是把搜索条目限制还原到 64(原先是 3200),感觉速度有明显改善。

    这个设置应该是影响因素之一。

    但是为了确保搜索结果没有遗漏,我还是不愿意把这个参数调的太小,不知道是不是还有其他的改进思路?

    1 回复
  • 我不太理解为什么要把搜索结果条目设置那么大哦,这样展示出来的结果太多了,能说下使用场景吗?

    2 回复
  • 我导入 github 的这个发现搜索速度确实挺快,比我的笔记内容搜索起来快多了,这是什么原因,我的笔记肯定没有导入的这个多。那个搜索结果条目如果设置小了会不会导致有些没被搜索出来?(哦对今天我发现代码语言中没有 vue,typora 中是有的)

    1 回复
  • 如果命中结果太多的话会,但是我觉得结果太多实际上人也看不过来,所以设置太大意义不大吧。

  • 我把思源笔记当做一个法规库来用,目前管理了大概 400 多份法规原文以及差不多体量的我自己整理的笔记,因为有些细节规定很难靠大脑准确记住,工作中有需求的话我都随时用思源来搜索,类似一个本地版的“北大法宝”。所以,搜索结果的完整性对我很重要,我担心那个变量设置太小的话,即使我本地已经有相应的法规,但搜索的时候还是找不到它,所以就随手设置了一个比较大的值,其实到底是 2000 还是 3000,就我目前的数据库来说,应该都不影响结果的完整性。

    所以我其实不太能理解设置这个限制的意义(性能影响除外),如果搜索到的结果是不完整的,那笔记的价值不就大打折扣了吗?搜不到的笔记和没有这条笔记感觉没区别。

    2 回复
  • 赞同这种做法,搜索条数其实没必要限制。

    如果太多,感觉可以做到分页加载,减少一次太多影响性能,但是搜不到,真的就和没有这个记录这个笔记没区别了。

    1 回复
  • 设置太大的话没有意义吧,比如设置为限制 2K 条,那么这些结果就算命中了也看不完吧。

    我举个例子,比如默认设置 64 条,如果整个库中只有 3 条符合条件,那么结果就命中这 3 条,不会出现搜不到的情况,这个条目数设置并不需要超过库中的块数。

  • 搜索不到的情况只存在于搜索结果太多时,这时候应该是通过指定排序或者增加搜索条件来缩小搜索范围,而不是让用户在大量的搜索结果中肉眼再去查找,这样就失去搜索的意义了。

    从技术上而言是可以通过分页加载解决问题,但是我觉得这是个设计问题,不是技术问题。搜索支持分页加载后会增加用户在搜索上花费的时间。

    当然,如果大家觉得有必要这样做,我们会往这个方向考虑一下的,谢谢。

    1 回复
  • 我能理解你限制命中条数的思路了。确实是,可以通过优化关键词和添加其他限制条件来提高命中结果的精确程度,但是目前存在两个问题:

    1、目前的搜索 ui 不够完善,想达到以上目的只能使用 sql,这个门槛太高了。我日常使用的一些商业化网站(用于搜索法规或者搜索上市公司公告,都是各类纯文本内容),几乎都能做到分别针对标题、内容、发文单位、所在板块、发文时间等多个主题设置不同的关键词,且允许设置多个关键词之间的且和或的关系,还允许设置多个关键词之间是在同句、同段或同篇文字出现,以及明确排除某些关键词(即制定不包含某些关键词)。做的好的,甚至能够就特定事项列出专门的搜索框(例如某事项是否审核通过,因为这类事项不是类似发文单位这种文件中现成且固定出现的内容,通过简单的搜索关键词很难保证结果全面,网站应该是做了专门的工作,感觉属于语义分析范畴)。而思源目前的搜索离我举的例子还有很大差距。

    2、即使做到以上程度(或者用 sql),在我的使用场景中,如果程序存在对命中条数的限制,因为没办法准确记得自己想要找到的完整内容,依旧会有搜不到特定内容的可能(我无法判断是我的搜索条件设置不准确导致搜不到,还是我的笔记不包含相关内容,或者是被程序的命中条数限制了所以不显示)。因此,最终还是需要通过比较简单的关键词来显示一个比较大范围的命中结果(确保包含了我目前笔记中的全部相关内容)之后进行肉眼筛选。所以,前段时间上线的分组功能很重要,即使命中结果很多,我也可以依据法规名称快速排除我不需要的项目(这种判断依靠的是我对该法规所覆盖内容的记忆,感觉很难简单的通过各种关键词设置来实现相同的目的)。

    所以,在我的使用场景中,优化搜索功能很重要(完善 ui,优化性能),希望 D 大考虑一下,是不是把相关优化工作的优先级提升一下 🙏

    1 回复
  • 88250 1
    1. 通过查询语法,可以解决或且,但是针对字段的搜索条件目前还是只能用 SQL
    2. 可以通过结果计数判断的,结果计数的计算过程不带条目数限制

    最近的版本一直在优化搜索,已经是最高优先级了。但是 SQL 可视化的特性暂时还没有计划,估计要等 2.6 完成间隔复习以后我们再排计划是先做这个还是先做白板,可能会发起社区投票收集建议,谢谢。

    1 回复
  • 感觉 276 的搜索速度比 274 有很大提升,同一个工作空间,我依旧设置搜索结果显示数量是 3200,ctrl+p 显示结果的速度显著快于以前的版本,是 276 在这方面做了改进吗?

    1 回复
  • 没有。

    1 回复
  • 奇怪。那有可能是因为我把操作系统从 win11 换成 win10,系统占用 cpu 明显降低了。
    但我在 win10 下用 274 也没感觉到便流畅。很奇怪。

请输入回帖内容 ...

推荐标签 标签

  • GitLab

    GitLab 是利用 Ruby 一个开源的版本管理系统,实现一个自托管的 Git 项目仓库,可通过 Web 界面操作公开或私有项目。

    46 引用 • 72 回帖
  • Thymeleaf

    Thymeleaf 是一款用于渲染 XML/XHTML/HTML5 内容的模板引擎。类似 Velocity、 FreeMarker 等,它也可以轻易的与 Spring 等 Web 框架进行集成作为 Web 应用的模板引擎。与其它模板引擎相比,Thymeleaf 最大的特点是能够直接在浏览器中打开并正确显示模板页面,而不需要启动整个 Web 应用。

    11 引用 • 19 回帖 • 319 关注
  • Scala

    Scala 是一门多范式的编程语言,集成面向对象编程和函数式编程的各种特性。

    13 引用 • 11 回帖 • 108 关注
  • 倾城之链
    23 引用 • 66 回帖 • 102 关注
  • 资讯

    资讯是用户因为及时地获得它并利用它而能够在相对短的时间内给自己带来价值的信息,资讯有时效性和地域性。

    53 引用 • 85 回帖
  • HBase

    HBase 是一个分布式的、面向列的开源数据库,该技术来源于 Fay Chang 所撰写的 Google 论文 “Bigtable:一个结构化数据的分布式存储系统”。就像 Bigtable 利用了 Google 文件系统所提供的分布式数据存储一样,HBase 在 Hadoop 之上提供了类似于 Bigtable 的能力。

    17 引用 • 6 回帖 • 45 关注
  • Swagger

    Swagger 是一款非常流行的 API 开发工具,它遵循 OpenAPI Specification(这是一种通用的、和编程语言无关的 API 描述规范)。Swagger 贯穿整个 API 生命周期,如 API 的设计、编写文档、测试和部署。

    26 引用 • 35 回帖 • 13 关注
  • FreeMarker

    FreeMarker 是一款好用且功能强大的 Java 模版引擎。

    23 引用 • 20 回帖 • 428 关注
  • CAP

    CAP 指的是在一个分布式系统中, Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性),三者不可兼得。

    11 引用 • 5 回帖 • 565 关注
  • 书籍

    宋真宗赵恒曾经说过:“书中自有黄金屋,书中自有颜如玉。”

    76 引用 • 390 回帖
  • React

    React 是 Facebook 开源的一个用于构建 UI 的 JavaScript 库。

    192 引用 • 291 回帖 • 443 关注
  • 房星科技

    房星网,我们不和没有钱的程序员谈理想,我们要让程序员又有理想又有钱。我们有雄厚的房地产行业线下资源,遍布昆明全城的 100 家门店、四千地产经纪人是我们坚实的后盾。

    6 引用 • 141 回帖 • 559 关注
  • VirtualBox

    VirtualBox 是一款开源虚拟机软件,最早由德国 Innotek 公司开发,由 Sun Microsystems 公司出品的软件,使用 Qt 编写,在 Sun 被 Oracle 收购后正式更名成 Oracle VM VirtualBox。

    10 引用 • 2 回帖 • 5 关注
  • IBM

    IBM(国际商业机器公司)或万国商业机器公司,简称 IBM(International Business Machines Corporation),总公司在纽约州阿蒙克市。1911 年托马斯·沃森创立于美国,是全球最大的信息技术和业务解决方案公司,拥有全球雇员 30 多万人,业务遍及 160 多个国家和地区。

    16 引用 • 53 回帖 • 123 关注
  • MySQL

    MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 公司。MySQL 是最流行的关系型数据库管理系统之一。

    675 引用 • 535 回帖
  • etcd

    etcd 是一个分布式、高可用的 key-value 数据存储,专门用于在分布式系统中保存关键数据。

    5 引用 • 26 回帖 • 492 关注
  • gRpc
    10 引用 • 8 回帖 • 54 关注
  • Hexo

    Hexo 是一款快速、简洁且高效的博客框架,使用 Node.js 编写。

    21 引用 • 140 回帖 • 28 关注
  • OpenStack

    OpenStack 是一个云操作系统,通过数据中心可控制大型的计算、存储、网络等资源池。所有的管理通过前端界面管理员就可以完成,同样也可以通过 Web 接口让最终用户部署资源。

    10 引用 • 6 关注
  • Tomcat

    Tomcat 最早是由 Sun Microsystems 开发的一个 Servlet 容器,在 1999 年被捐献给 ASF(Apache Software Foundation),隶属于 Jakarta 项目,现在已经独立为一个顶级项目。Tomcat 主要实现了 JavaEE 中的 Servlet、JSP 规范,同时也提供 HTTP 服务,是市场上非常流行的 Java Web 容器。

    162 引用 • 529 回帖 • 3 关注
  • Netty

    Netty 是一个基于 NIO 的客户端-服务器编程框架,使用 Netty 可以让你快速、简单地开发出一个可维护、高性能的网络应用,例如实现了某种协议的客户、服务端应用。

    49 引用 • 33 回帖 • 23 关注
  • C

    C 语言是一门通用计算机编程语言,应用广泛。C 语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。

    83 引用 • 165 回帖 • 44 关注
  • TextBundle

    TextBundle 文件格式旨在应用程序之间交换 Markdown 或 Fountain 之类的纯文本文件时,提供更无缝的用户体验。

    1 引用 • 2 回帖 • 47 关注
  • Pipe

    Pipe 是一款小而美的开源博客平台。Pipe 有着非常活跃的社区,可将文章作为帖子推送到社区,来自社区的回帖将作为博客评论进行联动(具体细节请浏览 B3log 构思 - 分布式社区网络)。

    这是一种全新的网络社区体验,让热爱记录和分享的你不再感到孤单!

    131 引用 • 1114 回帖 • 151 关注
  • 阿里云

    阿里云是阿里巴巴集团旗下公司,是全球领先的云计算及人工智能科技公司。提供云服务器、云数据库、云安全等云计算服务,以及大数据、人工智能服务、精准定制基于场景的行业解决方案。

    89 引用 • 345 回帖
  • SEO

    发布对别人有帮助的原创内容是最好的 SEO 方式。

    35 引用 • 200 回帖 • 23 关注
  • Spark

    Spark 是 UC Berkeley AMP lab 所开源的类 Hadoop MapReduce 的通用并行框架。Spark 拥有 Hadoop MapReduce 所具有的优点;但不同于 MapReduce 的是 Job 中间输出结果可以保存在内存中,从而不再需要读写 HDFS,因此 Spark 能更好地适用于数据挖掘与机器学习等需要迭代的 MapReduce 的算法。

    74 引用 • 46 回帖 • 549 关注