Jazzと読書の日々

iPadを筆記具として使う方法を模索します

Obsidian:Roomで全文検索を始めよう

まいど同じネタです。

Room

ObsidianにScrapbox(Cosence)のメニューをつけてみる。 そういう狙いのDataviewスクリプトです。

前回queryファイルを使わないので取り外したのですが、すると少し味気ない。 そもそも「Obsidianをローカルなインターネットに見立ててみよう」の意図だったので、全文検索できないのも不便です。

ということで、検索を見直しました。

使い方

リーディングビューで見るとファイル履歴がカード形式で表示されます。

タップすればそのファイルが開く仕組み。 検索欄にキーワードを打ち込むとファイル名で絞り込みをします。

今回の変更点は、検索欄にキーワードを書いてから「+」を押したとき。 これを全文検索にしました。 コアプラグインの検索にキーワードを引き継ぎます。

検索欄が空欄のときは新規ファイル作成になります。

Room.md

スクリプトは下記のようになります。

Import Obsidian: Room

>[!note]- Room
>```dataview
>task where !completed group by file.link
>```
 
```dataviewjs
const s = "background:ivory;width:119px;height:112px;border:1px solid #eee;border-top:10px solid gold;text-decoration:none;padding:3px;border-radius:5px;margin:3px;overflow:hidden;float:left;"
const ss = "border-top:10px solid orange;"

const p = dv.el("input")
p.placeholder = "..."
p.style = "background:whitesmoke;font-size:large;width:50%;border-radius:5px;border:1px silver solid;"
const btn = dv.el("button","+")
btn.style = "background:none;font-size:small;margin:5px;width:20px;"
const b = dv.el("div", "")
b.style = "font-size:small;height:4000px;"
disp()

p.onkeyup = () => disp()

btn.onclick = () => {
  q = encodeURIComponent(p.value)
  if(q){
    open(`obsidian://search?query=${q}`)
  }else{
    open("obsidian://new")
  }
}


function disp(){
  r = new RegExp(`${p.value}`, "i")
  const c = dv.pages('').file
    .filter(x => x.starred)
    .filter(x => r.test(x.name))
    .sort(x => x.mtime, "desc")
    .map(x => `<a class=internal-link style='${s}${ss}' href='${x.path}'>${x.name}</a>`)
  const d = dv.array(Object.entries(dv.app.metadataCache.fileCache))
    .filter(([x,y]) => r.test(x))
    .sort(([x,y]) => y.mtime, "desc")
    .limit(200)
    .map(([x,y]) => `<a class=internal-link style='${s}' href='${x}'>${x.split("/").pop().replace(/.md$/,"")}</a>`)
  b.innerHTML = c.join("") + d.join("")
}
```

AND検索の定位性

全文検索についてですが、普通に多いのは「二つのキーワードをともに含むファイル」という探し方ですね。 AND検索。 これをよく使う。

ある言葉とある言葉の交差点。 記憶はそんな構造をしているのかもしれません。 補助線が一つだけでは特定しにくい。 該当するファイルが列挙されてパニックになります。

二つ補助線を引くとき、焦点が定まる。 目が二つあるのも、耳が二つあるのも、似た理由なのでしょう。 位置の特定には二つの補助線が必要になる。

説明がうまい文章を見ると、そこにも二つの視点があって、同じことを別のメタファーで表現する工夫がされています。 二つのメタファーが軽く使われている。 すると、その事象を定位しやすい。

物事を考えるとき二項対立が使われるのも、思考が2つの視点を必要とするからでしょう。 決して「対立」ではない。 補助線が2つあって「何か」を考えることができる。

その「何か」がサブジェクト(主題)であり、使われる補助線はオブジェクト(対象)なのだろうなあ。 オブジェクトだけ見ていてもサブジェクトは読み取れない。

まとめ

Obsidianをバージョンアップしてから、テキスト横幅が増えてしまった。 たぶんStyle関係のプラグインとバッティングしたんだろうなあ。 アンインストールしても状況は変わらず。

使う分には困らないので、このまま使用を続けています。