Movable Type 備忘録

 ブログ内検索、タグ検索で検索結果の絞込みをやってみる

こんばんわ^^

先日、小粋空間さんのところで、タグ検索による検索結果を絞り込みする方法がご紹介されてました。

絞込みの詳しい説明は上記ページを読んで頂くとして、カンタンに説明すると、mt-search.cgi のパラメータとして tag というものがあります。
この tag パラメータに検索したいキーワードを 'AND' で連結して実行することで絞込み検索が行える・・・というものです。

一応わたしのサイトのブログ内検索においても、キーワードをスペースで区切ってエンターキーを押すと、AND 検索できるようにしてます。(デフォルトです)
合わせて、検索結果として一覧されたブログ記事のタグクラウドを表示させてあげることで、さらに絞込み検索できるようにしてみました。

わたしのサイトでは、検索結果を一覧表示してるから問題になってないかもしれませんが、通常のブログ内検索、タグ検索だと 20 件( デフォルト )分のブログ記事概要が表示されるので、もしかすると使いにくいかもしれません (; ̄∇ ̄A

サンプルはわたしのサイト内で検索してみたら分かると思います。
ただし、只今ブログ記事に割り振ったタグのメンテナンス中なので適切な検索結果が得られてませんが、少しずつ検索しやすいようにタグを振りなおしてます。

タグのメンテナンスには、以下のページを参考にして頂いたらいいと思います。

絞込み検索を実装するには、以下のプラグインが必要ですので、予めインストールを済ませておきます。

カスタマイズ

修正するテンプレートは「検索結果」システムテンプレートになります。
デフォルトの「検索結果」システムテンプレートをベースに以下に説明していきます。

  1. まず保持したタグをタグクラウドとして表示します。
    具体的には 112 行目の </mt:SearchResultsFooter> 閉じタグの直前に以下のコードを追加します。

    保持したタグをタグクラウドとして表示

    1. <h2 id="search_notice">タグで絞込み</h2>
    2.  
    3. <ul id="tags" class="tag_list">
    4. <mt:Loop name="tag_count" sort_by="value numeric reverse">
    5.     <mt:If name="__counter__" le="20">
    6.         <li title="<$mt:GetVar name="__key__"$>:<$mt:GetVar name="tag_count" key="$__key__"$>">
    7.             <a href="<$MTSearchScrip$>?blog_id=<$MTBlogID$>&amp;tag=<$mt:GetVar name="search_list" index="0"$>%20AND%20<$mt:GetVar name="__key__"$>&amp;limit=<$MTSearchMaxResults$>&amp;IncludeBlogs=<$MTBblogID$>" rel="tag"><$mt:GetVar name="__key__"$></a></li>
    8.     </mt:If>
    9. </mt:Loop>
    10. </ul>
  2. 次に、検索されたブログ記事に振られた、すべてのタグを保持するよう修正します。
    具体的には 109 行目の </mt:SearchResultsHeader> 閉じタグの直後に以下のコードを追加します。

    べてのタグを保持

    1. <MTEntryTags>
    2.     <$MTTagName setvar="tags"$>
    3.     <mt:SetVarBlock name="tag_count" key="$tags"><$MTTagCount$></mt:SetVarBlock>
    4. </MTEntryTags>
  3. 最後に検索されたキーワードを取得/保持するよう修正します。
    具体的には 89 行目の <mt:SearchResults> タグの直前に以下のコードを追加します。

    検索検索されたキーワードを取得/保持

    1. <$MTSearchString setvar="search_name"$>
    2. <mt:If name="search_name" like=" AND ">
    3.     <$mt:GetVar name="search_name" split=" AND " setvar="search_list"$>
    4. <mt:Else>
    5.     <mt:SetVarBlock name="search_list[0]"><$mt:GetVar name="search_name"$></mt:SetVarBlock>
    6. </mt:If>

以上です。
あとは各自のサイトに合わせてタグクラウドをデザインしてください。

まぁ、こんなかんじで検索結果にタグクラウドを表示させてます。
参考まで。

 Trackback Pings(0)

No trackbacks found.

 Comments(3)

#1: Posted by Author Profile Page footbrain.pip.verisignlabs.com @ January 31, 2009 [REPLY]
user-pic

さっそく参考にさせて頂きました。
タグに半角スペースを含む英文があったりするものですから、苦労しました。また、タグクラウドをサイドバーに表示ししたかったのですが、javascriptでクラウド化しているもので、ちょっと難しそうです。
おかげさまで以前に比べ少しは便利になったと思います。

#2: Posted by @Ran @ April 29, 2009 [REPLY]
user-pic

bzbell さん、お早うございます。

どんな感じか拝見したくて…。

「ブログ内検索」に何も入力せずリターンを押したら、
エラーになりました~。

#3: Posted by Author Profile Page bzbellから@Ranへの返信 @ April 29, 2009 [REPLY]
user-pic

>>2 @Ran さん

こんばんわ^^

> エラーになりました~。

そうなんですよねぇあせあせ
キーワードで検索した結果(エントリ)からタグクラウド表示したはいいけど、以下の問題を抱えてます。

  1. 検索結果からタグ検索を行った場合、キーワード+タグ名で検索されてしまう。
    キーワード+タグ名の組み合わせによっては合致しないことがある。
  2. 検索結果を行き来することができない。
    タグ検索結果をやり直したりすることができない。

と、いったところでしょうかあせあせ
わたしの理想としては、キーワードで多数 HIT してしまった場合、そこからタグ名称で絞り込めればいいなぁ…と漠然と思ってたのですが、そうカンタンではないようでしたイヤイヤ

時間があるときに再検討してみるつもりでいます。

 Post a Comment

 

コメント用フィード