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 詳細 限界値編 |