0%

Logseq使用教程之六:DailyNotes检索式

最终效果

本文演示的Logseq检索式使用共有3种形式

  1. config.edn:default-queries{:journals[...]}中配置高级检索式。在当天的DailyNotes页面自动执行检索。如上图左侧的A级任务NOW任务临近DeadLine笔记漫游4个检索式

  2. 也可以在任意页面执行简单或高级检索式。如上图右侧目录页面的简单检索论文进行时,高级检索式过期DeadLineNEXT

  3. 第三种方式则是配置在config.edn:default-templates {:journals }中。在Logseq生成当天日记页面时,自动生成配置的内容。此种方法也可以有两种不同的方式实现:

    • 其一,直接在其内嵌入简单检索式。如此链接的说明。但这种方式修改并不方便也不灵活,在Logseq支持调用模版功能后,就不再使用了。
    • 第二种就是通过调用模板实现检索,而把高级或简单检索式及其他内容设置为模板即可。

检索式配置

以下的检索式配置在config.edn:default-queries{:journals[...]}

A级任务

检索标记了 TODO [#A]的block

1
2
3
4
5
6
7
8
{:title [:h5.font-bold.opacity-50 "🔥️ A级任务"] 
:query [:find (pull ?b [*]) :where
[?b :block/marker ?marker]
[(= "TODO" ?marker)] ;;只使用关键词`TODO`进行任务标记
(not [?b :block/scheduled])
[?b :block/priority ?prio] ;;block优先级属性判断
[(= "A" ?prio)]
]}

NOW任务

Logseq新建本地库时,config中默认有2个检索式,NOWLATER。但默认的检索式只能检索DailyNotes页面中的NOW或DOING任务,其他新建页面的任务并不能检索到。因此,此处将官方的NOW检索式稍作修改,实现对所有页面中任务的检索

1
2
3
4
5
6
7
8
9
{:title [:h5.font-bold.opacity-70 "🔨 NOW"]
:query [:find (pull ?h [*])
:where
[?h :block/marker ?marker]
[(contains? #{"NOW" "DOING"} ?marker)]] ;;任务标记关键词
:result-transform (fn [result]
(sort-by (fn [h]
(get h :block/priority "Z")) result))
:collapsed? false} ;;检索结果是否折叠,缺省表示展开

临近DeadLine

检索未来7天内标记了DeadLine的任务

1
2
3
4
5
6
7
8
9
10
11
12
13
{:title [:h5.font-bold.opacity-50 "🚦️ 临近DeadLine"]
:query [:find (pull ?b [*])
:in $ ?start ?next
:where
[?b :block/deadline ?d] ;;任务标记了deadline
[?b :block/marker ?marker]
(not [?b :block/priority])
[(> ?d ?start)]
[(< ?d ?next)]
[(contains? #{"NOW" "LATER" "DOING" "TODO"} ?marker)]] ;;任务标记关键词
:inputs [:today :7d-after] ;;检索未来7天的DeadLine
:collapsed? false
:breadcrumb-show? false} ;;检索结果是否显示面包屑路径

笔记漫游

随机回顾有特定tag的block。

个人使用场景:文献阅读后,会给其打1-5★星级tag。笔记漫游检索式就是检索3.5-5★的笔记,并随机返回5个结果

1
2
3
4
5
6
7
8
9
10
{:title [:h5.font-bold.opacity-70 "🏊🏻 笔记漫游"]
:query [:find (pull ?b [*])
:where
[?p :page/name ?name]
[?b :block/ref-pages ?p]
[(contains? #{"3.5★️" "4★️" "4.5★️" "5★️"} ?name)]]
:result-transform (fn [blocks]
(take 5 (shuffle (take 1000000 blocks)))) ;;随机返回5个结果
:block/name-show? true}


由于过多的检索式会影响性能,以下的检索式就从最初的:default-queries中挪到了目录页面中

论文进行时

个人使用场景:新建的笔记页面,都会设置页面属性。样例如下

1
2
3
4
5
type:: 笔记
item-type:: 期刊论文
plane:: todo/doing/done
created:: [[2021-12-06]]
ended:: [[2021-12-07]]

如果某个页面仍在编辑中,但暂时需要离开或隔段时间才会继续。就会把属性plan的值改为doing。而为了快速地回到此页面同时也是个提醒,就可以利用如下的简单检索式进行检索汇总

1
{{query (page-property plan "doing")}}

过期DeadLine

1
2
3
4
5
6
7
8
9
10
11
#+BEGIN_QUERY
{:query [:find (pull ?b [*])
:in $ ?start
:where
[?b :block/deadline ?d]
[?b :block/marker ?marker]
(not [?b :block/priority])
[(< ?d ?start)]
[(contains? #{"NOW" "LATER" "DOING" "TODO"} ?marker)]]
:inputs [:today]}
#+END_QUERY

NEXT任务

NOW任务检索式一样,Logseq官方默认检索式结果只限于DailyNotes页面。另外,标记了SheduledDeadline的任务会出现在Logseq每日笔记的SCHEDULED AND DEADLINE中或临近/过期DeadLine的检索式中。为避免同一任务同时出现在不同检索结果中,个人的使用场景是不重要的一般性任务,只使用LATER标记。

1
2
3
4
5
6
7
8
9
#+BEGIN_QUERY
{:query [:find (pull ?h [*])
:where
[?h :block/marker ?marker]
[(contains? #{"LATER"} ?marker)] ;;任务标记关键词
[(missing? $ ?h :block/scheduled)] ;;排除标记了Sheduled的任务
[(missing? $ ?h :block/deadline)]] ;;排除标记了Deadline的任务
:collapsed? false}
#+END_QUERY

每日模板检索式

使用场景。阅读某篇文献时,可能随时就在Logseq中新建一个相关参考或引证文献的笔记页面。此时页面属性plan的取值为todo,也有创建日期属性created。但很可能过段时间也就忘了这茬。此时每日DailyNotes自动生成时,就会调用这个模板中的检索式,把14天前的todo页面检索出来,提醒自己尽快阅读此文献。

1
2
3
4
<!-- 模板内容,模板名 = 每日模板 -->
- 2周前
- TOD [#A] 2周前待读文献阅读完成
- {{query((and (page-property created <% 14 days ago %>) (page-property plan "todo") ))}}
1
2
3
;;  config.edn配置
:default-templates
{:journals "每日模板"}

上述模板中的TOD [#A] 2周前待读文献阅读完成。如果有检索结果,只要把TOD补全为TODO,就自动将此任务标记为了A级任务,出现在了每日DailyNotes页面中的A级任务检索结果中

参考资料