- 追加された行はこの色です。
- 削除された行はこの色です。
RIGHT:&tag(検索,フレームワーク,実装,設計);
*目次 [#g3b2544e]
#contents
----
#lsx(new=true);
*関連 [#u380d460]
#lsx(tag=クエリー,new=true,except=^検索/クエリー(/.*)?$)
[[検索:クエリー]]
*クエリー周辺のタグ [#n768961e]
#tag(0,クエリー)
*検索/クエリー [#u8261b2e]
RIGHT:[[:t/クエリー]]
検索クエリーは検索を実現するクラス。
*モデリング [#c986a8a9]
*設計 [#c986a8a9]
**検索クエリーはオブジェクト [#ke8e3787]
検索ワードにクラス名を併記すると、同じ型のオブジェクト(を含むページ)にのみ適合。
date:200612
date:2007-20080331
…など。
検索ワード→オブジェクト。このオブジェクトとページ内のオブジェクトで「近さ」を求める。
RIGHT:[[:t/近さ]]
クラス名の無い検索ワードは文字列として扱い、オブジェクトの文字列表現と比較。適合する。
ページ内が入れ子になっているので平たい構造にしてから比較。
入れ子構造まで合わせるとなると使いにくいため。
**Visitor [#xe21e0c2]
クエリーを保持し、ページ/ツリー内にある各ページに同じ処理をする。
これはVisitor。
ループ制御はページで。比較はこっちで。
**検索/クエリーの内部はオブジェクト化したページと同じ [#w6535636]
比較できるようにするため、検索/クエリーを構成するオブジェクトとページを構成するオブジェクトは同じクラス。
検索/クエリーはオブジェクトの集約。
検索/クエリーの要素1つに対して、ページを構成する要素全てを突き合わせる。
**適合する単位 [#i5cbd85e]
一般的な考え方だとページ単位。検索式に適合したページを検索結果に出す。
こちらではページを構成するオブジェクト単位で。
1つのページにいくつも適合箇所が生じる。
それらを全て表示するか、ページごとに1つだけ表示するかは検索/フィルタリングの役目。
**検索/クエリーを構成する要素 [#ted50e9f]
オブジェクト。ページを構成するWikiFormat系オブジェクトと同様、テキストから作られるオブジェクト。
というわけで、プラグイン呼び出しのみ検索とか、日付だけ検索などが可能。
比較の仕方はそれぞれのオブジェクトの責務。後で考えればいい。
ただし、ページ内のWikiText→オブジェクトのルールとは違う可能性あり。
検索式ではスペースや句読点を区切りにするし、表記法を変えることも考えられるから。
つまり別のルールで。ただし同じクラスで。
というわけで、検索/クエリーはページ/内容を表すオブジェクトと同じクラスの集約。
つまり''検索は検索式をページ化して、他のページとの類似度を算出する処理''。
**「ホットな記事、クールな記事」は [#aff2e82e]
「ホットな記事」は新しさを評価する検索/クエリーを導入すればいい。
**スコア制 [#ebc31ac6]
検索/クエリーに適合するとスコアが算出される。
適合した要素に加算。(ページではない)
後でページ単位で集計したり、要素単位のままスコアを参照したりするのは検索/フィルタリングの役目。
**検索/クエリーはプラグイン [#x95d48b4]
検索/クエリーを実現するクラスはいろいろと考えられるので、
+正規表現を与えて利用できる汎用なもの
+プログラムで定義、特殊な評価方法をするもの
…で。
date:2007/11/1
という検索式から
dateオブジェクト(内容:2007/11/1)
といったオブジェクトを作るように。
これがページ内の「2007/10/20」などといった内容のdateオブジェクトに適合。
**区切り文字のみで分ける [#a00546ca]
検索式で「10/17から」など、余計な文字が付いているときは分けない。
単一の文字列として扱う。
検索式は区切り文字でのみ分ける。
**流れ [#ob994459]
ページ生成時
+ページ→オブジェクト(検索/クエリーと比較できるクラス。ページの内容を構成するクラス)
保存。永続化。検索時に使えるようにするため。
#br
検索時
+検索式→オブジェクト
検索式(文字列)→オブジェクト(検索/クエリー系クラス)
++オブジェクト選択
比較時、検索/クエリー側のオブジェクト1つとページを構成するオブジェクト1つを選択しなければならない。
検索/クエリー側は評価順が静的に決まっている。
ページ側の順序はページが決めるので後回し。
++比較
同じクラスのオブジェクト同士の比較。
検索/クエリーのスコア算出処理にページ側のオブジェクトを渡す→スコア
++スコア加算
検索/スコアリングの方法でページを構成するオブジェクトごとにスコア加算。
+スコア集計・検索結果生成
検索/フォーマットの機能で検索結果に含めるデータと、検索/ソートに渡すデータ生成。
ページ単位で結果を出すなら、ページごとにスコアを集計、ページごとにデータ生成。
+ソート
検索/ソートの機能で検索結果に含めるデータを並び替え。
+検索結果生成
HTML化。これはページ/責務。正確にはページの下位にある検索用WikiFormatの責務。
※スコア加算、集計、ソートが分かれているのは繰り返しの単位や範囲が違うから。
→[[プロトタイピング]]