PowerCMS™
2024年12月27日(金曜日)から2025年1月5日(日曜日)まで休業いたします。
2025年1月1日購入分よりライセンスの価格を改定いたします。
[ブログ] PowerCMS 6 でのアップデートまとめ を追加しました。
[ブログ] 展示会「第22回【東京】総務・人事・経理 Week 秋」を見学してきました を追加しました。

検索の実行とカスタマイズ

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

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

出力した文書ドラフトからのインデックス生成が完了したら、以下のような URL より検索を実行します。

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

検索フォームおよび検索結果の表示に使われるテンプレートは、パラメータ blog_id で指定したワークスペース/スペースのシステムテンプレート「Hyper Estraier 検索結果」が使用されます。

パラメータ blog_id を省略した場合、全てのワークスペース/スペースの中から一番最初にロードされたワークスペース/スペースのシステムテンプレート「Hyper Estraier 検索結果」が使用されます。この場合、該当のワークスペース/スペースは ID が一番若いものになることが多いでしょう。

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

特定カテゴリの記事を検索する

検索のカスタマイズがテンプレートの設定のみで可能です。例えばカテゴリ配下の記事を検索する場合、PowerCMS 標準テーマのアーカイブテンプレートで出力する文書ドラフト ではカテゴリは属性 parent なので、mt-estraier.cgi に以下のように parent パラメータを追加します。

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

テンプレートでは、検索を実行して結果を出力するブロックタグ MTEstraierResults に対して、以下のように add_attradd_condition モディファイアを追加します。

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

カスタムフィールドで記事を絞り込む

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

この場合、検索 URL には entry_custom パラメータを追加します。

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

前述の 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 : 数値や日付が指定したものと同じかより小さい
  • NUMBT : 数値や日付が指定した二つのものの間である

複数の条件を指定するには 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">
  (entry_custom 属性の値で検索結果をソートする)
</MTEstraierResults>

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

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

set_orderorder_condition が未指定の場合、検索結果はスコア順(降順)で表示します。文書に指定した検索語が多く含まれているとスコアは高くなります。

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

パラメータ no_query=1 もしくは テンプレートにモディファイア no_query=”1” を指定することで、検索クエリに関わらず条件指定のみでフィルタリングすることが可能です。例えば、不動産検索で間取りが 1LDK のみの物件に絞るようなケースが考えられます。

<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=カテゴリ名
次は
一覧へ

お問い合わせ

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

製品資料ダウンロード

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