• 追加された行はこの色です。
  • 削除された行はこの色です。
RIGHT:&tag(検索,フレームワーク,方法);
RIGHT:[[:t/検索]] [[:t/方法]] [[:t/フレームワーク]]

*目次 [#g3b2544e]
#contents
----
#lsx(new=true);

*関連 [#u380d460]
#lsx(tag=クエリー,new=true,except=^検索/クエリー(/.*)?$)

[[検索:クエリー]]

*クエリー周辺のタグ [#n768961e]
#tag(0,クエリー)


*検索/クエリー [#u8261b2e]
RIGHT:[[:t/クエリー]]


%%検索クエリーは検索を実現するクラス。%%
検索時のクエリー書式は検索/フィルタリング機能ごとに定義されるので、いろいろある。

*こんなクエリーが使えたらいいな [#x38d3f23]

Element系オブジェクトと修飾句の順序付きリスト。
**修飾句 [#t0dae83f]
-接続句(文字表現)
--And
--Or
--AndAlso
--OrElse
-否定句(文字表現)
--Not
-肯定句(文字表現)
--(なし)

設計上では修飾句オブジェクトの中にElement系オブジェクトが含まれる構造。
どんなクエリーも1つの肯定句オブジェクトに含まれる。

修飾句が出力するのは真理値ではない。
検索/スコアリングに合わせてスカラー値で。

**メモ化 [#b8d48bd2]
メモ化の予定なし。どこかのページが編集されればメモは期限切れなので効果が低い。

検索/クエリーをメモ化するなら、ラベルは検索/クエリーをオブジェクト化したもののハッシュ値。
順不同で。検索/クエリーが構造的だとやりにくい。できるなら検索処理で作られる検索/クエリーのオブジェクトをそのまま流用。

ハッシュ値の重複を防がなければならない。同じ意味のオブジェクトが同じハッシュ値になるのはいい。クエリーが同じ意味なら検索結果も同じ。

**検索クエリーはオブジェクト [#ke8e3787]
検索ワードにクラス名を併記すると、同じ型のオブジェクト(を含むページ)にのみ適合。

 date:200612

 date:2007-20080331

…など。
検索ワード→オブジェクト。このオブジェクトとページ内のオブジェクトで「近さ」を求める。
RIGHT:[[:t/近さ]]

クラス名の無い検索ワードは文字列として扱い、オブジェクトの文字列表現と比較。適合する。

ページ内が入れ子になっているので平たい構造にしてから比較。
入れ子構造まで合わせるとなると使いにくいため。


**Visitor [#xe21e0c2]
クエリーを保持し、Element階層内にある各Elementを処理する。

**適合する単位 [#i5cbd85e]
一般的な考え方だとページ単位。検索式に適合したページを検索結果に出す。

ここではページを構成するオブジェクト単位で。
1つのページにいくつも適合箇所が生じる。
それらを全て表示するか、ページごとに1つだけ表示するかは検索/フォーマットの役目。
**検索/クエリーを構成する要素 [#ted50e9f]
オブジェクト。ページを構成する記法系オブジェクトと同様、テキストから作られるオブジェクト。
というわけで、機能呼び出しのみ検索とか、日付だけ検索などが可能。
比較の仕方はそれぞれのオブジェクトの責務。後で考えればいい。

ただし、ページ内のWikiText→オブジェクトのルールとは違う可能性あり。
検索式ではスペースや句読点を区切りにするし、表記法を変えることも考えられるから。
つまり別のルールで。ただし同じクラスで。
というわけで、検索/クエリーはページ/内容を表すオブジェクトと同じクラスの集約。

つまり''検索は検索式をページ化して、他のページとの類似度を算出する処理''。


**「ホットな記事、クールな記事」は [#aff2e82e]
「ホットな記事」はページの作成日時と現在日時の適合度が高い記事のこと。

**スコア制 [#ebc31ac6]
検索/クエリーに適合するとスコアが算出される。
適合した要素に加算。(ページではない)
後でページ単位で集計したり、要素単位のままスコアを参照したりするのは検索/フォーマットの役目。

**検索/クエリーは機能 [#x95d48b4]
検索/クエリーを実現するクラスはいろいろと考えられるので、
-正規表現を与えて利用できる汎用なもの
-プログラムで定義、特殊な評価方法をするもの

…などで。

スコアも機能での定義。機能では検索時の評価方法も定義しておく。基本はパラメーターだけの文字列比較。


 date:2007/11/1
という検索式から
dateオブジェクト(内容:2007/11/1)
といったオブジェクトを作るように。
これがページ内の「2007/10/20」などといった内容のdateオブジェクトに適合。

**区切り文字のみで分ける [#a00546ca]
検索式で「10/17から」など、余計な文字が付いているときは分けない。
単一の文字列として扱う。
検索式は区切り文字でのみ分ける。

使い方をシンプルにするため?
Google式で""間を文字列にしたほうがいい?

範囲指定は必要。カスタマイズ可能なのでいろいろな表現を有効に。