intra-mart Accel Platform IM-ContentsSearch プログラミングガイド 第5版 2018-12-01

4. 共通仕様

この章では、 IM-ContentsSearch の機能を利用したプログラミングを行う上で必要となる、共通的な仕様や概念について説明します。

4.1. コンテンツ

IM-ContentsSearch では検索結果として表示される1つの索引データを コンテンツ という形で扱います。
コンテンツの型には、以下の2種類が存在します。
  1. 登録用コンテンツ

    新たに検索対象を登録する際に使用するコンテンツです。
    検索結果として表示したい単位データごとに、登録用コンテンツを作成していきます。
    使用方法の詳細や実装例については、検索対象の作成・登録・削除 の章にて説明します。
  2. 検索結果コンテンツ

    検索処理の実行結果として返却されるコンテンツです。
    検索処理を実行すると、検索結果コンテンツが格納されたリストを取得することができます。
    使用方法の詳細や実装例については、検索処理の実装 の章にて説明します。
IM-ContentsSearch を利用した基本的な処理の流れは以下の通りです。
  1. 任意のデータを格納した登録用コンテンツを作成して登録する。
  2. 他のアプリケーションと同時に横串検索を可能にするために、標準の全文検索画面用の設定を行う。
  3. 検索APIを利用して検索結果コンテンツを取得し、画面の描画など任意の処理に利用する。

4.2. フィールド

コンテンツにはフィールドというデータを格納する単位を保持しており、フィールドの種類によって格納可能なデータ型が異なります。
フィールドは標準フィールド動的フィールドの2種類が定義されています。

4.2.1. 標準フィールド

標準で用意されているフィールドです。
IM-ContentsSearch の標準の全文検索画面に対応するために標準フィールドを設定する必要があります。
標準フィールドを使用するには、下記サンプルのように Fields クラスから取得します。
標準フィールドを取得するサンプル
// IDフィールド
Fields.ID;

// TYPEフィールド
Fields.TYPE;
標準フィールドとして以下が定義されています。
No. フィールド名 必須 検索 説明
1 ID String  
コンテンツを一意に判別することが可能なIDを登録するためのフィールドです。
RDBにおけるプライマリキーと同様の役割を果たします。
2 TYPE String配列  
コンテンツ種別 を登録するためのフィールドです。
コンテンツ種別 の詳細については 検索対象の作成・登録・削除 にて記述します。
3 URL String    
コンテンツの元データにアクセスするためのURLを登録するためのフィールドです。
4 ID_ORIGINAL String    
コンテンツの元データを辿るのに必要なデータなど、必要に応じて任意の文字列を登録するためのフィールドです。
JSON形式で登録するためのユーティリティが用意されています。
5 TITLE テキスト配列  
コンテンツにおけるタイトルのテキストデータを登録するためのフィールドです。
6 TEXT テキスト配列  
コンテンツのメインとなるテキストデータを登録するためのフィールドです。
7 ATTACHMENT テキスト配列  
添付ファイル内のテキストデータを登録するためのフィールドです。
登録時は直接利用せず、APIから添付ファイルの情報を登録することで添付ファイル内の文字列を格納します。
8 RECORD_DATE Date    
標準検索画面の日付レンジ検索にて使用されるフィールドです。
コンテンツの元となる情報が作成された日付を登録することで、標準の全文検索画面にて日付による絞り込み検索が可能になります。
  • 必須 の項目に ○ が付いているフィールドは、登録時に必ず値を設定する必要があります。
  • 検索 の項目に ○ が付いているフィールドは、 IM-ContentsSearch の全文検索画面における検索対象となります。
登録用コンテンツには標準フィールドに対するaddメソッド、および、setメソッドが、検索結果コンテンツにはgetメソッドが用意されています。
そのため、通常は Fields クラスを利用することなく、以下のように標準フィールドへアクセスすることが可能です。
コンテンツの標準フィールドを操作するサンプル
// 登録用コンテンツ
InputContent inputContent = new StandardInputContent();
inputContent.setId("コンテンツの一意なID");
inputContent.setTitle("コンテンツのタイトル");

// 検索結果用コンテンツ
ResultContent resultContent = // 検索処理にて取得します
String id = resultContent.getId();
String title = resultContent.getTitle();

4.2.2. 動的フィールド

フィールド名と共に任意のキーを指定することで、標準フィールドにはない独自のデータ型を持ったフィールドを追加することが可能です。
動的フィールドを利用してコンテンツに独自データを保持させることで、以下のようなことが実現可能です。
  • 標準の全文検索画面における検索結果画面に任意の情報を追加
  • コンテンツを作成したタイミングのデータを保持
動的フィールドも標準フィールドと同様に、 Fields クラスを利用して取得することができます。
動的フィールドを取得するサンプル
// 製品名の保存に利用するString型の動的フィールドの例
Fields.STRING.toField("code");

// 価格の保存に利用するint型の動的フィールドの例
Fields.INT.toField("price");

注意

システムで予約されているため、次の名称は動的フィールドに利用できません。
  • 標準フィールドのフィールド名(大文字、小文字の区別なし)
  • “snippets”
  • “typeBreadcrumbs”
動的フィールドには以下のフィールド(データ型)が定義されています。
No. フィールド(データ型) 説明
1 STRING String 文字列として登録するためのフィールドです。
2 INT Integer 整数値として登録するためのフィールドです。
3 LONG Long 長整数値として登録するためのフィールドです。
4 DATE Date 日付データとして登録するためのフィールドです。
5 BOOLEAN Boolean 真偽値を登録するためのフィールドです。
6 NGRAM N-gram テキスト 文字列に対してN-gram解析を行った結果を登録するためのフィールドです。
7 MORPH 形態素解析 テキスト 文字列に対して形態素解析を行った結果を登録するためのフィールドです。
8 WHITESPACE Whitespace テキスト 文字列に対してWhitespace解析を行った結果を登録するためのフィールドです。
9 STRING_MLT String配列 文字列の配列を登録するためのフィールドです。
10 INT_MLT Integer配列 整数値の配列を登録するためのフィールドです。
11 LONG_MLT Long配列 長整数値の配列を登録するためのフィールドです。
12 DATE_MLT Date配列 日付データの配列を登録するためのフィールドです。
13 BOOLEAN_MLT Boolean配列 真偽値の配列を登録するためのフィールドです。
14 NGRAM_MLT N-gram テキスト配列 文字列の配列に対してN-gram解析を行った結果を登録するためのフィールドです。
15 MORPH_MLT 形態素解析 テキスト配列 文字列の配列に対して形態素解析を行った結果を登録するためのフィールドです。
16 WHITESPACE_MLT Whitespace テキスト配列 文字列の配列に対してWhitespace解析を行った結果を登録するためのフィールドです。
登録用コンテンツ に動的フィールドの値を追加する場合は、 setValue および addValue メソッドを利用します。
検索結果コンテンツ から動的フィールドの値を取得する場合は、 getValue メソッドを利用します。
コンテンツの動的フィールドを操作するサンプル
// 登録用コンテンツ
InputContent inputContent = new StandardInputContent();
inputContent.setValue(Fields.STRING.toField("code"), "サンプル製品");
inputContent.setValue(Fields.INT.toField("price"), 100000);

// 検索結果用コンテンツ
ResultContent resultContent = // 検索処理にて取得します
String code = resultContent.getValue(Fields.STRING.toField("code"));
int price = resultContent.getValue(Fields.INT.toField("price"));

4.3. 権限制御

IM-ContentsSearch ではコンテンツごとに閲覧可能権限を設定することが可能です。
コンテンツに設定された権限を利用し、検索を行ったユーザが検索結果として表示されるコンテンツを制御します。
閲覧可能権限の制御は各APIの実装において以下のフローで実現されています。
コンテンツ作成時のフロー(権限の付与)
  1. 作成した登録用コンテンツに対して、参照を許可する権限を作成する ACIBuilder を追加します。

  2. 登録処理の実行時に投稿用のAPIがコンテンツに追加された、 ACIBuilder を利用して権限の一覧を作成します。
    作成された権限の一覧はインデックスの権限保持フィールドに保持されます。
全文検索実行時のフロー(権限によるフィルタリング)
  1. 検索を行ったユーザが保持するすべての権限を取得します。
  2. 取得したすべての権限を、登録済みのインデックスの権限保持フィールドに一致するかを検索条件に付与します。
  3. 権限情報がマッチしたコンテンツのみがフィルタリングされ、検索結果として返却されます。

注意

コンテンツの元となるデータの権限に関する権限が変更された場合、その権限でコンテンツを再登録するまで変更前の権限でフィルタリングされます。