• 一般的に検索はフィルタリングとソート。ここで考えるのはこれらを一段汎用化したもので、スコアリングとフォーマット。
  • 検索ページに書かれた情報を活用する機能
    ページには単純な構造で十分な情報を。その情報をつなぎ合わせるのが検索
  • 自動生成されるページ検索機能によって作られる。
    動的に生成されるページ検索機能を使ったもの。

  1. オブジェクト化
    検索/クエリー と ページ をElement化
  2. 類似度評価
    検索/スコアリング
    結果に出すものと順序が決まる。
  3. ページ
    検索/フォーマット
    体裁を与える。

※いずれも検索/クエリーで作ったオブジェクトの機能で。

方法 Edit

実装上は検索機能
組み込み済機能。必ず存在する機能
こうして、他の機能連携できるように。

1ページ、1ソート順 Edit

ソート順が違う結果を出力するなら別のページに。
そうしないとAPIなどから自動処理しづらい。

検索/クエリーのリスト1つあたり1ページに。

ソート順は検索/クエリーが決める。

フィルタリング、変換 Edit

+検索フォームからの入力
フィルタリング、変換→検索クエリー
+ページ
フィルタリング、変換→検索ページ
+検索クエリーと適合した検索ページのみ検索結果に追加する
+検索結果をソートする

…を検索/クエリーの数だけ繰り返す。
フィルタリングルール、またはソートルールだけの検索/クエリーも可能。

UIでフィルタリング、変換のルールを指定したりしない。面倒になる。
機能を作ることで利用可能に。

→ソートは最後だけ(テンプレートに埋め込むときだけ)にする。その代わり、スコアを最後まで残す。

日記を特定のキーワードで検索して「その1日前に何をしていたか」を一覧したい Edit

検索結果1件ごとに「1日前」というリンクを辿って、その1件をリンク先と置き換える。
検索結果からそれぞれの1日前ページ一覧を作れる。
…というのをフィルタリングルールで。

  1. フィルタリング1回目
    ページからキーワードを含むページのみを得て、それを結果へ。
  2. フィルタリング2
    結果から「1日前」というリンクを得て、それを展開して、結果へ。
    展開は リンクリンク先のページ をする機能を使って。
  3. フィルタリング3
    結果の見出しのみを得て、それを結果へ。

検索キーワードではAndAlso検索をするように指定。検索:AndAlso

検索結果に要約と「編集リンク Edit

  • 要約
    ページ内容の内、該当部分も示させたい。(ページ単位よりも小さい単位で)
    段落単位か行単位で。(文字/文節単位だと意味が分からない)
    ツリー形式の出力なら段落単位、形式の出力なら行単位で。
ページの一覧
	ページ1
		章1 [[編集:ページ1/章1]]
		該当部分(段落単位)
		--------
		章4 [[編集:ページ1/章4]]
		該当部分(段落単位)
	ページ3
		…

出力はHTML Edit

  • ページの一部分
    ページに埋め込んで示できる形式。
  • 章ではない
    章としての機能を持たないため。

時系列検索 Edit

1つのページバージョン検索
新→旧の順に優先して示。

ある言葉がいつ(加えられた|消された)かが分かる。

日時を指定して、その時点での全てのページを探すのもいい。
タイムマシン検索」?

これも(あるページの)全バージョンの一覧というページ内を検索することで実現。


ページの全バージョン検索できればなおいい。

ページを探す、文字列を探す Edit

  • ページから条件に合うページを探す。
  • 1ページ内の全テキストから条件に合う部分を探す。
    行単位で。

→統一
これをページ内のテキストを探す方だけに統一できる。
「全ページの一覧ページ」を検索、このページには全ページが章として埋め込まれている。
で、章を含めて検索
章を含めた検索編集時のテキストを検索するのと同じ。章を展開して1つのWikiTextの形式にして処理。
章の展開を適切にすれば負荷を低減できる。

自動生成ページ検索対象にすることで特殊検索 Edit

自動生成ページで特別な観点で集計した検索対象を作れば、いろいろな検索に対応できるはず。

検索のアルゴリズム Edit

検索ページセットが制御。検索とはページセットが自身を縮小する処理のこと。→ページセット
呼び出された時に与えられた検索/クエリーと、自身が持つページを比較。

検索のアルゴリズム Edit

  • 並べ替えをする
    →複数の要素が必要

要素とは?
→Element
newとoutができるもの。


  • 変換もする。
    URL→ページ内容に。
    その中の~月~日だけを(1つ)返す。

解釈 Edit

数値なら近い数にも高スコアを。

#000000、#000なら各桁ごとに近い数かどうか判断。

#309と#209は最も近い数ということになる。

  • 20061231と20070101も近い。
  • 月と日も近く、水と火も近い。

それぞれに対応する記法が要る。
もし、特定のページ記法を定義できるような機能できれば、それで間に合う。

 

…これをページ/名前リンクで定義できれば尚可。

  • 特殊な数値もページで定義できる。
    →マッピング。
    1次元の値に写像すればいい。
    x1〜x2→y5〜y6
  • クエリー作成に時間がかかりそうなので、クエリー作成と検索を分けてもいい。
    操作不要、自動で続けるようにして。クエリー作成でマッピング後の現にして。

RIGHT::t/![?]

  • 定義は機能のクラスごとに。
    解釈の仕方は機能の定義。
    機能には2つのオブジェクト間の「近さ」を求める機能を。

→つまり#数値記法や曜日記法、体重記法日付記法、季節記法、二十四節気記法などを用意、それぞれの記法ごとに検索するということ。

データページ主体 Edit

すべてのページを得る → その中を検索ページを得る → その中を検索ページを得る → その一覧を検索結果とする。
というDecoratorパターンになるように。

機能出力を機能の入力にする仕組みで。