PowerCMS™
ホーム > PowerCMS > ドキュメント > エンタープライズ版 >

エンタープライズ検索

※ この機能はエンタープライズ版以上のライセンスをご購入の場合のみご利用可能です

PowerCMS にはダイナミック検索が標準で付属していますが、別途インデックス型の検索エンジン Hyper Estraier を利用したインデックス型検索をサポートしており、検索インデックスをタスクで実行するプログラム及び検索結果を出力するためのテンプレートタグが提供されます。

  • 全文検索にはサーバーに Hyper Estraier 及び Perl モジュール Estraier がインストールされていることが必要です(※)。
  • 全文検索システム Hyper Estraier およびそのインストール方法については 公式サイト を参照してください。
  • 検索画面を表示する mt-estraier.cgi (後述) は、管理画面が利用するデータベースを CGI から参照できる必要があります。Copy2Public による転送機能との併用はできません。

※ Hyper Estraier 本体に加え、Perl モジュールをインストールする必要があることにご注意ください。Perl モジュール Estraier は、Hyper Estraier 本体のアーカイブ内、perlnative フォルダ内に同梱されています。インストール手順は こちら をご参照ください。

検索インデックスの作成

生成される記事/ウェブページは、PowerCMS のテンプレートによって文書ドラフト (Hyper Estraier の独自のファイル形式) に変換されます。各種設定を適切に行った後、 $MT_DIR/tools/estcmd-gather スクリプトを実行することで検索用インデックスが生成されます。

エンタープライズ検索のイメージ

PDF や Microsoft Excel 等のファイルのインデックスは、ウェブサイト/ブログのサイトパス以下に配置されたすべてのファイルを対象にインデックス作成を行います (ウェブサイト/ブログごとのプラグイン設定で除外パスを指定することも可能です)。

検索インデックスの自動更新

午前4時に検索インデックスをすべてクリアして新規にインデックスを作成する場合の crontab 設定例

0 4 * * * cd $MT_DIR && /usr/bin/perl tools/estcmd-gather

20分おきに検索インデックスに差分登録する場合の crontab 設定例

0,20,40 * * * * cd $MT_DIR && /usr/bin/perl tools/run-periodic-tasks

エンタープライズ検索関連のテンプレート

PowerCMS のテーマをインストールすると、以下のテンプレートが同時にインストールされます。

種別 名前 アーカイブパス 解説
アーカイブ 記事ドラフト draft/entry_<MTEntryId>.est 文書ドラフト(Hyper Estraier 独自のデータ形式)で記事を出力します。
アーカイブ ウェブページドラフト draft/entry_<MTPageId>.est 文書ドラフト(Hyper Estraier 独自のデータ形式)でウェブページを出力します。
システム Hyper Estraier 検索結果 -

検索結果を表示するテンプレートです。

※手動でテンプレートを作成する場合、identifier が「estraier_result」である必要があります。

文書ドラフトテンプレート

検索に含めるテキストの範囲を変更するには (拡張フィールドやカスタムフィールドを含める場合)、記事ドラフト及びウェブページドラフトテンプレートを修正します。 カスタムフィールドや拡張フィールドの値を検索対象に含める場合、MTEntryKeywords タグの後に値が出力されるようにテンプレートを調整します。モディファイア is_draft を追加することで、データ中の HTML タグを削除します (画像の alt 属性は展開されます)。

標準の記事ドラフトテンプレート

@uri=<$MTEntryPermalink$>
@title=<$MTEntryTitle is_draft="1"$>
@cdate=<$MTEntryDate format="%Y-%m-%dT%H:%M:%S"$><$MTBlogTimezone$>
@mdate=<$MTEntryModifiedDate format="%Y-%m-%dT%H:%M:%S"$><$MTBlogTimezone$>
@blog_id=<$MTBlogID$>
@suffix=html<mt:if tag="EntryCategory">
parent=<$MTEntryCategory is_draft=1$>
parentUrl=<$MTEntryLink archive_type="Category"$></mt:if>

<$MTEntryTitle is_draft="1"$>
<$MTEntryBody is_draft="1"$>
<$MTEntryMore is_draft="1"$>
<$MTEntryKeywords is_draft="1"$>

文書ドラフトの出力例

@uri=http://example.jp/contact/
@title=お問い合わせ
@cdate=2009-02-06T18:24:07+09:00
@mdate=2009-02-10T19:52:38+09:00
@blog_id=1
@suffix=html
parent=PowerCMS
parentUrl=http://example.jp/

お問い合わせ
以下の文章はサンプルです。内容を適切に書き換えてください。
お問い合わせはメールで: email (at) example.jp

文書ドラフトについては Hyper Estraier のドキュメントを参照してください。

User’s Guide of Hyper Estraier Version 1 (Japanese)

(以下、ドキュメントより抜粋)

  • 文書ドラフトは以下の仕様を満たす必要があります。
  • 正常な UTF-8 エンコードのテキストから構成されます。
  • 改行形式は UNIX 形式 (LF) か MS-DOS 形式 (CR+LF) のどちらかです。
  • 属性部とテキスト部からなり、両者は最初に出現した空行で区切られます。
  • 属性部において、各行は属性の指定として扱われます。属性名と値は最初に出現した「=」で区切られます。
  • テキスト部において、各行は本文の文字列として扱われます。行頭がタブ文字で始まっている場合、その行は隠しテキストとして扱われます。

検索の実行とテンプレート

インデックスの生成が完了したら、以下のような URL より検索を実行します。

http://example.com/mt/mt-estraier.cgi?blog_id=*

検索フォームおよび検索結果の表示に使われるテンプレートは、パラメータ blog_id で指定したウェブサイト/ブログのシステムテンプレート「Hyper Estraier 検索結果」が使用されます。パラメータ blog_id を省略した場合、全てのウェブサイト/ブログの中からソースコード内で一番最初にロードされたウェブサイト/ブログのシステムテンプレート「Hyper Estraier 検索結果」が使用されます。この場合、該当のウェブサイト/ブログは ID が一番若いものになることが多いでしょう。

様々な条件を指定したカスタム検索をテンプレートのみで実装する

カスタム検索がテンプレートの設定のみで可能です。例えばカテゴリ配下の記事を検索する場合は mt-estraier.cgi に以下のようなパラメタを追加します。

mt-estraier.cgi?limit=10&offset=1&blog_id=1&query=検索文字列&parent=カテゴリ名

テンプレートには以下のように add_attradd_condition モディファイアを追加します。

<MTEstraierResults add_attr="parent" add_condition="STROREQ">
  …
</MTEstraierResults>

文書ドラフトの属性に追加した属性であれば検索条件に指定することができるため、例えば加えてカスタムフィールドの値によるフィルタリングを指定することができます。以下の例は、記事カスタムフィールド「MTEntryCustom」を指定し、その値を検索条件に追加する文書ドラフトテンプレートの例です。

@uri=<$MTEntryPermalink$>
@title=<$MTEntryTitle is_draft="1"$>
@cdate=<$MTEntryDate format="%Y-%m-%dT%H:%M:%S"$><$MTBlogTimezone$>
@mdate=<$MTEntryModifiedDate format="%Y-%m-%dT%H:%M:%S"$><$MTBlogTimezone$>
@suffix=html
@blog_id=<$MTBlogID$>
@entry_id=<$MTEntryID$><MTIf tag="EntryCategory">
parent=<$MTEntryCategory is_draft="1"$><MTIfArchiveTypeEnabled type="Category">
parentUrl=<$MTEntryLink type="Category"$></MTIfArchiveTypeEnabled></MTIf><MTIf tag="EntryCustom">entry_custom=<MTEntryCustom is_draft="1"></MTIf>

<$MTEntryTitle is_draft="1"$>
<$MTEntryBody is_draft="1"$>
<$MTEntryMore is_draft="1"$>
<$MTEntryKeywords is_draft="1"$>

この時 CGI に渡すパラメタは以下のようになります。

/mt-estraier.cgi?limit=10&offset=1&blog_id=1&query=検索文字列&entry_custom=カスタムフィールドの値&parent=カテゴリ名

複数指定の場合、テンプレートの add_attradd_condition を配列で指定します。

<MTEstraierResults add_attr="parent","entry_custom" add_condition="STREQ","STREQ">
 …
</MTEstraierResults>

完全一致の場合 add_condition モディファイアに渡す値は STREQ となりますが、その他様々な条件の指定が可能です。

※ 条件の指定

  • STREQ : 指定した文字列と一致する
  • STRNE : 指定した文字列と一致しない
  • STRINC : 指定した文字列を含む
  • STRBW : 指定した文字列で始まる
  • STREW : 指定した文字列で終わる
  • STRAND : 指定した文字列の全てのトークンを含む
  • STROR : 指定した文字列の一つ以上のトークンを含む
  • STROREQ : 指定した文字列の一つ以上のトークンと一致する
  • STRRX : 指定した文字列の正規表現に合致する
  • NUMEQ : 数値や日付が指定したものと等しい
  • NUMNE : 数値や日付が指定したものと等しくない
  • NUMGT : 数値や日付が指定したものより大きい
  • NUMGE : 数値や日付が指定したものと同じかより大きい
  • NUMLT : 数値や日付が指定したものより小さい
  • NUMLE : 数値や日付が指定したものと同じかより小さい

複数の条件を指定するには add_attr メソッドを複数呼び出します。この場合すべての条件にマッチする AND 条件指定になります。演算子の先頭に ! をつけると演算子の条件に当てはまらないものに絞り込みできます。例えば !STREQ を指定すると STREQ の条件に当てはまらないもので絞り込みできます。

また、絞り込み条件では英大文字と小文字を区別して動作しますが、演算子の先頭に I を指定すると大文字と小文字の違いを無視します。例えば ISTREQ を指定すると大文字と小文字の違いを無視して STREQ の条件に当てはまるもので絞り込みできます。

さらに、表示順の指定も可能です。 set_orderorder_condition モディファイアによって、テンプレートのみで指定することができるようになりました。MTQuery タグを使えば、さらに検索パラメタでの表示順指定も可能です。

<MTEstraierResults set_order="entry_custom" order_condition="NUMA" add_attr="parent" add_condition="STROREQ">
  …
</MTEstraierResults>

order_condition モディファイアに渡せる値は以下のいずれかとなります。

  • STRA : 文字列(辞書順)の昇順
  • STRD : 文字列(辞書順)の降順
  • NUMA : 数値または日付の昇順
  • NUMD : 数値または日付の降順

(検索クエリに関わらず)条件指定のみでフィルタリングする

CGI へのパラメタ no_query=1 もしくは テンプレートにモディファイア no_query=”1” を指定することで、検索クエリに関わらず条件指定のみでフィルタリングすることが可能です。

<MTEstraierResults no_query="1"  add_attr="parent","entry_custom" add_condition="EQ","EQ">
  …
</MTEstraierResults>
mt-estraier.cgi?limit=10&offset=1&blog_id=1&no_query=1&entry_custom=カスタムフィールドの値&parent=カテゴリ名

環境変数の設定

以下の環境設定を記述します。

設定項目 解説 設定例
EstCmdPath Hyper Estraierのコマンド「estcmd」のパスを記述します。 /usr/local/bin/estcmd
EstFilterPath PDF や MS Office 文書のインデックスを作成する外部コマンドのフィルタのパスを記述します。 /usr/local/share/hyperestraier/filter
EstCmdIndex 検索用のインデックスを作成するパスを記述します。 /var/www/estindex/casket
EstraierScript 検索 CGI スクリプトの名前を記述します (省略可)。デフォルト値はmt-estraier.cgiです。 search.cgi

記述例

EstcmdPath /usr/local/bin/estcmd
EstFilterPath /usr/local/share/hyperestraier/filter
EstcmdIndex /var/www/estindex/casket
EstraierScript mt-estraier.fcgi

プラグインの設定

システムプラグイン設定及びウェブサイト/ブログの PowerSearch プラグイン設定で指定する設定項目は以下の通りです。同一の設定項目については、ウェブサイト/ブログの設定値が優先されます。

システムのプラグイン設定

設定項目 解説 設定例
文書ドラフトのディレクトリ 文書ドラフトテンプレート(記事ドラフト/ウェブページドラフト)の出力先ディレクトリを指定します。 draft
デフォルト言語 検索に利用するデフォルトの言語を指定します。 ja
HTML 以外の検索対象 PDF や MS Office 文書等、HTML 以外のインデックス作成対象文書の拡張子をカンマ区切りで指定します。 xls,doc,ppt,pdf
インデックスアップデート チェックを入れると、記事/ウェブページの作成・更新時やアイテムのアップロード時にインデックスへの登録やアップデートを行います(インデックスへ反映されるのは、タスク run-periodic-tasks の実行時)。
デフォルトのページ送り件数 1ページあたりに表示される検索結果の件数を指定します。 20

ウェブサイト/ブログのプラグイン設定(システムのプラグイン設定よりも優先されます)

設定項目 解説 設定例
文書ドラフトのディレクトリ 文書ドラフトテンプレート(記事ドラフト/ウェブページドラフト)の出力先ディレクトリを指定します。 draft
デフォルト言語 検索に利用するデフォルトの言語を指定します。 ja
HTML 以外でインデックス対象から除外したいパス HTML 以外のファイルを検索対象に含める場合、検索対象外としたいディレクトリのパス(前方一致、改行区切り)を指定します。 /path/to/blog/exclude/path/to/blog/secret/index.html

テンプレートタグ

ブロックタグ

MTEstraierMeta

検索結果に関する検索キーワードや絞込みの条件を出力します。

このタグの中では以下の変数がセットされています。

<$mt:var name="__qurey__"$> (検索キーワード)
<$mt:var name="__limit__"$> (表示件数)
<$mt:var name="__offset__"$> (表示件数オフセット)
MTEstraierTarget

MTEstraierMeta タグの中で使用します。検索対象にしたウェブサイト/ブログの ID をループで出力します。

このタグの中では以下の変数がセットされています。

<$mt:var name="__target__"$> (検索対象にしたウェブサイト/ブログID)
MTEstraierSuffix

MTEstraierMeta タグの中で使用します。検索対象にしたファイルの拡張子をループで出力します。

このタグの中では以下の変数がセットされています。

<$mt:var name="__suffix__"$> (検索対象にしたファイルの拡張子)
MTEstraierResults

検索結果をループ出力します。

このタグの中では以下の変数がセットされています。

<$mt:var name="__start__"$> (現在表示している検索結果の開始番号)
<$mt:var name="__last__"$> (現在表示している検索結果の最後の番号)
MTEstraierBlock
モディファイア query で渡した検索語にマッチする検索結果をループ出力します。その他の指定はMTEstraierResults タグと同様です。
MTEstResultHeader
MTEstraierResults の最初のループ実行時にタグの内容を処理します。
MTEstResultFooter
MTEstraierResults の最後のループ実行時にタグの内容を処理します。
MTIfEstResultMatch
MTEstraierResults タグの中で使用します。検索条件にマッチする場合、タグの内容を処理します。
MTEstResultPager

検索結果のページ送りをループで出力します。

このタグの中では以下の変数がセットされています。

<mt:var name="__current__"> (現在表示している検索結果のページと、ループのページ番号がマッチする場合に1)
<mt:var name="__counter__"> (ループのページ番号)

<MTEstResultPager>
  <MTEstResultPagerHeader>
    <p>
      <MTIfEstResultPrev>
        <a href="<$mt:var name="search_params"$><mt:var name="__prevoffset__">">前へ</a>
      </MTIfEstResultPrev>
  </MTEstResultPagerHeader>
  <mt:if name="__current__">
    <strong>[<mt:var name="__counter__">]</strong>
  <mt:else>
    <a href="<$mt:var name="search_params"$><mt:var name="__offset__">">[<mt:var name="__counter__">]</a>
  </mt:if>
  <MTEstResultPagerFooter>
    <MTIfEstResultNext>
      <a href="<$mt:var name="search_params"$><mt:var name="__nextoffset__">">次へ</a>
    </MTIfEstResultNext>
    </p>
  </MTEstResultPagerFooter>
</MTEstResultPager>
MTEstResultPagerHeader
MTEstResultPager の最初のループ実行時にタグの内容を処理します。
MTEstResultPagerFooter
MTEstResultPager の最後のループ実行時にタグの内容を処理します。
MTIfEstResultPrev

MTEstResultPager ループの中で使用します。ページ送りの際にひとつ前の検索結果ページが存在する場合にタグの内容を処理します。

このタグの中では以下の変数がセットされています。

<mt:var name="__prevoffset__">(前のページのオフセットの値)
MTIfEstResultNext

MTEstResultPager ループの中で使用します。ページ送りの際にひとつ次の検索結果ページが存在する場合にタグの内容を処理します。

このタグの中では以下の変数がセットされています。

<mt:var name="__nextoffset__">(次のページのオフセットの値)
MTEstResultEntryCtx
MTEstResults ループの中で使用します。検索にマッチした記事/ウェブページの情報を取得する時にこのブロックタグを指定します。利用する際は entry_id モディファイアに記事/ウェブページの ID を指定する必要があります。このブロックタグ内で Entry 関係のタグが利用できます。
MTEstResultBlogCtx
MTEstResults ループの中で使用します。検索にマッチした記事/ウェブページが属するブログの情報を取得する時にこのブロックタグを指定します。利用する際は blog_id モディファイアにブログの ID を指定する必要があります。このブロックタグ内で Blog 関係のタグが利用できます。

ファンクションタグ

MTEstraierScript
検索結果テンプレートの出力ファイル名を出力します。
MTEstResultCount
MTEstraierResults タグの中で使用します。検索でヒットした件数を出力します。
MTEstResultURL
MTEstraierResults タグの中で使用します。ヒットしたページ (ファイル) のURLを出力します。
MTEstResultTitle
MTEstraierResults タグの中で使用します。ヒットしたページ (ファイル) のタイトルを出力します。
MTEstResultExcerpt
MTEstraierResults タグの中で使用します。ヒットしたページ (ファイル) の概要を出力します。
MTEstResultDate
MTEstraierResults タグの中で使用します。ヒットしたページ (ファイル) の日付を出力します。
MTEstResultEntryID
ヒットしたページが記事/ウェブページの場合にその ID を出力します。
MTEstResultEntryBlogID
ヒットしたページ (ファイル) タグのウェブサイト/ブログの ID を出力します。
MTEstCmdPath
Hyper Estraier のコマンド (EstCmd) のパスを出力します。
MTEstDbPath
検索対象のデータベースのパスを出力します。

モディファイア

highlight
検索結果表示文字列中の検索語をハイライト (strong タグでマークアップ) します。
hilight
highlight モディファイアと同じ動作をします。
is_draft
文書ドラフトテンプレートの中で、HTML タグを削除するために指定します

Windows Server 2008 でのエンタープライズ検索のセットアップ

Windows Server 2008 でエンタープライズ検索を利用する場合には、PowerCMS に同梱の Hyper Estraier のセットアップと Perl モジュール (PPM パッケージ) のインストールが必要です。

Hyper Estraier のセットアップ

PowerCMS に同梱の hyperestraier-1.4.12.zip を展開し、適切なディレクトリ (例: C:hyperestraier) に配備します。次に、システム環境変数 PATH に、このディレクトリへのパスを追加します。

Windows Server 2008 でエンタープライズ検索を利用する場合には、必ず PowerCMS に同梱の Hyper Estraier をご利用下さい。公式配布版など、その他の Hyper Estraier では、エンタープライズ検索をご利用いただけません。

Perl モジュール (PPM パッケージ) のインストール

PowerCMS に同梱の Estraier-1.5.zip を一時的なディレクトに伸長 (解凍) します。次に、コマンドプロンプトを開き、Estraier.ppd のあるディレクトリに移動します。

次のコマンドを入力します。

ppm install Estraier.ppd

以上で、エンタープライズ検索が利用可能な環境が整いました。


お問い合わせ

お問い合わせフォームがご利用できない場合は、以下のメールアドレスからも受け付けております。
contact@alfasado.jp

製品資料ダウンロード

パンフレットデータ、提案用資料などがダウンロードできます。