みなさん、こんにちは。
前回は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
エラーの文面を見ると、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
フィールドの値は変えていませんので、フィールド名「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のテキストフィールドをいくつまで持てるのか、試してみましょう。
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
今回でSearch API詳細解説は最終回となります。
全6回のシリーズでしたが、いかがだったでしょうか?
シリーズとしてはこれで終わりですが、今後は読んでくださった方の要望や依頼を取り入れて、不定期でも調査して、この場で公開したいと思いますので、ご意見いただければと思います。
読んでいただきありがとうございました。
Search API詳細解説シリーズ
タイトル | |
Part1 | Search API 概要説明 |
Part2 | Search APIの使い方 登録・削除編 |
Part3 | Search APIの使い方 検索編 |
Part4 | Search API 詳細 検索性能編 |
Part5 | Search API 詳細 反映速度編 |
Part6 | Search API 詳細 限界値編(このページです) |