SearchEstraierプラグインは、Hyper Estraierを利用したサイト内全文検索 (サイト内検索) 機能を提供します。 従来のSQLを使った複数条件指定検索に加え、数万ページでも高速に動作する全文検索機能を利用できるようになります。キーワードにマッチするコンテンツをスコア順に抽出できます。
このWebサイトのドキュメント検索機能は、このプラグインを利用して実装されています。
MeCabがインストールされている時、文書内のキーワードを自動抽出して、レコメンドAPIによる「閲覧履歴による興味関心」の精度を上げることができます。
あわせて php-mecabのインストールを推奨します(必須ではありません)。
以下の環境変数を config.json の config_settings に記述します。
以下のようなビューを作成します。
なお、以下サンプルでは後述のページネーション用のインクルード・モジュール「SearchEstraierPagination」を別途用意してインクルードを行っています。
<form method="GET" action="<mt:var name="current_archive_url">">
<div class="form-inline">
<label> キーワード
<input type="text" value="<mt:var name="query" escape>" name="query" "></label>
<label>
<input type="radio" name="and_or" value="AND" <mt:if name="request.and_or" eq="AND">checked</mt:if>>
AND
</label>
<label>
<input type="radio" name="and_or" value="OR" <mt:if name="request.and_or" eq="OR">checked</mt:if>>
AND
</label>
<button type="submit">検索</button>
</div>
</form>
<mt:var name="request.query" setvar="query">
<mt:estraiersearch phrase="$query" prefix="estraier_" and_or="AND" default_limit="10" snippet_width="200" workspace_ids="0,1">
<mt:if name="__first__">
<p>
「<mt:var name="query" escape>」の検索結果( <mt:var name="estraier_hit">件ヒットしました )
</p>
<ul class="list-unstyled"></mt:if>
<mt:if name="estraier_thumbnail_square">
<mt:var name="estraier_thumbnail_square" setvar="thumbnail_url">
<mt:else>
<mt:setvarblock name="thumbnail_url"><mt:var name="theme_static">website/images/no-image.png</mt:setvarblock>
</mt:if>
<li class="mb-2"><div class="d-flex"><div class="thumbnail"><img src="<mt:var name="thumbnail_url" escape>" width="80" height="80" alt=""></div>
<div><a href="<mt:var name="estraier_uri" escape>"><strong><mt:var name="estraier_title" escape></strong></a>
<p class="snippet"><mt:var name="estraier_snippet"></p></div></div>
</li>
<mt:if name="__last__">
</ul>
<mt:setvar name="estraier_hit" value="search_hit">
<mt:include module="SearchEstraierPagination">
</mt:if>
</mt:estraiersearch>
<mt:if name="query">
<mt:unless name="search_hit">
<p>「<mt:var name="query" escape>」にマッチするページはありませんでした。</p>
</mt:unless>
</mt:if>
ページネーション用のテンプレートは <mt:estraiersearch>
タグ内でのみ利用可能な変数 ( estraier_*
) を用いて作成します。
<mt:if name="estraier_pagertotal" gt="1">
<mt:for from="1" to="$estraier_pagertotal">
<mt:if name="__first__">
<nav aria-label="ページネーション">
<ul>
<li>
<a aria-label="先頭へ" href="<mt:var name="current_archive_url">?query=<mt:var name="query" escape encode_url="1"><mt:if name="request.and_or">&and_or=<mt:var name="request.and_or" escape></mt:if>">
«
</a>
</li>
<mt:if name="request.offset">
<a aria-label="前へ" href="<mt:var name="current_archive_url">?query=<mt:var name="query" escape encode_url="1">&offset=<mt:var name="estraier_prevoffset"><mt:if name="request.and_or">&and_or=<mt:var name="request.and_or" escape></mt:if>">
‹
</a>
</mt:if>
</mt:if>
<li class="<mt:if name="__value__" eq="$estraier_currentpage"> active</mt:if>">
<a href="<mt:var name="current_archive_url">?query=<mt:var name="query" escape encode_url="1">&offset=<mt:math eq="x * y" x="$__index__" y="$estraier_limit"><mt:if name="request.and_or">&and_or=<mt:var name="request.and_or" escape></mt:if>"><mt:var name="__value__"></a>
</li>
<mt:if name="__last__">
<mt:if name="estraier_nextoffset">
<a aria-label="次へ" href="<mt:var name="current_archive_url">?query=<mt:var name="query" escape encode_url="1">&offset=<mt:var name="estraier_nextoffset"><mt:if name="request.and_or">&and_or=<mt:var name="request.and_or" escape></mt:if>">
›
</a>
</mt:if>
<li>
<a aria-label="最後へ" href="<mt:var name="current_archive_url">?query=<mt:var name="query" escape encode_url="1">&offset=<mt:math eq="( x - 1 ) * y" x="$estraier_pagertotal" y="$estraier_limit">">
»
</a>
</li>
</ul>
</nav>
</mt:if>