*

Search API詳細解説 Part4「Search API 詳細 検索性能編」

公開日: : 最終更新日:2015/04/17 投稿者: GAE

Search API詳細解説シリーズ

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

みなさん、こんにちは。
前回のSearch API詳細解説 Part3「Search APIの使い方 検索編」までで、Search APIの実装方法については理解できたのではないかと思います。
もしまだお読みで無い方は本編はある程度前提にしてますので、是非第一回から……
今回からは、Search APIの性能について検証していきたいと思います。

性能を検証する最初の機能は、『検索』です。
Search APIのFieldTypeは全部で6つありますが、今回検証するのはFieldType.TEXTに関する検索性能を調べてみましょう。

まず、FieldType.TEXTはプレーンテキストとしてデータを保持しますが、単語単位で検索が可能なフィールドになっています。
ですが、『単語単位』というのは曖昧です。
明確に単語単位のロジックが文書化されているわけではありませんので、実際にいろいろと検索してみて検索可能な基準を見つけたいと思います。

検索性能を調べるためのデータを用意する

検索対象Documentは以下のようになっています。

Document ID textField 備考
1 t 半角英字。一文字。
2 test tarou 半角英字。半角スペース有り。
3 test tarou 半角英字。全角スペース有り。
4 test_tarou 半角英字。アンダースコア有り。
5 test-tarou 半角英字。ハイフン有り。
6 testtarou 半角英字。
7 testTarou 半角英字。
8 test@example.co.jp 半角英字。一般的なメールアドレス形式。
9 1 半角数字。一文字
10 10000 半角数字。
11 10,000 半角数字。カンマ区切り形式。
12 10000 全角数字。
13 test10000 半角英字数字。
14 test 10000 半角英字数字。
15 半角カナ。一文字
16 テスト太郎 半角カナ・全角漢字。
17 テストタロウ 半角カナ。
18 全角カナ。一文字
19 テスト太郎 全角カナ漢字。
20 テスト 太郎 全角カナ漢字。半角スペース有り。
21 テスト 太郎 全角カナ漢字。全角スペース有り。
22 全角漢字。一文字
23 佐藤太郎 全角漢字。
24 てすとたろう 全角かな。
25 test tarou 全角英字。

DocumentはFieldType.TEXTのフィールド、textFieldを一つ持っているだけのデータです。
半角・全角の英字・数字・カナ、全角の英字・数字・かな・漢字、よく見かける記号(@やハイフン)が設定されているデータです。

 

 検索してみた

全部で31パターンの検索条件を試してみました。
結果は以下の表になっています。

パターン 検索条件 検索結果件数 検索結果のFieldの値
1 textField=t 1 t
2 textField=te 0
3 textField=tes 0
4 textField=test 6 test tarou
test tarou
test-tarou
test@example.co.jp
test 10000
test tarou
5 textField=tarou 4 test tarou
test tarou
test-tarou
test tarou
6 textField=Tarou 4 test tarou
test tarou
test-tarou
test tarou
7 textField=TAROU 4 test tarou
test tarou
test-tarou
test tarou
8 textField=T 1 t
9 textField=st ta 0
10 textField=co 1 test@example.co.jp
11 textField=co.jp 1 test@example.co.jp
12 textField=. Index内にある全Document(25件)
13 textField=@
14 textField=- SearchQueryException発生。
Unable to parse query.
15 textField=,
16 textField=_ 0
17 textField=1 1 1
18 textField=10 0
19 textField=10, SearchQueryException発生。
Unable to parse query.
20 textField=10,0
21 textField=10,000
22 textField=10000 4 test 10000
10,000
10000
10000
23 textField=10000 4 test 10000
10,000
10000
10000
24 textField=テ 2
25 textField=テスト 5 テストタロウ
テスト太郎
テスト太郎
テスト 太郎
テスト 太郎
26 textField=ストタロ 0
27 textField=太郎 5 テスト太郎
テスト太郎
テスト 太郎
テスト 太郎
佐藤太郎
28 textField=太 1
29 textField=ト太 0
30 textField=てすと 1 てすとたろう
31 textField=佐藤 1 佐藤太郎

31パターンをざっと見ただけでも、検索に引っかかる、引っかからないの傾向がだいぶ分かるかと思います。
半角・全角スペース、ハイフン(-)、ピリオド(.)で区切った前後の文字列は文字の種類を問わず、単語として認識されているようですね。(パターン4,5,6,7,10,11,23,24,26,28)
英字の場合は、区切りが明確でなければ単語扱いされないようですが、漢字・ひらがな・カタカナの場合は区切り文字が無くともちゃんと単語を認識しているようです。(パターン26,28)
検証結果を見る限り、Search APIのFieldType.TEXTのデータに対しての検索については、半角や全角、大文字・小文字はあまり関係無いようですね。(パターン4,5,6,7,8,23,24,25,26,28)
パターン14や15のように、ハイフン(-)やカンマ(,)を検索条件にしてしまうと、Exceptionを投げるのは驚きでした。(エスケープしてあげないとダメ?)
また、記号の話で言えば、パターン12,13の場合は、Index内の全てのDocumentが返って来てしまったので、記号を検索条件にする場合は少し注意が必要ですね。
これらのルールは恐らくGoogleのその他の検索部分(Documentの検索やメールの検索等)でも同じように動作してそうです。

今回の性能検証はここまでです。
次回はSearch APIのDocumentの登録・削除をした時の応答速度・Indexへの反映遅延について、検証してみます。

Search API詳細解説シリーズ

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

関連記事

GAEでよくあるエラーの発生原因と対策1

GAE上で動くWebアプリケーションに特有の例外について、弊社での運用の事例からいくつか特徴的なもの

記事を読む

PaaS最前線!たったの15分でできるGAE/GO入門!

はじめに 2015年7月ついにGoogle App EngineのGO言語正式サポートが決定しまし

記事を読む

GAE/GOでTwitter Botを作ってみる~前編~

TwitterやFacebookのような有名サービスと連携したアプリを開発する場合、開発者は

記事を読む

Google App EngineからのSpreadSheetの権限変更について

Google App Engine(以下GAE)からGoogleDocsのSpreadSheetを操

記事を読む

Google App Engine Modules のScalingを試す

みなさんこんにちは。 前回の記事では、GAE Modulesの簡単なサンプルを配備し、動作を確

記事を読む

Datastoreの仕組み ~Consistencyについて~

はじめに スケーラビリティと可用性が高いと言われているGoogle Cloud Datastore

記事を読む

Google App Engine Modules in Javaを試す WebToolsPlatform編

みなさんこんにちは。 2013年の7月に、Google App Engine1.8.2がリリー

記事を読む

GAEのautomatic scalingとbasic scalingを徹底比較!!

Google App Engine(以下GAE)(※1)は、GCPユーザならば言わずと知れた

記事を読む

GAリリース記念!!今更だけどGAE Flexible Environmentのチュートリアルを試してみた!

GAE Flexible Environment(以下FE)のGA(General Availa

記事を読む

15分でできる!!GAE/GOで高速REST APIを構築するための簡単手順 〜前編〜

iOSやAndroid等のクライアントアプリを開発する場合、サーバ側の開発も必要となるケースは多

記事を読む

PAGE TOP ↑