Weitere ähnliche Inhalte
Ähnlich wie 全文検索In着うた配信サービス
Ähnlich wie 全文検索In着うた配信サービス (20)
Mehr von techtalkdwango (15)
全文検索In着うた配信サービス
- 2. 自己紹介
中村智将(なかむらともゆき)
新卒入社2年目
twitter: nakamuu
経歴
研修でモバイルサイト検索サービス
社内バグトラッキングシステムの検索機能改造
今ここ→モバイルサイト検索機能担当
2
- 6. 多くのユーザを獲得するために
様々な検索条件
楽曲
アーティスト
キーワード
ドラマ番組名
検索
種類(着メロ,着うた,うたフル)
試聴可能 配信サイト
高速なレスポンス
配信開始日 着うた
etc... ページ表示1秒
6
- 9. 例えばこんな条件で検索させたい
楽曲配信中の番組を検索 10月火曜21時ドラマ
『フリーター、家を買う。』
dwango.jpで主題歌配信中
確かあのドラマで
流れてた曲を探したい
ユーザ入力
番組 フリーター 検索
システム入力
• 配信しているサイト「dwango.jpフル」
• 素材のジャンル「着うたフル」
9
- 10. 従来の実装
前提 システム全体でMySQLを使っている
通常の文字列検索 LIKE検索 は遅い
MySQL 全文検索 は機能不足
MySQL+独自のParser Plugin
10
- 15. 例えばこんな条件で検索させたい
楽曲配信中の番組を検索 10月火曜21時ドラマ
『フリーター、家を買う。』
dwango.jpで主題歌配信中
確かあのドラマで
通常のキーワード 流れてた曲を探したい
番組 フリーター 検索
擬似キーワード
• 配信しているサイト「site100」
• 素材のジャンル「genre20」
15
- 18. 同時に複数の条件を指定
楽曲 アーティスト ドラマ番組名 配信サイト
キーワード 配信開始日 試聴可能 etc...
実行時間 個数に比例して遅くなる
5個程度で数秒かかる
場合もある
条件組み合わせ個数 18
- 23. 必要な機能を持つエンジン
• 配信日の比較(数値比較)が可能
• MySQLのGROUP BY相当の機能
数値比較が遅い GROUP BYができない
MySQLに組み込んで使える 23
- 24. インデック
2-gram, space 1-gram, space
ス方式
任意の
数値絞込み 任意の1カラム
複数カラム
数値絞込みの
GROUP BY 任意のカラム
カラム
運用事例
24
- 27. 番組検索テーブル
レコード数: 142万件
サイズ: 340MB
ID 番組名 楽曲ID 素材 配信サイト 作成日
ジャンル 一覧
1 さよなら、 3 1 s1 s2 s10 2010/10/10
僕らの夏
2 I AM SAM 5 3 s3 s4 s5 2010/09/01
... ... ... ...
着うたを配信しているサイト一覧
(擬似キーワード)
27
- 29. 実験結果(1/4) – 基本速度
検索条件 番組名に”さよなら”を含む
ヒット件数 1046件
fast slow
0.01未満
0.03
2.73
0.0 0.1 0.2 0.3 [sec] 29
- 30. 実験結果(2/4) – OR検索
検索条件 サイト1,2,3,4,5,6,7のいずれかで配信している
ヒット件数 806,126件
fast slow
4.60
0.23
0.0 2.0 4.0 6.0 [sec]
30
- 31. 実験結果(3/4) – 組み合わせ
番組名に”さよなら”を含み、かつ
検索条件 サイト1,2,3,4,5,6,7のいずれかで配信している
ヒット件数 151件
fast slow
2.61
0.13
0.0 2.0 4.0 6.0 [sec]
31
- 32. 実験結果(4/4) – 実際のパターン
着(メロ,うた,ボイス)のいずれかが、
検索条件 サイト1,2,3,4,5,6,7のいずれかで配信している
結果をidでGROUP BYして日付で昇順ソート
ヒット件数 14,429件
fast slow
5.50
0.26
0.0 2.0 4.0 6.0 [sec]
32
- 40. インデックス参照の流れ
(
擬
似 辞書 ドキュメント ヒット位置
)
キ
ー
ワ
ー
ド ①キーワードがヒットするIDを見つける
属
性
イ
ン 属性
デ
ッ
ク
ス ②属性インデックスでIDをさらに絞り込む 40
- 48. Sphinx参考資料
公式サイト
http://sphinxsearch.com/
実践ハイパフォーマンスMySQL第2版 付録
現状、日本語でまとまった資料はこれだけ
Sphinxソースコード
読まないとわからないことが多い
48