Movable Type CMSプラットフォーム Movable Type
ドキュメントサイト

Movable Type 8 ManualMovable Type 8 マニュアル

コンテンツタイプの検索の概要

最終更新日: 2023.10.02

サイトに検索フォームを設置することで、コンテンツタイプで作成したコンテンツデータを検索できます。コンテンツデータの検索では、コンテンツフィールドを指定して検索できるので、記事とウェブページの検索よりも柔軟な検索を実現できます。

コンテンツデータの検索に利用する CGI スクリプト

コンテンツデータの検索は、記事やウェブページの検索で利用される mt-search.cgi ではおこなえません。 Movable Type 8 から用意されている mt-cdsearch.cgi を利用します。

mt-cdsearch.cgi は、コンテンツデータの検索専用となっており、同時に記事やウェブページを検索することはできません。

mt-cdsearch.cgi のスクリプト名は、ContentDataSearchScript 環境変数で変更できます。

PSGI 環境においては、CGI ファイル名を変更しただけではスクリプトファイル名の変更がおこなわれません。必ず ContentDataSearchScript 環境変数で新しいスクリプト名を指定してください。

コンテンツタイプの指定

コンテンツデータの検索では、検索対象となるコンテンツタイプを SearchContentTypes パラメーターで指定します。指定できるのはコンテンツタイプの名前IDユニークID のいずれかです。 SearchContentTypes パラメーターを指定しない場合、すべてのコンテンツタイプが検索対象になります。

mt-cdsearch.cgi?SearchContentTypes=Page&search=foo

コンテンツデータの検索対象

コンテンツデータの検索では、ほぼすべてのフィールドが検索の対象となりますが、以下のフィールドは検索対象から除外されます。また、それ以外のフィールドでもいくつかの制限があります。

検索対象とならないフィールド

  • データ識別ラベル(手入力の場合)
  • 公開日、公開終了日、日付、日付と時刻フィールド(日時の範囲指定による検索のみ可能)
  • テーブルフィールド
  • テキスト表示エリアフィールド

また、Movable Type の標準では提供しているフィールドはありませんが、blob タイプのフィールドも検索対象となりません。

条件付きで検索対象となるフィールド

セレクトボックス、ラジオボタン、チェックボックスについては、入力されているラベルは検索できません。フィールドの値として選択されている値が検索対象となります。

ラベル: 単身
値: Single

上記例の場合、search=single は検索にマッチしますが、search=単身 はマッチしません。

リンクされているオブジェクトの検索

アセット、カテゴリセット、タグ、コンテンツタイプのフィールドも検索対象となりますが、検索対象となるフィールドはそれぞれによって違います。

アセット(アセット、画像、オーディオ、ビデオ)

リンクされているアセットの説明ファイル名ラベルが検索対象となります。

カテゴリセット

リンクされているカテゴリのベースネーム説明ラベルが検索対象となります。

タグ

リンクされているタグの名前が検索対象となります。

コンテンツタイプ

リンクされているコンテンツタイプに含まれるフィールドについて検索がおこなわれます。リンク先のコンテンツタイプに含まれるコンテンツタイプフィールドは検索対象となりません。(1 階層のみ検索される)

日付範囲の指定

コンテンツデータ検索では、公開日以外にも日付フィールド日付と時刻フィールドを指定して範囲検索ができます。

フィールドの指定は date_field パラメーターに日付と時刻フィールドまたは日付フィールドの名前かユニーク ID を指定します。指定がない場合は、公開日(authored_on)が利用されます。

検索する範囲は、archive_type パラメーターにアーカイブタイプ名を指定することで決定されます。例えば、archive_type=Yearly と指定した場合は、year パラメーターで指定された年のコンテンツデータが検索されます。指定したアーカイブタイプでどの範囲が検索されるかは、以下のルールに従います。

  • archive_type に Daily が含まれる場合、指定した日に検索範囲を絞る
  • archive_type に Weekly が含まれる場合、指定した日を含む週に検索範囲を絞る
  • archive_type に Monthly が含まれる場合、指定した日を含む月に検索範囲を絞る
  • archive_type に Yearly が含まれる場合、指定した日を含む年に検索範囲を絞る

また、日付の範囲指定に関連するパラメータは下表のとおりです。

パラメーター 必須 説明
archive_type 必須 有効なアーカイブタイプを指定して検索範囲を決定します。
year 必須 検索範囲の「年」の部分を指定します。
month 検索範囲の「月」の部分を指定します。省略された場合「01」がセットされます。
day 検索範囲の「日」の部分を指定します。省略された場合「01」がセットされます。
date_field 検索範囲として使う日付フィールドまたは、日付と時刻フィールドの名前かユニーク ID を指定します。省略された場合は、公開日が利用されます。

検索結果のソート

コンテンツデータ検索では、検索結果のソートと並び順の指定に SearchSortBy と SearchResultDisplay パラメーターを使用します。各パラメーターが指定されていない場合は、環境変数 ContentDataSearchSortByContentDataSearchResultDisplay の内容が利用されます。

※ContentDataSearchSortBy と ContentDataSearchResultDisplay は環境変数専用で、パラメーターとしては使用できません。

指定できる値は以下のとおりです。

ContentDataSearchSortBy

  • authored_on
    コンテンツデータの「公開日」の日時でソートします。
  • content_type_id
    コンテンツタイプの ID でソートします。
  • author_id
    コンテンツデータの作成ユーザー ID でソートします。
  • identifier
    「出力ファイル名」でソートします。
  • created_on
    コンテンツデータの作成日時でソートします。
  • modified_on
    コンテンツデータの変更日時でソートします。
  • field:コンテンツフィールドの名前、ユニーク ID
    コンテンツフィールドでソートします。通常、文字列としてソートされますが、指定されたフィールドが数値型である場合は数値としてソートします。

ContentDataSearchResultDisplay

  • ascend
    古い方(小さい方)から順に表示します。
  • descend
    新しい方(大きい方)から順に表示します。

検索結果テンプレート

コンテンツデータの検索結果は、特に指定がない場合は type が「cd_search_results」であるテンプレートが利用されます。Movable Type に含まれる標準テーマにおいては「コンテンツの検索結果」テンプレートが該当します。

検索時に設定できるパラメーター

コンテンツデータの検索では、いくつかのパラメーターを指定することができます。大文字小文字は区別されます。

IncludeBlogs

検索対象にするサイトの ID(blog_id)をカンマ区切りで指定します。

ExcludeBlogs

検索対象にしないサイトの ID(blog_id)をカンマ区切りで指定します。

SearchContentTypes

検索対象にするコンテンツタイプの ID、名前、ユニーク ID を指定します。
AND、OR、NOT による複数のコンテンツタイプの条件指定が可能です。(r.4601 以降で対応。それより前のバージョンではエラーになります。)

例 1)洋食 OR 和食 … 名前が「洋食」もしくは「和食」のいずれかのコンテンツタイプのコンテンツデータを対象にする
例 2)NOT 洋食 AND NOT 和食 … 名前が「洋食」と「和食」以外のコンテンツタイプのコンテンツデータを検索対象にする

※ URL で指定する場合、mt-cdsearch.cgi?search=検索ワード&SearchContentTypes=洋食 OR 和食 となります。洋食 OR 和食 は URL 用にエスケープされ、実際には 洋食%20OR%20和食 もしくは 洋食+OR+和食 になります。
※「洋食 AND 和食」といった指定も可能ですが検索結果は 0 件になります。これは、コンテンツデータは必ず特定のコンテンツタイプで作成されるものであり、複数のコンテンツタイプに同時に存在するコンテンツデータを作成することができないためです。
※「(aaa OR bbb) AND (ccc OR ddd)」のように括弧を記述して優先順位を指定することはできません。(制限事項となります。エラーにはなりませんが、正しく解釈されません。)

SearchSortBy

検索データをソートするフィールドを指定します。環境変数「ContentDataSearchSortBy」と同じ設定値を使用します。

SearchResultDisplay

検索データのソート順を指定します。環境変数「ContentDataSearchResultDisplay」と同じ設定値を使用します。

Template

検索結果テンプレートのフォーマットを指定します。 値には、mt-config.cgi に記述した SearchAltTemplate で設定したフォーマット名を使用します。 例えば、mt-config.cgi での SearchAltTemplate の設定が以下の場合、このテンプレートファイルを検索結果の表示に使用するには Template パラメーターの値を work にします。

SearchAltTemplate work work.tmpl

archive_type

範囲指定するとき、対象となるアーカイブタイプを指定します。

author

コンテンツデータの作成者ででフィルタリングする場合、ユーザーの表示名を指定します。

blog_id

検索のベースになる blog_id を指定します。template_id や Template パラメーターが未指定の場合、blog_id で指定したサイトの検索結果テンプレートが検索結果の表示で利用されます。

content_field

コンテンツフィールドでフィルタリングする場合、コンテンツフィールドの名前もしくはユニーク ID と、コンテンツフィールドの値を、コロン(:)で分けて指定します。コンテンツフィールドが日付、時刻、日付と時刻、バイナリ以外のフィールドが指定できます。指定可能なコンテンツフィールドはひとつのみで、複数フィールドの指定はできません。また、コンテンツフィールドが数値の場合は完全一致検索します。それ以外のフィールドでは、部分一致検索します。AND OR NOT を組み合わせて指定できます。

「レシピ」コンテンツタイプの中で「ミートソース」を含むコンテンツデータを、「種類」タグコンテンツフィールドの値「パスタ(ID:10)」でフィルタする場合は、以下のようにパラメーターを指定します。

mt-cdsearch.cgi?search=ミートソース&SearchContentTypes=レシピ&content_field=種類:10&limit=20

conent_field では、コンテンツフィールドの種類によって、セットで指定する値の種類が変わります。例えば、「テキスト」コンテンツフィールドでは文字列を値として指定します。「タグ」コンテンツフィールドの場合は、タグ名ではなく、タグの ID を指定します。

コンテンツフィールド データの種類 マッチタイプ 指定する値
コンテンツタイプ 数値 完全一致 ID
テキスト テキスト 部分一致 文字列
テキスト(複数行) テキスト 部分一致 文字列
数値 テキスト 部分一致 文字列
URL テキスト 部分一致 文字列
日付と時刻 日時 - 利用できません
日付 日時 - 利用できません
時刻 日時 - 利用できません
セレクトボックス テキスト 部分一致 文字列
ラジオボタン テキスト 部分一致 文字列
チェックボックス テキスト 部分一致 文字列
アセット 数値 完全一致 ID
オーディオアセット 数値 完全一致 ID
ビデオアセット 数値 完全一致 ID
画像アセット 数値 完全一致 ID
埋め込みテキスト テキスト 部分一致 文字列
カテゴリ 数値 完全一致 ID
タグ 数値 完全一致 ID
リスト テキスト 部分一致 文字列
テーブル テキスト 部分一致 文字列
テキスト表示エリア テキスト - 利用できません

limit

1 ページあたりの検索数を指定します。

date_field

範囲指定に使う 日付、日付と時刻のフィールドを指定します。

day

日付範囲指定の「日」を指定します。

limit_by

search パラメーターによるキーワード検索の際、複数の検索ワードを半角スペースで区切ったときの検索条件を指定します。

  • all (デフォルト)
    • AND 検索(指定したすべての検索ワードを含む)
  • any
    • OR 検索(指定したいずれかの検索ワードを含む)
  • exclude
    • AND NOT 検索(指定したどの検索ワードも含まない)

month

日付範囲指定の「月」を指定します。

offset

検索結果のうち、スキップしたい件数を指定します。

page

検索結果が複数ページに分かれる場合、表示したい検索結果ページの数値を指定します。

search (必須)

検索する文字列を指定します。

template_id

検索結果の表示に利用するテンプレートの ID を指定します。

year

日付範囲指定の「年」を指定します。

関連するテンプレートタグ

こちらのテンプレートタグリファレンスをご参照ください。

関連する環境変数

こちらの環境変数リファレンスをご参照ください。

目次