コンテンツ作成処理の実装¶
前章にて検索結果を表示するために必要な準備が完了しました。この章では、拡張した検索結果に対応するオリジナルのコンテンツ作成の実装方法について説明します。この章では、前章にて決定した以下の項目を引き続き利用します。
- コンテンツ種別
項目
コンテンツ作成処理¶
検索結果に独自のコンテンツを表示するためには、コンテンツを作成し、登録処理を行う必要があります。
1 2 // 登録用コンテンツをインスタンス化します final InputContent content = new StandardInputContent();
標準フィールドへのデータ追加¶
1 2 3 4 5 6 // 標準フィードを設定 content.setId("id") .setTitle("タイトル") .addText("") .setUrl("") .setRecordDate(Env.getSystemDate().getTime());
動的フィールドへのデータ追加¶
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 // 商品コードを登録する動的フィールドの定義 private static final DynamicField<String, String> FIELD_PRODUCT_CODE = Fields.STRING.toField("product_code"); // 商品名を登録する動的フィールドの定義 private static final DynamicField<String, String> FIELD_PRODUCT_NAME = Fields.STRING.toField("product_name"); // 価格を登録する動的フィールドの定義 private static final DynamicField<Integer, Integer> FIELD_PRICE = Fields.INT.toField("price"); // ... // 商品コード, 商品名, 価格を設定 content.setValue(FIELD_PRODUCT_CODE, "xxxxxxxx") .setValue(FIELD_PRODUCT_NAME, "商品名") .setValue(FIELD_PRICE, 100);
添付ファイルの追加¶
1 2 3 4 5 6 7 final PublicStorage storage = new PublicStorage("path_to_file"); // 添付ファイルの設定 content.addAttachment(new PublicStorageAttachment(storage)); // ストレージ上で別名(idなど)で保存している場合は、第二引数にファイル名を指定します。 content.addAttachment(new PublicStorageAttachment(storage, "TempFileName.pdf"));
権限情報の付与¶
1 2 3 4 5 6 7 8 9 // 認証済みユーザであれば参照可能とする権限を追加 content.addACIBuilder(new EveryoneACIBuilder()); // 特定ユーザ(青柳、円山、上田)を参照可能とする権限を追加 content.addACIBuilder(new StandardUserACIBuilder("aoyagi", "maruyama", "ueda")); // 特定ロールの保持者を参照可能とする権限を追加 content.addACIBuilder(new StandardRoleACIBuilder("im_cs_user"));
注意事項¶
コンテンツ数が増えるほど、最適化ジョブの実行時間が増加します。
検索対象として大量のテキストデータを登録した場合、一定サイズ以上のテキストが検索対象にならない場合があります。
Apache Solr にてテキストデータの最大サイズに制限をかけているため発生します。Apache Solr の設定を変更することで回避可能です。特に、大量のテキストデータを持った添付ファイルを追加したコンテンツで発生する可能性が高くなります。コンテンツの登録処理では、添付ファイルの種類およびサイズが処理時間に大きく影響します。
可能な限り、複数クローラジョブを同時実行させないでください。
登録処理が並列で実行されるため、 Apache Solr サーバのディスクI/Oが高負荷となります。分散トランザクションに対応していないため、意図しないタイミングで検索結果がユーザに公開される可能性があります。