メインコンテンツまでスキップ

キーワード検索用文字列を用意する

概要

コンテンツの項目とは別に、全文検索用の文字列を用意できます。
全文検索用の文字列はコンテンツ定義のキーワードテンプレートでSmartyを使って設定できるため、登録されたコンテンツの中から検索に使う文字列を追加・削除したり、関連情報でコンテンツに紐づく別のコンテンツやメンバー情報を検索用の文字列に追加したりできます。
また、キーワード検索時にこのテンプレートのみを利用するようになるため、検索のパフォーマンスが向上します。

今回は講演会のスケジュールをテーマに、コンテンツに紐づいたメンバーのプロフィールが検索対象となるように設定します。

学べること

以下の手順でキーワードテンプレートの設定と確認をします。

コンテンツの準備をする

コンテンツとメンバーに必要な項目を設定します。

コンテンツ定義の作成

コンテンツ定義を作成するを参考に、全文検索対象とするコンテンツ定義を作成します。
今回は講演会のスケジュールを想定し、以下の通りコンテンツ定義を作成しました。

基本項目

項目名内容
名前講演会
本文の入力方法テキストエリア
キーワード検索にテンプレートを利用する[有効にする]にチェックを入れる

フィールド

ID項目名識別子項目設定項目設定オプション
01登壇者presenter関連情報選択モジュール: メンバー
02開催日時date日付フォーマット時間(hh:mm)も設定する
03テーマthemaテキスト
04オンライン配信streaming選択形式入力必須
ラジオボタンを利用する
0: オンライン配信なし
1: オンライン配信あり

Image from Gyazo

メンバー拡張項目の設定

拡張項目設定及びメンバー詳細設定で利用できる拡張項目一覧を参考に、項目を設定します。 今回は講演会の登壇者を想定し、以下の通り拡張項目を追加しました。

フィールド

項目名識別子設定
公開プロフィールpublish_profileテキストエリア

Image from Gyazo

検索対象の文字列を設定する

検索対象文字列テンプレートの確認

デフォルトでは、

  • topics_id
  • slug
  • タイトル
  • 内容
  • カテゴリ
  • 全ての拡張項目のテキスト部分 が検索対象となるテンプレートが入力されています。
備考

初期状態に戻したい場合は空で更新することで、自動的にデフォルトテンプレートが入力されます。

リファレンス

利用できる変数は以下の通りです。

変数名説明
$detailsObjectコンテンツ詳細
$ext_configObjectコンテンツ拡張設定

Smartyの記述によって出力された文章が全文検索の対象となります。

検索対象文字列テンプレートの修正

コンテンツ定義の作成」で追加したコンテンツ定義のテンプレートを変更します。 今回の例では、以下を検索対象文字列に含むように追加しています。

  • タイトル
  • 関連情報に紐づくメンバー情報の名前と公開プロフィール
  • 開催日時をフォーマットしたもの
  • テーマ
  • オンライン配信のラベル部分

関連情報に紐づくメンバー情報の取得については、カスタム処理からKurocoのAPIを呼び出せますか?を参考にしてください。

デフォルトの設定はすべて削除して、以下のように記述します。

{* タイトル *}
{$details.subject|escape}

{* 登壇者 *}
{if $details.presenter.module_type eq 'member' && $details.presenter.module_id}
{capture name=method_params}{ldelim}
"filter": "member_id eq {$details.presenter.module_id}"
{rdelim}{/capture}
{assign var=method_params value=$smarty.capture.method_params|json_decode:1}
{api_method
var=member_list
model="Member"
method="list"
version="1"
method_params=$method_params
}
{foreach from=$member_list.list item=member}
{* 氏名 *}
{$member.name1|escape} {$member.name2|escape}
{* 公開プロフィール *}
{$member.publish_profile|escape}
{/foreach}
{/if}

{* 開催日時 *}
{$details.date|strtotime|date_format:"Y/m/d H:i"}
{$details.date|strtotime|date_format:"Y年m月d日 H時i分"}

{* テーマ *}
{$details.thema|escape}

{* オンライン配信 *}
{if $details.streaming.key > 0}
{$details.streaming.label}
{/if}

{* 内容 *}
{$details.contents|strip_tags|escape}

Image from Gyazo

検索対象文字列テンプレートを保存する

処理の記述が完了したら、[更新する] ボタンをクリックして保存します。 以上で設定は完了です。

コンテンツを追加・更新すると、テンプレートに基づいて自動的に検索対象文字列が保存されます。

注意

反映まで数分程度時間がかかる場合があります。

動作の確認をする

コンテンツを追加して、Swagger UIから検索結果を確認します。

コンテンツを追加する

[コンテンツ定義の作成]で作成したコンテンツ定義に従って、コンテンツを追加します。

フォームに内容を入力し、[追加する] ボタンをクリックしてコンテンツを追加します。 コンテンツを追加・更新すると、テンプレートに基づいて自動的に検索対象文字列が保存されます。

注意

反映まで数分程度時間がかかる場合があります。

Image from Gyazo

検索対象文字列を確認する

追加されたコンテンツの編集画面で、[その他] ボタンをクリックして選択肢が表示します。 [キーワードテンプレート]をクリックすると、出力された検索対象文字列を確認することが出来ます。

Image from Gyazo

注意

反映完了まで[キーワードテンプレート]の選択肢が表示されません。

今回の例では、表示された文字列は以下のようになります。 Image from Gyazo

ヒント

検索対象文字列にHTMLタグを含む場合、HTMLタグ自体も検索対象となります。 HTMLタグを除いて検索したい場合はstrip_tags修飾子の利用を検討ください。

備考
  • 生成できる検索対象文字列はコンテンツ毎に100MB(3byte想定のマルチバイト文字で3000万文字以上)までとなり、100MBを超える文字列はカットされます。
  • テンプレートで生成する検索対象文字列内の半角英字は自動的に小文字になります。

全文検索用エンドポイントを用意する

検索用のエンドポイントを用意します。

エンドポイントの設定方法を参考に、全文検索対象とするコンテンツ定義を作成します。

今回はパス・モデルを以下のように設定します。

  • パス: search
  • カテゴリー: コンテンツ
  • モデル:Topics, v1
  • オペレーション:list
  • topics_group_id:83 (コンテンツ定義の作成で採番されたID)

Image from Gyazo

Swagger UIで確認する

Swagger UI画面から[全文検索用エンドポイントを用意する]で追加したエンドポイントにリクエストします。 full_text_searchにキーワードを入力することで、全文検索文字列にキーワードを含むコンテンツのみが返却されます。

Image from Gyazo

関連ドキュメント


サポート

お探しのページは見つかりましたか?解決しない場合は、問い合わせフォームからお問い合わせいただくか、Slackコミュニティにご参加ください。