目次 †
- -
関連 †
検索:クエリー
クエリー周辺のタグ †
Array検索/クエリー †
検索/クエリーはページ/内容と同等。ページと同じ型の値で検索条件を書いて比較。
見出し記法を検索したときは見出しのみに適合して、見出し記法の書き方には適合しないように。
検索クエリーは検索を実現するクラス。
設計 †
検索クエリーはオブジェクト †
検索ワードにクラス名を併記すると、同じ型のオブジェクト(を含むページ)にのみ適合。
date:200612
date:2007-20080331
…など。
検索ワード→オブジェクト。このオブジェクトとページ内のオブジェクトで「近さ」を求める。
クラス名の無い検索ワードは文字列として扱い、オブジェクトの文字列表現と比較。適合する。
ページ内が入れ子になっているので平たい構造にしてから比較。
入れ子構造まで合わせるとなると使いにくいため。
Visitor †
クエリーを保持し、ページ/ツリー内にある各ページに同じ処理をする。
これはVisitor。
ループ制御はページで。比較はこっちで。
検索/クエリーの内部はオブジェクト化したページと同じ †
比較できるようにするため、検索/クエリーを構成するオブジェクトとページを構成するオブジェクトは同じクラス。
検索/クエリーはオブジェクトの集約。
検索/クエリーの要素1つに対して、ページを構成する要素全てを突き合わせる。
適合する単位 †
一般的な考え方だとページ単位。検索式に適合したページを検索結果に出す。
ここではページを構成するオブジェクト単位で。
1つのページにいくつも適合箇所が生じる。
それらを全て表示するか、ページごとに1つだけ表示するかは検索/フィルタリングの役目。
検索/クエリーを構成する要素 †
オブジェクト。ページを構成するWikiFormat系オブジェクトと同様、テキストから作られるオブジェクト。
というわけで、プラグイン呼び出しのみ検索とか、日付だけ検索などが可能。
比較の仕方はそれぞれのオブジェクトの責務。後で考えればいい。
ただし、ページ内のWikiText→オブジェクトのルールとは違う可能性あり。
検索式ではスペースや句読点を区切りにするし、表記法を変えることも考えられるから。
つまり別のルールで。ただし同じクラスで。
というわけで、検索/クエリーはページ/内容を表すオブジェクトと同じクラスの集約。
つまり検索は検索式をページ化して、他のページとの類似度を算出する処理。
「ホットな記事、クールな記事」は †
「ホットな記事」はページの作成日時と現在日時の適合度が高い記事のこと。
スコア制 †
検索/クエリーに適合するとスコアが算出される。
適合した要素に加算。(ページではない)
後でページ単位で集計したり、要素単位のままスコアを参照したりするのは検索/フィルタリングの役目。
検索/クエリーはプラグイン †
検索/クエリーを実現するクラスはいろいろと考えられるので、
- 正規表現を与えて利用できる汎用なもの
- プログラムで定義、特殊な評価方法をするもの
…などで。
スコアもプラグインでの定義。
date:2007/11/1
という検索式から
dateオブジェクト(内容:2007/11/1)
といったオブジェクトを作るように。
これがページ内の「2007/10/20」などといった内容のdateオブジェクトに適合。
区切り文字のみで分ける †
検索式で「10/17から」など、余計な文字が付いているときは分けない。
単一の文字列として扱う。
検索式は区切り文字でのみ分ける。