Search API詳細解説 Part6「Search API 詳細 限界値編」

  • このエントリーをはてなブックマークに追加

ご注意

この記事は 2015年4月20日 に書かれたものです。内容が古い可能性がありますのでご注意ください。

みなさん、こんにちは。
前回はSearch APIの反映速度について調べてみましたが、いかがだったでしょうか?
今回でSearch API詳細解説のPart6を迎え、このシリーズは最終回となります。
最終回の今回はSearch APIの「限界値」を調べてみます。

タイトル
Part1 Search API 概要説明
Part2 Search APIの使い方 登録・削除編
Part3 Search APIの使い方 検索編
Part4 Search API 詳細 検索性能編
Part5 Search API 詳細 反映速度編
Part6 Search API 詳細 限界値編(このページです)

 

1MB制限を検証してみる

それでは、早速1 Documentの容量の限界である1MBについて調べます。
※文字列のbyteサイズを調べるときのエンコードは「UTF-8」です。

まずは、テキストフィールドに保存するデータのサイズとしては問題のないデータを登録してみます。
フィールド名「field1」という名前のテキストフィールドに半角文字「a」を1,048,575文字を登録してみましょう。
サイズは1,048,575byteなので問題はないはずです。

フィールド名 備考
ID 1 Document ID
field1 aaaaaaa………………….aaaaaaaaaa フィールド名文字数:
6文字
フィールド値文字数:
1,048,575文字

※登録Documentの構造
Documentの登録結果はput時に次のエラーが出ました。

java.lang.IllegalArgumentException: Document length 1048609 is greater than the maximum 1048576 bytes

1 Documentのサイズが1,048,576 byteを超えていると怒られてますね。
エラーの文面を見ると、Documentのput時のサイズが1,048,609 byteになっているようです。
フィールド値のサイズよりも34 byte大きくなっていますね。
フィールド値のサイズだけであれば、1,048,575 byteのはずですので、ギリギリ1MBは超えないはずです。
フィールドの値以外の何かが加算されているようですね。

 

試しにフィールド名「field1」を「F」に変更して、再度登録してみましょう。

フィールド名 備考
ID 1 Document ID
F aaaaaaa………………….aaaaaaaaaa フィールド名文字数:
6文字
フィールド値文字数:
1,048,575文字

※再登録Documentの構造

再度登録してみると、次のエラーが出ました。

java.lang.IllegalArgumentException: Document length 1048604 is greater than the maximum 1048576 bytes

エラーの内容は同じですが、putしたDocumentのサイズが先程より5 byte小さくなっていますね。
フィールドの値は変えていませんので、フィールド名「field1」から「F」に変更した半角5文字分が純粋に減っているようです。

Documentサイズ比較表

パターン Documentサイズ(byte)
フィールド名「field1」の場合 1,048,609
フィールド名「F」の場合 1,048,604

 

この結果を見る限り、フィールド名もDocumentのサイズに含まれているようですね。
推測ですが、フィールド名だけでなく、おそらく各フィールドのFieldTypeやLocaleの値などの文字列もサイズにカウントされていると思われます。

※半角文字「a」を1,048,577文字を設定すると、Fieldに値を設定する時に次のエラーが出ます。

java.lang.IllegalArgumentException: Field text longer than maximum length 1048576

1フィールド10KBのフィールドをいくつまで持てるのか、検証してみる。
次は、1フィールドに10KBのテキストフィールドをいくつまで持てるのか、試してみましょう。
10KBは、半角文字に換算して10240文字。1フィールドに持つには十分な検索フィールドだと思います。
設定値のサイズだけで計算しますのと、1 Documentに102フィールドは持てるかと思います。
Documentのフィールドは下記のようになるかと思います。

フィールド名 ID field1 field2 ……….. field101

field102

1 aaa…aa aaa…aa ……….. aaa…aa

aaa…aa

?※値の「aaa…aa」は各フィールド10240文字入っています。

結果は、102フィールドまで持てました。予想と同じでしたね。
103フィールドを登録すると、

java.lang.IllegalArgumentException: Document length 1056787 is greater than the maximum 1048576 bytes

と、1MB制限を超えたと怒れますので、1フィールド10KBのフィールドでしたら、102フィールドまで持つことができるということがわかりました。

今回でSearch API詳細解説は最終回となります。
全6回のシリーズでしたが、いかがだったでしょうか?
シリーズとしてはこれで終わりですが、今後は読んでくださった方の要望や依頼を取り入れて、不定期でも調査して、この場で公開したいと思いますので、ご意見いただければと思います。

読んでいただきありがとうございました。

Search API詳細解説シリーズ

タイトル
Part1 Search API 概要説明
Part2 Search APIの使い方 登録・削除編
Part3 Search APIの使い方 検索編
Part4 Search API 詳細 検索性能編
Part5 Search API 詳細 反映速度編
Part6 Search API 詳細 限界値編(このページです)
  • このエントリーをはてなブックマークに追加

Google のクラウドサービスについてもっと詳しく知りたい、直接話が聞いてみたいという方のために、クラウドエースでは無料相談会を実施しております。お申し込みは下記ボタンより承っておりますので、この機会にぜひ弊社をご利用いただければと思います。

無料相談会のお申込みはこちら