思源笔记如何在查询结果中排除嵌入块?

本贴最后更新于 634 天前,其中的信息可能已经时移世异

因为思源没有实现流式日记,所以是使用 sql 将每日笔记汇总到一块。当前遇到一个困扰,在每日笔记的模板当中我会去汇总#TODO 标签的。如下:

image20230330152512aock8gw.png

但是这样的话,因为每条每日笔记中都包含查询#TODO 的嵌入块, 汇总出来结果很多重复,要如何排除掉呢?

image20230330152446eu9333l.png

汇总每日笔记的 sql 如下:就算在每个 WHERE 后面加上 type != 'query_embed' 也并不起作用。应该怎样实现呢?

SELECT * FROM blocks as t1
WHERE hpath like '/笔耕不辍%-%'
  AND type = 'd'

  AND EXISTS (
    SELECT * FROM blocks as b1
    WHERE hpath like '/笔耕不辍%-%'
      AND parent_id = t1.root_id
      AND markdown <> ''
      AND type != 'query_embed'
      AND NOT EXISTS (
        SELECT * FROM blocks as b2
        WHERE b2.parent_id = b1.id
          AND (b2.type = 'p' OR b2.type = 'h')
   

      )
  )
  AND strftime('%Y-%m-%d', content) IS NOT NULL

ORDER BY created DESC;

ps:顺便说一句,AND strftime('%Y-%m-%d', content) IS NOT NULL 是为了排除在每日笔记中创建的引用块作为嵌入块显示,否则引用块会一并显示出来,我看了下 siyun.db,发现能用这个作为判断,不知道实现这个需求是否有更好的办法。

  • 思源笔记

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

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

    23031 引用 • 92647 回帖

相关帖子

欢迎来到这里!

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

注册 关于
请输入回帖内容 ...
  • qiancang

    不等于是 <>

    不是 !=

    1 回复
  • Kootea

    是一样效果的喔。

  • qiancang

    如果只是为了在日记里汇总 之前的日记中写下的代办事项的话,我会这么写:

    
    select * from blocks where 
    ((type='l' and subtype='t' and markdown like '%* [ ]%%') and (box = '笔耕不辍所在笔记本的id' and hpath like '/笔耕不辍/%'))
    

    或者

    sql
    
    select * from blocks where 
    ((type='i' and subtype='t' and markdown like '* [ ]%%') and (box = '笔耕不辍所在笔记本的id' and hpath like '/笔耕不辍/%'))
    
    1 回复
  • Kootea

    感谢回复,但不是的。我的需求是每个日记中都有个查询待办的嵌入块,但是汇总所有日记时,排除掉每个日记中的查询待办的嵌入块。

  • 两个嵌入块用了同样的公式想要查询不同的结果?

    1 回复
  • Kootea

    哪里体现出这个需求了...

    2 回复
  • 我猜测,你是想查询结果中排除任务块?

  • 加一句 subtype!='t' 试试

    官方说明文档里,type 不包含"query_embed",也许这不是思源的 type

    1 回复
  • Kootea

    不是啦,只是想排除掉嵌入块,不只是列表。这个需求只是一方面,其实还想解决嵌入块套娃的问题...。query_embed 是存在的,只是文档里没有写,数据库中有这个字段。具体可以看这里:嵌入块支持搜索 #7112

    1 回复
  • 这个问题超出我的经验了,所以解决不了。

    我只能提一个我能想到的问题,确认下面那个红框中的内容是引用的上面的红框么?

    1 回复
  • Kootea

    感觉这个还是个挺麻烦的需求,如果思源能支持像 logseq 那样的日志就好了,嵌入块不能直接编辑真的有点麻烦。 感觉要实现我的需求只能基于块查询然后组合了。但是这样如果开了面包屑那画面将惨不忍睹。。

    两个没有关系的,只是同一句 sql,所以嵌入块查询的结果一致。

    1 回复
  • 如果二者没有关系,那下面的内容实际上就是 daily note 中的任务块。所以说这和 query_embed 没关系。

    我的理解是,query_embed 的存在是有些嵌入块会把 其他嵌入块(嵌入块本身) 搜索进来,而不是把其他嵌入块搜索到的内容剔除。

    若是想在下面的嵌入块中把他们清掉,subtype!='t'是完全可以实现的。

    1 回复
  • Kootea

    按我的理解,我这条 sql 查询出来的结果实际上是文档块,思源把文档块里面的内容渲染出来了。这个时候实际上像隔着透明的罐子去看里面的内容,现在假如有个透明罐子,里面装着红色和蓝色 2 种颜色的球,我能说不要装着蓝色球的罐子,这个时候我一个罐子都得不到。但我不能说我要这个罐子,但里面不能有蓝色的球。
    可能你是基于块的角度来查询的,type!='i' and subtype != 't' 确实就可以排除掉任务块,但是这个块对我说是块(文档快)下面的块(查询待办结果的嵌入块)。而且似乎思源有一套决定是否展示嵌入块的逻辑?比如如果这样基于块去查询的时候,根节点下的嵌入块是不会显示的。·

    SELECT blocks.* FROM blocks
    JOIN (
      SELECT t1.id, t1.content FROM blocks as t1
      WHERE hpath like '/笔耕不辍%-%'
        AND type = 'd'
        AND EXISTS (
          SELECT * FROM blocks as b1
          WHERE
             parent_id = t1.root_id
            AND markdown <> ''
        )
        AND strftime('%Y-%m-%d', content) IS NOT NULL
      ORDER BY created DESC
    ) AS subquery ON blocks.parent_id = subquery.id
    WHERE blocks.markdown <> ''
    AND type != 's'
    ORDER BY subquery.content DESC
    

    但在 Navicat 中这串 sql 是能查到有嵌入块的结果的,具体什么机制我也没搞懂。

    1 回复
    1 操作
    Kootea 在 2023-03-31 00:11:53 更新了该回帖
  • 太深奥了,type = s 是超级块吧?为什么要剔除超级块?感觉和你想要查询的内容不一致,是不是这个导致了结果错误?

    1 回复
  • Kootea

    那个没关系啦,是因为后面我最新每日笔记的模板中使用超级块拼接了两个嵌入块分别查询不同标签的东西,然后希望把这个超级块排除掉而已。原本是只有一个嵌入块嘛,所以想剔除嵌入块,现在是超级块所以剔除超级块。

  • Kootea

    😭 我总觉一定有个很简单的办法,只是我不懂。

  • 如果真是因为 query_embed 没有生效,就去 GitHub 发一个 issue 吧。

    1 回复
  • Kootea

    不是 query_embed 没生效啦,**SELECT** **\*** **FROM** **blocks** **as** **t1** **WHERE** **hpath** **like** **'**/**笔耕不辍**%-%**'** ** **AND** **type** **=** **'d' 这里就说明找出来的是文档,结果就不会存在 type=query_embed 的块。在文档块结果集中去排除嵌入块没有意义的。 快放弃了,不知这流式日记啥时候会有呢

请输入回帖内容 ...

推荐标签 标签

  • PWL

    组织简介

    用爱发电 (Programming With Love) 是一个以开源精神为核心的民间开源爱好者技术组织,“用爱发电”象征开源与贡献精神,加入组织,代表你将遵守组织的“个人开源爱好者”的各项条款。申请加入:用爱发电组织邀请帖
    用爱发电组织官网:https://programmingwithlove.stackoverflow.wiki/

    用爱发电组织的核心驱动力:

    • 遵守开源守则,体现开源&贡献精神:以分享为目的,拒绝非法牟利。
    • 自我保护:使用适当的 License 保护自己的原创作品。
    • 尊重他人:不以各种理由、各种漏洞进行未经允许的抄袭、散播、洩露;以礼相待,尊重所有对社区做出贡献的开发者;通过他人的分享习得知识,要留下足迹,表示感谢。
    • 热爱编程、热爱学习:加入组织,热爱编程是首当其要的。我们欢迎热爱讨论、分享、提问的朋友,也同样欢迎默默成就的朋友。
    • 倾听:正确并恳切对待、处理问题与建议,及时修复开源项目的 Bug ,及时与反馈者沟通。不抬杠、不无视、不辱骂。
    • 平视:不诋毁、轻视、嘲讽其他开发者,主动提出建议、施以帮助,以和谐为本。只要他人肯努力,你也可能会被昔日小看的人所超越,所以请保持谦虚。
    • 乐观且活跃:你的努力决定了你的高度。不要放弃,多年后回头俯瞰,才会发现自己已经成就往日所仰望的水平。积极地将项目开源,帮助他人学习、改进,自己也会获得相应的提升、成就与成就感。
    1 引用 • 487 回帖 • 2 关注
  • 人工智能

    人工智能(Artificial Intelligence)是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门技术科学。

    135 引用 • 191 回帖
  • 爬虫

    网络爬虫(Spider、Crawler),是一种按照一定的规则,自动地抓取万维网信息的程序。

    106 引用 • 275 回帖 • 1 关注
  • NGINX

    NGINX 是一个高性能的 HTTP 和反向代理服务器,也是一个 IMAP/POP3/SMTP 代理服务器。 NGINX 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,第一个公开版本 0.1.0 发布于 2004 年 10 月 4 日。

    313 引用 • 547 回帖
  • CloudFoundry

    Cloud Foundry 是 VMware 推出的业界第一个开源 PaaS 云平台,它支持多种框架、语言、运行时环境、云平台及应用服务,使开发人员能够在几秒钟内进行应用程序的部署和扩展,无需担心任何基础架构的问题。

    5 引用 • 18 回帖 • 172 关注
  • Spark

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

    74 引用 • 46 回帖 • 560 关注
  • Logseq

    Logseq 是一个隐私优先、开源的知识库工具。

    Logseq is a joyful, open-source outliner that works on top of local plain-text Markdown and Org-mode files. Use it to write, organize and share your thoughts, keep your to-do list, and build your own digital garden.

    6 引用 • 63 回帖 • 4 关注
  • SQLServer

    SQL Server 是由 [微软] 开发和推广的关系数据库管理系统(DBMS),它最初是由 微软、Sybase 和 Ashton-Tate 三家公司共同开发的,并于 1988 年推出了第一个 OS/2 版本。

    21 引用 • 31 回帖 • 2 关注
  • Thymeleaf

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

    11 引用 • 19 回帖 • 364 关注
  • Unity

    Unity 是由 Unity Technologies 开发的一个让开发者可以轻松创建诸如 2D、3D 多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。

    25 引用 • 7 回帖 • 160 关注
  • 禅道

    禅道是一款国产的开源项目管理软件,她的核心管理思想基于敏捷方法 scrum,内置了产品管理和项目管理,同时又根据国内研发现状补充了测试管理、计划管理、发布管理、文档管理、事务管理等功能,在一个软件中就可以将软件研发中的需求、任务、bug、用例、计划、发布等要素有序的跟踪管理起来,完整地覆盖了项目管理的核心流程。

    5 引用 • 15 回帖 • 101 关注
  • Openfire

    Openfire 是开源的、基于可拓展通讯和表示协议 (XMPP)、采用 Java 编程语言开发的实时协作服务器。Openfire 的效率很高,单台服务器可支持上万并发用户。

    6 引用 • 7 回帖 • 101 关注
  • 小薇

    小薇是一个用 Java 写的 QQ 聊天机器人 Web 服务,可以用于社群互动。

    由于 Smart QQ 从 2019 年 1 月 1 日起停止服务,所以该项目也已经停止维护了!

    34 引用 • 467 回帖 • 747 关注
  • 外包

    有空闲时间是接外包好呢还是学习好呢?

    26 引用 • 232 回帖
  • Ubuntu

    Ubuntu(友帮拓、优般图、乌班图)是一个以桌面应用为主的 Linux 操作系统,其名称来自非洲南部祖鲁语或豪萨语的“ubuntu”一词,意思是“人性”、“我的存在是因为大家的存在”,是非洲传统的一种价值观,类似华人社会的“仁爱”思想。Ubuntu 的目标在于为一般用户提供一个最新的、同时又相当稳定的主要由自由软件构建而成的操作系统。

    126 引用 • 169 回帖
  • 互联网

    互联网(Internet),又称网际网络,或音译因特网、英特网。互联网始于 1969 年美国的阿帕网,是网络与网络之间所串连成的庞大网络,这些网络以一组通用的协议相连,形成逻辑上的单一巨大国际网络。

    98 引用 • 344 回帖
  • Android

    Android 是一种以 Linux 为基础的开放源码操作系统,主要使用于便携设备。2005 年由 Google 收购注资,并拉拢多家制造商组成开放手机联盟开发改良,逐渐扩展到到平板电脑及其他领域上。

    334 引用 • 323 回帖 • 5 关注
  • AngularJS

    AngularJS 诞生于 2009 年,由 Misko Hevery 等人创建,后为 Google 所收购。是一款优秀的前端 JS 框架,已经被用于 Google 的多款产品当中。AngularJS 有着诸多特性,最为核心的是:MVC、模块化、自动化双向数据绑定、语义化标签、依赖注入等。2.0 版本后已经改名为 Angular。

    12 引用 • 50 回帖 • 483 关注
  • SOHO

    为成为自由职业者在家办公而努力吧!

    7 引用 • 55 回帖 • 5 关注
  • SendCloud

    SendCloud 由搜狐武汉研发中心孵化的项目,是致力于为开发者提供高质量的触发邮件服务的云端邮件发送平台,为开发者提供便利的 API 接口来调用服务,让邮件准确迅速到达用户收件箱并获得强大的追踪数据。

    2 引用 • 8 回帖 • 486 关注
  • OAuth

    OAuth 协议为用户资源的授权提供了一个安全的、开放而又简易的标准。与以往的授权方式不同之处是 oAuth 的授权不会使第三方触及到用户的帐号信息(如用户名与密码),即第三方无需使用用户的用户名与密码就可以申请获得该用户资源的授权,因此 oAuth 是安全的。oAuth 是 Open Authorization 的简写。

    36 引用 • 103 回帖 • 17 关注
  • ZeroNet

    ZeroNet 是一个基于比特币加密技术和 BT 网络技术的去中心化的、开放开源的网络和交流系统。

    1 引用 • 21 回帖 • 633 关注
  • wolai

    我来 wolai:不仅仅是未来的云端笔记!

    2 引用 • 14 回帖
  • Swagger

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

    26 引用 • 35 回帖 • 5 关注
  • Elasticsearch

    Elasticsearch 是一个基于 Lucene 的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于 RESTful 接口。Elasticsearch 是用 Java 开发的,并作为 Apache 许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。

    117 引用 • 99 回帖 • 209 关注
  • Kotlin

    Kotlin 是一种在 Java 虚拟机上运行的静态类型编程语言,由 JetBrains 设计开发并开源。Kotlin 可以编译成 Java 字节码,也可以编译成 JavaScript,方便在没有 JVM 的设备上运行。在 Google I/O 2017 中,Google 宣布 Kotlin 成为 Android 官方开发语言。

    19 引用 • 33 回帖 • 63 关注
  • API

    应用程序编程接口(Application Programming Interface)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。

    77 引用 • 430 回帖