SearchContentsプラグイン(その9・OR検索)

SearchContentsプラグインでは、「複数の条件の中のどれか1つを満たす」という検索を行うこともできます(OR検索)。
ただし、AND検索と比べて、テンプレートの書き方が複雑になります。

1.共通フィールド間のOR検索

コンテンツデータに共通なフィールド(公開日など)でOR検索する場合は、以下のようにテンプレートを組みます。

  • OR検索する各条件を、MTSearchContentSectionというブロックタグで囲みます。
  • 各条件の間に、<$mt:SearchContentUnion op="or"$>というテンプレートタグを入れます。

例えば、「商品」というコンテンツタイプがあるときに、以下の条件のどちらかを満たすコンテンツデータを検索したいとします。

  • 公開日(authored_on)が2018年1月1日以降
  • ユーザーのID(author_id)が1

この場合、以下のようにテンプレートを組みます。

<mt:SearchContents content_type="商品">
  <mt:SearchContentSection>
    <$mt:SearchContentCompare field="authored_on" ge="20180101000000"$>
    <$mt:SearchContentUnion op="or"$>
    <$mt:SearchContentValues field="author_id" values="1"$>
  </mt:SearchContentSection>
</mt:SearchContents>

2.コンテンツフィールド間のOR検索

コンテンツフィールド間でOR検索を行う場合、以下の手順を取ります。

  • それぞれの条件をMTSearchContentsタグのブロックで表し、検索されたコンテンツデータのIDを変数に代入する
  • それぞれの条件で見つかったコンテンツデータのIDを、フィールド間のOR検索にかける

コンテンツデータを検索して、見つかったコンテンツデータのIDを変数に代入するには、MTSearchContentsタグに「content_ids="変数名"」というモディファイアを指定します。

例えば、「商品」というコンテンツタイプがあるときに、以下のどちらかの条件を満たすコンテンツデータを検索したいとします。

  • 「ジャンル」というカテゴリ型のフィールドで、「シャツ」というカテゴリに属する
  • 「商品名」というテキスト型のフィールドに、「シャツ」という値を含む

2つの条件で見つかったコンテンツデータのIDを、それぞれ「cid1」「cid2」という変数に代入する場合、以下のようにテンプレートを組みます。

<mt:SearchContents content_type="商品" content_ids="cid1">
  <$mt:SearchContentCategory content_field="ジャンル" category="シャツ"$>
</mt:SearchContents>
<mt:SearchContents content_type="商品" content_ids="cid2">
  <$mt:SearchContentContain content_field="商品名" values="シャツ"$>
</mt:SearchContents>
<mt:SearchContents content_type="商品">
  <mt:SearchContentSection>
    <$mt:SearchContentCompare field="id" values="$cid1"$>
    <$mt:SearchContentUnion op="or"$>
    <$mt:SearchContentCompare field="id" values="$cid2"$>
  </mt:SearchContentSection>
</mt:SearchContents>

3.SearchContentsプラグイン関係の記事の一覧

MT Cloud Starter Kit
Movable Typeのプラグイン集「MT Cloud Starter Kit」をぜひご利用ください