generated at
QuickSearch
scrapboxが使っているリンク検索moduleのクラス名
asearch歯抜けマッチングを使った検索処理の実装は全てこのクラスの中に入っている

実装詳細
class QuickSearch
getCache()
fetch()
cache firstでデータを取得する
load()
set()
cacheから取得した後一旦呼び出し側に復帰する
そのあとnetworkからとってくる
sourceIsCache を切り替える
データは set() に入れている
initialize()
compile()
quick-search:compile という命令でdeducated-workerに何らかのタスクを投げている
ここで this.pages を構築している
delete()
updateLink()
find()
findById()
exists()
regexSearch()
正規表現検索
5単語未満のときは並べ替え検索を行う
e.g. abc def ghi
["a\s*b\s*c", "d\s*e\s*f", "g\s*h\s*i"] /(a\s*b\s*c.*d\s*e\s*f.*g\s*h\s*i|a\s*b\s*c.*g\s*h\s*i.*d\s*e\s*f|d\s*e\s*f.*a\s*b\s*c.*g\s*h\s*i|d\s*e\s*f.*g\s*h\s*i.*a\s*b\s*c|g\s*h\s*i.*d\s*e\s*f.*a\s*b\s*c|g\s*h\s*i.*a\s*b\s*c.*d\s*e\s*f)/i
検索文字列の前後に空白を入れると、 .* が先頭と末尾につくみたい?
これで検索結果が変わる。なんでだろう?
.* をつけると、空白区切りの文字列もマッチするようになるということ?
5単語以上あるときは、 splitter をwild cardとした歯抜けマッチングを行う
approximatePatternSearch()
asearchに相当
あいまい度は1で固定されている
word で検索をかけたあと、検索結果を短い順に並べ替えている
search()
検索文字列が2文字以下か正規表現検索結果が11件以上の場合は正規表現検索を使う
つまり、あいまい検索は検索文字列が長くて正規表現検索結果が少ないときしか実行しない
検索フォームの検索では最大100個まで検索している
linkSuggest()
iconSuggest()
sortByIcons()

どうやら検索はworkerではなくUIでやっているようだ
処理落ちしないのかな?

2022-02-11 14:46:21 少し説明を移動した

#2022-02-11 14:46:31
#2022-01-26 07:46:20
#2022-01-16 08:05:16