QuickSearch
実装詳細
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()
あいまい度は1で固定されている
word
で検索をかけたあと、検索結果を短い順に並べ替えている
search()
検索文字列が2文字以下か正規表現検索結果が11件以上の場合は正規表現検索を使う
つまり、あいまい検索は検索文字列が長くて正規表現検索結果が少ないときしか実行しない
検索フォームの検索では最大100個まで検索している
linkSuggest()
iconSuggest()
sortByIcons()
どうやら検索はworkerではなくUIでやっているようだ
処理落ちしないのかな?
2022-02-11 14:46:21 少し説明を移動した