• 追加された行はこの色です。
  • 削除された行はこの色です。
RIGHT:&tag(検索,機能,ページ,思い付き,実装,設計,主要);

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

*関連 [#pa132a60]
#lsx(tag=検索,new=true,except=^検索(/.*)?$)

[[検索:検索]]

*検索周辺のタグ [#dde42861]
#tag(0,検索)

*検索 [#c5d72d96]
RIGHT:[[:t/検索]] [[:t/!]]

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

------------------------------------------------

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

※いずれも検索/クエリーで作ったオブジェクトの機能で。
*思い付き [#u93fd2cc]

-カタカナ語の「ー」を除いたものも検索。
RIGHT:[[:t/実現可/易]]
-ユーザーが定義した略語、用語も検索。
RIGHT:[[:t/実現可/難]]
-検索結果を利用してアクセス解析。
ページ構成を考えるときの参考に。
RIGHT:[[:t/実現可/易]]
-ページをページ名で指定、さらにその中を検索、最初の候補にジャンプするような検索もしたい。
アンカー付きリンクよりも柔軟なリンクとして。ページ名の一覧表示ではいけない。
クリックすると内容が表示される検索。内容が表示される検索ではページを特定(ページ1つだけを表示)したほうが読みやすい。


**読み検索 [#s5c16de5]
「あかさたなはまやらわ」を同一視。
その他、発音したときに似ている言葉を同一視。

音声でタグ付け、音声で検索ワード入力、検索。
**フィルタリングワードにはタグも [#yc46031a]
ページ内にある(サブセットWikiにある)タグでフィルタリング。
**使い方 [#u8f13a69]
閲覧と作成と検索の操作を統合。
RIGHT:[[:t/UI]]

+入力欄に(見たい|書きたい)ページ名入力。Enter。
+ページがあれば表示。(見ることができる)
+ページがなければ「もしかして・・・」というリンクと、新規作成リンク(または新規作成フォーム)を表示。(検索と作成が両方できるし、検索は作成の参考資料にもなる)
新規作成フォームでは1行目がページ名。
**検索欄のデフォルト値 [#dddc8f24]
検索欄を設置できるならデフォルト値も設定可能に。
「ヘルプ 」とか。ヘルプページ内に。汎用の検索欄とは別に。


**「まとめておきました」 [#j003619f]
検索機能でWikiページをまとめると、その検索/クエリーは新しいページの名前のようなものになる。
このページを誰かの利用者ページや他サイト(ブログ、他のWiki)から参照できるようにすれば個人的な(読むだけ)Wikiを作ることができる。
-「このWikiの再編後に残すページをまとめておいたので、意見があれば自分の利用者ページに「再編について」という見出しで書き込みしてください」
検索で「再編について」という見出しを集めた検索リンクも設置。
-アイテムの価格相場を表から抜き出し、荒れた時期を探す。
**同時に更新したページが分かるように [#ea05e8b0]
同じページ名が重複していても全て表示。
更新の衝突も分かるように。
**スコア加算条件を複数に [#cfb0b10a]
「ホットな記事、クールな記事」の「ホット」は検索スコアに加味する要素のこと。
だから他の評価方法(これも加味する要素のこと)と併用できるように。

RIGHT:[[:t/検索/スコア]]


**似ているページ報告 [#t82bcd60]
利用者がページ間のつながりを変える。
→これはページ内のリンクにタグを付けることで行う。
「関連項目」とでも書いておけばいい。
リンクは「他のページからどう見られているか」を表す。

類似した情報を見つけることで利用者間のスケジュール調整とかアポイントメントに。

RIGHT:[[:t/類似]]
**用語集を使って関連語検索 [#gc8ac013]
検索時、用語集(というページ)にある用語が見つかれば同義語・関連語も検索。
または同義語・関連語を検索するためのリンクを併せて表示。

→検索/クエリーがリンクに適合した場合、リンクをリンクのまま表示。というだけ。

RIGHT:[[:t/関連語]] [[:t/同義語]] [[:t/繰り返し]] [[:t/?]] [[:t/負荷]]

個人用の用語集も作れて、それを検索でも利用できれば理想的。
利用者の下位にページを作って。
-「あれ」→定義によって特定のページが表示される。

これで、公式のページ名以外のキーワードでページを指定できる。
検索機能の活用法が多彩になれば思いがけない使い方ができそう。


*実装 [#tc72a538]

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

**検索結果のソート順 #ui #wiki [#yd5b01e6]
文字列検索時のソート順は、単語や文字種の境界に多く接している順。次に辞書順。
これで完全一致がトップにくることになる。次に別の単語がハイフンでつながっているもの。そのあとに単語内での先頭/末尾一致、最後に単語内での部分一致。

さらにヒットしなかったのを辞書順で表示してもいい。ヒットしなかったことが区別できるようにして。
**各種検索時、100%マッチを特に強調、ページの見出し扱い [#ba2c046f]
検索するまでもなく利用者が知っていた訳なので「正解」という表示にする。

RIGHT:[[:t/UI]]
**文字修飾系記法では部分一致可能に [#j7d06e0f]
文字修飾付きの検索クエリーを使うとき、修飾内部の文字列に一部でもヒットすれば見つけられるように。
打ち消し線の中の日付を範囲指定で探すと…「ToDoリストで去年あれをやったのはいつだったか」という検索に。

文字修飾系以外でもテキストを含むなら部分一致させたい。
**NarrowSearch, ExpandSearch [#j48ced9c]
-NarrowSearch…絞り込み検索、and
-ExpandSearch…拡げる検索、or
**フォーム生成機能呼び出しから開始 [#z7758308]
検索手順は検索フォーム機能呼び出しから始まる。→[[機能/UI]]
検索処理の本体はそのフォームから「送信」したとき。

+検索フォーム機能入りページ閲覧。検索フォーム機能は設定にある検索機能名を含んだ検索フォームと置き換わる。
あるいは検索機能呼び出しになるようなURIを含むリンクなどで。こちらは特に工夫なし。ただのリンク。
+利用者が検索フォームに入力、URI化してHTTPリクエスト。
+WikiEngineから指定された検索機能が呼び出される。
+HTTPレスポンスには検索結果ページの雛形と、1件あたりの雛形を組み合わせて作られたページ。
検索機能が作る。2種類のうち、検索結果ページはWikiEngineが通常のページとして扱う。
1件あたりのほうは検索結果機能(検索結果に置き換わるだけの機能)が扱う。
++検索機能で検索処理、ページセットが作られる。
検索はここまで。後はサブセットWikiと同じ。
検索結果機能とはWikiのページセットを検索結果の雛形に埋め込んで閲覧時展開するもの。なので検索結果でなくてもページセットならなんでも整形出力できる。
++ページの閲覧時展開処理で検索結果機能が展開される。
雛形ページに検索結果機能が含まれていなかったらこの処理は無い。検索結果としては出力されない。
++検索結果機能が検索結果1件あたりの雛形を使って検索結果を生成、ページ上の自身と置き換わる。

検索時以外でも検索結果機能は機能する。検索結果機能の実体はページ一覧出力なので。検索時には検索に適合したページだけのページセットを対象にするだけ。
ということで検索時以外にこの機能が展開されると全てのページ一覧になる。機能側で全て…の場合は空文字列かコメントを出力するようにすれば、どんなページに検索結果を埋め込んでも邪魔にならない。

----

雛形2種類を選択可能にすれば、検索結果を選ぶこともできる。
グラフ表示とか、リストとか、テーブルとか。
雛形はページとして用意。

検索の雛形ページを通常のページ、FrontPageにもできる。
検索結果と置き換わる機能が設置されていれば。

検索機能も複数選択可能にすれば、アルゴリズムを選べる。
パラメーター形式が異なればフォームを分ける必要があるけど。
**検索対象 [#p5e1e355]
それぞれの区分で検索/スコアリングのルールを適用。

-場所
つまりページ名。指定されたページと近いページが高スコア。
-記法
意味を持ったテキスト。評価方法は記法の各クラスによって異なる。
記法を含むテキストの中の、記法以外の部分は記法の一つとして扱う。
-リンク
記法の一つ。でもちょっと特殊。2ページ間の関係を表す。同じ関係(関係名)なら適合。
-テキスト(WikiText)
記法変換前。入力したままのテキスト。
意味を持たないテキスト。記法もそうでないテキストもまとめて文字列として評価。文字列比較の適合文字数がスコアになる。
-閲覧用プレーンテキスト
記法を変換した後の、見たままのページ。記法で分断されたテキストも一続き。
HTML変換後、タグなどを削除して作ったプレーンテキスト。
HTMLではない。HTMLは見えないものなので検索対象外。

各区分での評価は重複して良い。
記法で評価したあと、テキストとして評価、その後閲覧用テキストとしても評価。
**検索結果にページ作成リンクを [#se3a3419]
検索結果に「…(検索ワード)というページを作る」というフォームを設置。(検索ワード)部分は入力済みテキストボックスで変更可能。
ページ作成前に追記先を検索することがよくあるので。追記先が無かったときのためのフォーム。
**AND、ORを使わない [#r26766ad]
検索は検索クエリーをページ構造と同じ構造のオブジェクトに変換、類似度判定で実現。
そのため、ANDやORは使えない。代わりに必須かオプションかを検索キーワード毎に指定。

 語1 語2 語3?
…で、語1と語2を含むページを指定、語3まで含むものを上位に表示。

 語1 AND 語2 OR 語3
…などは表現できないので、代わりに
 語1 語2

 語3
…に分けることになる。

|必須|(何もつけない)か、語頭か語尾に「!」|
|オプション|語頭か語尾に「?」|
|不要|語頭か語尾に「-」|
**OR検索と同時にAND検索 [#z174f6ed]
複数キーワードを受けたとき、全てを含むページ、いずれかを含むページの順に高スコアを付ける。
手間を省き、情報の取りこぼしを防ぐ。

RIGHT:[[:t/手間を省く]]
**インデックスを作るなら別プロセスで [#z93d878a]
インデックスを作成・更新するなら別プロセスか、本体プロセスの余り時間に。
ページを更新するたびに必要、かつページの更新処理には不要なので。

インデックス再作成を要する操作→インデックス再作成完了までの間、更新されたページ(インデックスに入っていないドキュメント)はインデックスなしの全文検索の対象にする。

**%%たくさん合えばスコア増%% [#n0c13fc4]
%%RegExpのグループに合った数だけスコアを増やす。%%
%% /([0-9]+)(キロ)?/%%
%%…なら0〜2コのグループに合う。%%
%%→スコアを0〜2倍に。%%

%%こうして単位(キロ)を含めて合った場合に高スコアにできる。%%
**検索履歴 [#qf037ba0]
検索フォームで
利用者×ページ×検索ワード
を保存。
「自分が…というページを読んでいるとき検索したくなったこと」が…というページの検索フォームにリストアップされるように。

-タグ付け、リンク付けの参考になる
RIGHT:[[:t/タグ]] [[:t/リンク]]
-二度手間を減らすことにもなる
RIGHT:[[:t/手間を省く]]

保存する領域は利用者。
利用者ページに記録する。
ということで、利用者自身が編集できる。(追加も削除も)
RIGHT:[[:t/利用者]]


***入力されたキーワードを関連付ける [#r552c0ff]
主観検索のために。

RIGHT:[[:t/主観]]

検索キーワードのOR結合を同義、AND結合を上下関係のある言葉として検索時に使用。
検索処理内で使うか、検索結果に関連語として表示するか。
**検索はフレームワークの機能 [#d350679f]
記法から呼び出すように。

**関連語検索 [#v39a6125]
関連語検索、あるいは多段検索、デリゲート検索。

検索→検索結果に出せるページに含まれるリンクを集計(リンク=ページ名)→多い順にリスト化。
出現頻度の高いページ名を検索語に追加して再検索すると関連語も検索できる。検索漏れ防止。

これを''ワンタッチ''で。

検索→検索結果表示、そのページから自動的に関連語を含む検索開始(「関連語検索中」表示)→関連語検索結果が画面上に''追加''される。
いつも関連語が必要とは限らないので、一度検索結果表示。表示後に関連語検索が始まるように。

どれくらい出現頻度があれば関連語に含めるか…。これは検索時に利用者が与える。しきい値を低くすると多くの関連語が含まれる。

%%関連語探し%%
%%あるリンクと同じページにあるリンクのリストを得る。%%
%%(共起しているリンクを複数得る)%%

%%検索を一時的ページと、そのページへのバックリンクとして実装すれば、リンク←ページ名←検索語、となる。%%
%%つまり、検索語入力→関連語リストを得ることもできる。%%
**OR結合の結果はヒットした検索語を併記 [#u6f6da90]
検索でOR結合がある場合、結果1件ごとにヒットした検索語を併記。
ORを含む場合、ヒットしていない語も生じるので、どの検索語にヒットしたかが分かりにくい。それを明示するため。

''OR''で切ったキーワード別に検索リンクを用意できるならそっちのほうがいい。
順序は全キーワードの結果を混ぜてソート。これを見るために''OR''を使うので。OR断片ごとにソートしたいなら検索リンクをクリック→そのOR断片だけで検索。
**検索キーワードをリンク化 [#y1127f7a]
再利用しやすくなる。
orで切って、andはつなげて。それぞれを検索リンクにする。
ブラウザーのブックマークバーにドロップできるように。

リンク部分はヒットした部分の強調表示と同じく強調。
**検索をリンクの仕組みで実装 [#m1001c69]
+検索語入力
+検索語を一時的なページ名として扱う
このページが検索結果ページ。
+%%リンク、%%バックリンク
%%リンクは結果、バックリンクはヒットした部分の強調にするため。%%

これは検索結果を共有・保存することになる。
個人利用ではデフォルトにしてもいい。
不特定多数利用ではバックリンク(トラックバック)を公開しているブログと一緒。検索結果からページを選んだ時点で保存。
**検索ページ [#rbd240bc]
検索/クエリーを検索機能呼び出し(記法からの呼び出し)に書き入れると出力が(参照時点の)検索結果になる。
例えばタグ[Wiki]のページを作ると、タグ[Wiki]を含むページの一覧になる。
**検索はページ集約 [#j5d3f33c]
検索はページを集約する機能でもある。
検索/クエリーに適合したページを1つのページにまとめる。
検索結果を検索すれば集約をさらに集約することになる。

----

集約をさらに進めるために、
ページを一目見ただけでそのページを見る価値があるか判断できるようにするため、検索結果の冒頭にまとめを表示。

まとめ
-集まったタグのタグクラウド
-ヒット数をorごとに
andはつなげたままで
-これまでの検索クエリーをorで切ってリストアップ
ヒット数も添えて。
 [検索 ページ](18), [検索 結果 ページ](8)

----

機能出力を機能のパラメーター(入力)にする仕組みで。
検索機能出力を検索機能の入力に。→何段でもDecorationできるように。
**検索結果をRSS化 [#i36f4875]
検索/フォーマットで実現。

さらに他ページのリソースを取得する機能と、RSSを解析する機能でRSSをページ化。(検索結果(ページ)→RSS→ページ)
他サイトのリソースを取得する機能はあっても良いがRSS取得のためなら要らない。
**1ページ、1ソート順 [#d269dad4]
ソート順が違う結果を出力するなら別のページに。
そうしないとAPIなどから自動処理しづらい。

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

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


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

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

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


%%→ソートは最後だけ(テンプレートに埋め込むときだけ)にする。その代わり、スコアを最後まで残す。%%
**日記を特定のキーワードで検索して「その1日前に何をしていたか」を一覧したい [#rc276910]
→検索結果1件ごとに「1日前」というリンクを辿って、その1件をリンク先と置き換える。
→検索結果からそれぞれの1日前のページ一覧を作れる。
…というのをフィルタリングルールで。

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

検索キーワードではAndAlso検索をするように指定。[[検索:AndAlso]]
**検索結果に要約と「編集」リンクを [#e6535c34]
-要約表示
ページ内容の内、該当部分も表示させたい。(ページ単位よりも小さい単位で)
段落単位か行単位で。(文字/文節単位だと意味が分からない)
ツリー形式の出力なら段落単位、表形式の出力なら行単位で。

 全ページの一覧
 	ページ1
 		章1 [[編集:ページ1/章1]]
		該当部分(段落単位)
		--------
		章4 [[編集:ページ1/章4]]
		該当部分(段落単位)
 	ページ3
 		…

-検索結果から編集を行うことは多い。「編集」リンクで直接編集したい。(章の実装をページにしておけば章単位の編集になって便利)
ページが存在しないなら「編集」は「ページ作成」と同じ機能になるので、この編集リンクだけでページ作成にもなるし。
→必ず「(検索キーワード)について書く」というリンクを検索結果に含める。
**%%出力はHTML%% [#la784ac6]
-%%ページの一部分%%
%%ページに埋め込んで表示できる形式。%%
-%%章ではない%%
%%章としての機能を持たないため。%%

RIGHT:%%[[:t/ページ]]%%
**時系列検索 [#z36f3560]
1つのページのバージョンを検索。
新→旧の順に優先して表示。

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

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

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

RIGHT:[[:t/履歴]]


--------------------

全ページの全バージョンを検索できればなおいい。
**%%ページを探す、文字列を探す%% [#vef4a3c5]
-%%全ページから条件に合うページを探す。%%
-%%1ページ内の全テキストから条件に合う部分を探す。%%
%%行単位で。%%



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


**自動生成ページを検索対象にすることで特殊検索を [#z91ce8f0]
自動生成ページで特別な観点で集計した検索対象を作れば、いろいろな検索に対応できるはず。
*設計 [#z3a6f3e7]
**アルゴリズム [#f31c6921]
検索はページセットが制御。検索とはページセットが自身を縮小する処理のこと。→ページセット
呼び出された時に与えられた検索/クエリーと、自身が持つページを比較。


**%%アルゴリズム%% [#n8c9af7c]
-%%並べ替えをする%%
%%→複数の要素が必要%%

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

------------------------------------------------------------------------------------
-%%変換もする。%%
%%URL→ページ内容に。%%
%%その中の~月~日だけを(1つ)返す。%%
**解釈 [#c1aa3e09]
数値なら近い数にも高スコアを。
#000000、#000なら各桁ごとに近い数かどうか判断。
#309と#209は最も近い数ということになる。

RIGHT:[[:t/検索/方法]]

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

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

#br

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

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

%%RIGHT:[[:t/!]]%%

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

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

RIGHT:[[:t/近さ]]
**データ型はページ主体 [#d0d25289]
すべてのページを得る → その中を検索 → ページを得る → その中を検索 → ページを得る → その一覧を検索結果とする。
というDecoratorパターンになるように。

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