本文演示的Logseq檢索式使用共有3種形式
在config.edn的 :default-queries{:journals[...]}中配置高級檢索式。在當天的DailyNotes頁面自動執行檢索。如上圖左側的A級任務、NOW任務 、臨近DeadLine和筆記漫遊4個檢索式
也可以在任意頁面執行簡單或高級檢索式。如上圖右側目錄頁面的簡單檢索論文進行時,高級檢索式過期DeadLine和NEXT
第三種方式則是配置在config.edn的 :default-templates {:journals }中。在Logseq生成當天日記頁面時,自動生成配置的內容。此種方法也可以有兩種不同的方式實現:
其一,直接在其內嵌入簡單檢索式。如此連結的說明。但這種方式修改並不方便也不靈活,在Logseq支持調用模版功能後,就不再使用了。第二種就是通過調用模板實現檢索,而把高級或簡單檢索式及其他內容設置為模板即可。檢索式配置以下的檢索式配置在config.edn的 :default-queries{:journals[...]}中
A級任務檢索標記了 TODO [#A]的block
{: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個檢索式,NOW和LATER。但默認的檢索式只能檢索DailyNotes頁面中的NOW或DOING任務,其他新建頁面的任務並不能檢索到。因此,此處將官方的NOW檢索式稍作修改,實現對所有頁面中任務的檢索
{: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的任務
{: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個結果
{: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中挪到了目錄頁面中
論文進行時個人使用場景:新建的筆記頁面,都會設置頁面屬性。樣例如下
type:: 筆記
item-type:: 期刊論文
plane:: todo/doing/done
created:: [[2021-12-06]]
ended:: [[2021-12-07]]如果某個頁面仍在編輯中,但暫時需要離開或隔段時間才會繼續。就會把屬性plan的值改為doing。而為了快速地回到此頁面同時也是個提醒,就可以利用如下的簡單檢索式進行檢索匯總
{{query (page-property plan "doing")}}
過期DeadLine#+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頁面。另外,標記了Sheduled和Deadline的任務會出現在Logseq每日筆記的SCHEDULED AND DEADLINE中或臨近/過期DeadLine的檢索式中。為避免同一任務同時出現在不同檢索結果中,個人的使用場景是不重要的一般性任務,只使用LATER標記。
#+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頁面檢索出來,提醒自己儘快閱讀此文獻。
<!-- 模板內容,模板名 = 每日模板 -->
- 2周前
- TOD [#A] 2周前待讀文獻閱讀完成
- {{query((and (page-property created <% 14 days ago %>) (page-property plan "todo") ))}};; config.edn配置
:default-templates
{:journals "每日模板"}上述模板中的TOD [#A] 2周前待讀文獻閱讀完成。如果有檢索結果,只要把TOD補全為TODO,就自動將此任務標記為了A級任務,出現在了每日DailyNotes頁面中的A級任務檢索結果中
參考資料Logseq官方文檔:https://logseq.github.io/#/page/ContentsLogseq中文社區:https://cn.logseq.comlogseq使用經驗分享:https://xutuan.vercel.app不再更新,裡面很多示例是使用了Logseq重構前的老版本,可能在最新版Logseq中不太適用https://dn.vercel.app/#/page/logseq%2Fqueries關於我
個人博客:https://xulei.vercel.app學術主頁:https://lei.vercel.app碎片日誌:https://dn.vercel.app可點擊閱讀原文獲得完整閱讀體驗