RIGHT:[[:t/プロトタイピング]] [[:t/検索]]

#contents

*検索はQueryクラスで [#k44496c6]
-1単語あたりの評価はNotationに任せる
ページもクエリーもNotationの集まりなので、Notation同士で1単語分の類似度評価。それを繰り返して1ページ分の評価にする。
[[code*:375]]
-呼び出しはコントロールクラスのUseCase

類似度判定なので、リンク先を含む検索はリンクの書式と同じ書き方
キーワード1 (Notation/Linkと同じ表現で)[[曜日:*]]
[[曜日:*]]は、リンク名(というか種類というかタグ)が「曜日」で、リンク先はなんでも可。
|
※ワイルドカードが必要。

検索結果のソートはNotation/Sortと同じ表現で。
検索結果のフォーマットはNotation系か検索結果ページのテンプレートから選択して1つ指定。

要、評価順。
リンク元と比較するキーワードと、リンク先と比較するキーワードが混在するので。元→先の順に書くことにして、左から評価。
**表現 [#n4ddb66a]

書き方を

Page(ページ名検索キーワード) → ページ名リスト
Exist(ページ内容検索キーワード, 検索対象とするページ名リスト) → ページ名リスト
Filter(ワイルドカードを含むキーワード, 検索対象とするページ名リスト) → ワイルドカード部分リスト

とすると

 Exist(『減』, Page(Filter([[1日前:*]], Exist(『増』, Page(*)))))
で
((『増』が記録されているページ)の1日前)で『減』が記録されているページ
つまり『減』が記録されているページを取得することになる。
これをより分かりやすく、間違えにくい表現にすると?

----

 『増』のあるページと1日前つながりで『減』のあるページ

 『増』 1日前つながり 『減』

 『増』 1日前→ 『減』

|検索語|解析するクラス|対象ページ|一致する文字列|
|『増』|Notation/PlainText|全ページ|『増』|
|1日前→|Notation/Link|全ページ(または『増』を含むページ)|[[1日前:.*]]|
|『減』|Notation/PlainText|『増』を含むページ|『減』|

1つのページと同じ表現ができるなら、検索クエリーのページ化→類似度判定1回で済むが、複数ページがどうリンクされているかまでは表現できない。
そのため、検索クエリーにはページ編集時とは違う特別な解析が必要になる。

解析後(単語ごとの分割と、処理順の決定後)は[[code*:375]]と同じ。

----
**?付きの検索語 [#v637819c]
結果のソート順にのみ影響する?付き単語。

 1 AND 2? OR 3
↓
 1 OR 3 2?
と同じ。

AND 2?、OR 2?、NOT 2?、どれも2?になる。

というわけで、「?付きは最後につけた方が分かりやすくなります」
**先に書いた方が高スコア [#u2031472]
検索式の各語は先に書いた方がやや高スコア。(スコアに加味される他の要素よりも影響小)

''例''
 A B C

''順位''
+A、B、C すべてを含むページ
+A、B を含むページ
+A、C を含むページ
+B、C を含むページ
+A だけ含むページ
+B だけ含むページ
+C だけ含むページ

…となる。
**AND、OR、NOT、()()も有効に [#hd5c6c59]
一般的なので。
**基本的に部分一致。(プログラムからの検索の時も) [#j44afa1e]
完全一致にするには""か「」で。


**検索結果をさらに検索 [#h0d9f84b]
検索結果をさらに検索するには、検索結果をWikiテキストにしてページ化。
それが検索対象になればいい。


**検索時、入力するのも記法 [#g5bb9ea4]
全てがページ。
ただし、検索では複数ページにヒットする検索式を書けるので、特別な処理でそれを1ページ分ずつ分割。