Hello, I created an interface for searching literature notes that is quick and easy to use.
This script provides a library-catalog interface to search literature notes, i.e. source metadata, plus your notes or PDF annotations imported via a plugin, for example, Zotero Integration.
The setup consists of a Dataview script (in two files) that you can find here: GitHub - erazlogo/obsidian-lit-notes-search: Library-catalog interface to search literature notes in Obsidian.
It is a separate note that looks like a library catalog search, including an option to search for âeverythingâ (keyword). Search results appear in real time in a table in the same note:
-
keyword
finds text in the entire note text + note title.
-
note-title
finds text in the file name of your literature note (usually your source citekey).
- For text fields, this is a case-insensitive phrase search.
- Enter dates as
YYYY-MM-DD
, <YYYY-MM-DD
and >YYYY-MM-DD
.
- Enter tags as
#tag1 #tag2
.
- Enter exact field title and
asc/desc
to sort by field.
- Leave sort fields blank to sort by
note-title, desc
.
Necessary plugins and settings in Obsidian:
- Live Preview: On
- Dataview (Community plugins; Settings: Enable Javascript Queries - On, Automatic View Refreshing - On)
- A plugin or script to import your source metadata from a reference manager or bibtex file
The idea is to get you to your own writing faster. Once you can easily locate ideas within literature notes, you can quickly link them to your own concept notes and then concentrate on the famous Obsidian feature, writing-via-linking.
This script can also be adapted to search any Dataview fields in your vault.
4 Likes
Apologies for my spectacular dimness, but I am having trouble getting this to work (it looks terrific by the way!). Here is an eg of my literature note yaml:
title: "Chernobyl and the Sublime Tourist"
authors: ["Jeff Goatcher", "Viv Brunsden"]
itemType: Article
publicationTitle: '[[Tourist Studies]]'
date: 2011
dateAdded: [[2020-12-07]]
url: http://tou.sagepub.com/content/11/2/115
DOI: https://doi.org/10.1177/1468797611424956
citeKey: goatcher2011
tags: Chernobyl, recovery, visual-sociology, post-modern-sublime, zotero, reference
created: 2020-11-15T17:57:24
lastModified: 2021-12-07T00:23:11
I am unsure just what to change inscript.js
and/or search.md
. Any hand-holding much appreciated!
In addition to changing the folder names (see readme on github), you need to change these:
search.md:
author:: â authors::
publication:: â publicationTitle::
view.js (all instances):
current.author / page.author / p.author â current.authors / page.authors / p.authors
current.publication / page.publication / p.publication â current.publicationTitle / page.publicationTitle / p.publicationTitle
This will make it possible for you to search by author, title, publication title, and keyword. The fields you donât have (comment, start-date, etc) you can just delete from search.md
and leave as is in the scriptâthey will be excluded automatically.
I donât use YAML tags, but the tag search should also work without any changes. Youâll need to search for tag #Chernobyl
but it will find the note with Chernobyl
in YAML tags.
Your authors are entered as a list I think, so you might only be able to search by exact author as entered: Jeff Goatcher
but not Goatcher
. To make them searchable by part of name, I separate the authors by semicolon rather than comma. But you need to test thisâmaybe I am wrong and Goatcher
will work.
Your date has to be formatted YYYY-MM-DD for the search to work, unfortunately. So your current date 2011
would have to be entered as '2011-01-01` to be read as a date for search purposes. If you change this, the date search will work also.
Thank you for such a fulsome reply. Unfortunately, I cannot get it to work. I must close my pooter for now, but will continue to jiggle with it later⌠in the meantime, this looks unusual to my untrained eye; have I got this bit correct (backticks notwithstanding)âŚ
âââdataviewjs
await dv.view("/Templates/Scripts", { });
âââ
You need to omit the slash before âTemplatesâ:
await dv.view(âTemplates/Scriptsâ, { });