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

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

ご注意

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

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 詳細 限界値編
  • このエントリーをはてなブックマークに追加

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

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