Contenu connexe
Similaire à 20120126 mnlgy 1
Similaire à 20120126 mnlgy 1 (20)
Plus de takaoka susumu (12)
20120126 mnlgy 1
- 3. ECサイトにおける検索について
本日は弊社が提供するECサイト「CROOZMALL」
に関する検索システムに対する取り組みを紹介し
ます。
© CROOZ,Inc.
3
- 4. ECサイトにおける検索について
企業(経営)におけるECサイトに期待することは 「買ってもらうこと」
ECサイトにおける検索の役割は買ってもらうための 「確率を上げること」
ユーザが欲しいと思うパラメータ
(1)もう欲しい商品があるレベル(狙い撃ち)
→ 商品名を蓄積する(ECサイトの場合取扱商品自作)
(2)よく聞く商品、流行っているもの、日常的消耗品など
→ 販売実績、検索などの各要素からランキング生成
(3)ソーシャルで繋がっている人が入手したもの(かつ、自分の趣向に合う)
→ 難しいけどCROOZならブログなどと連携できる!
(4)勧められれば見るレベル
→ MyPageの登録や購入履歴、おねだり系の機能。
(5)気が付いていない気になる商品
→ 店舗で気の合う店員さんと雑談してたら購入してた・・・を実現するレベル。
© CROOZ,Inc.
4
- 5. ECサイトにおける検索について
ECサイトにおける
(1)欲しい商品があるレベル(狙い撃ち) を、効率よく蓄積、検索する方法
ユーザの気持ちを考えると、、、
欲しいと思うものは大抵イメージ。 イメージが固まっているものが欲しい商品。
だからといって正しい名前で検索されるとは限らない。
ユーザ入力文字
ショップ登録文字
クリスタルガイザー 店舗A: クリスタルガイザー
クリスタルガイザー 店舗B: 【特価】クリスタルガイザー
crystal geyser 店舗C: クリスタル ガイザー【アウトレット】
CRYSTAL GEYSER 店舗D: わけあり★crystal geyser
ミネラルウオーター 店舗E: セール:CRYSTAL GEYSER
水 :
:
その他、類似、typo多数
その他、類似、typo多数
全文×全文 検索のほんの1商品の例。 さすがにこれはキツイ。
© CROOZ,Inc.
5
- 6. ECサイトにおける検索について
【現状】
商品数が増えるのと同時にサーバ負荷が高まる。
専任検索エンジニアが不在の場合、身動きが取れなくなる・・・・・。
© CROOZ,Inc.
6
- 7. MySQL 5.1.x
MyISAM
MeCab insert
Master
店舗様
select Slave
ユーザ
価格順
人気順
新着順
・・・・・
裏では毎時間バッチを利用して、「価格順」、「人気順」など
数パターンのソートデータを作成して実態の入れ替えを行っている
© CROOZ,Inc.
7
- 8. 【今後】検索から分析、マーケティングへ・・・。
① ブログ検索も対象範囲を広げ、全文化へ・・・・。
Aさん
ツケマ14.5mmの購入日記投稿
ブログタイトル
記事タイトル
内容
Aの日記
ツケマ14.5mm
買った・・・
where ~ like ‘keyword%’
月間アクティブ約700万人のサイト。 投稿内容も流行に敏感であり、投稿内
容、検索ワードは貴重なデータであるため、対応は急務。
© CROOZ,Inc.
8
- 9. 【今後】検索から分析、マーケティングへ・・・。
Aさん
ツケマ14.5mmの購入日記投稿
ブログタイトル
記事タイトル
内容
Aの日記
ツケマ14.5mm
買った・・・
Bさん
ツケマ14.5mmについ
て検索
ツケマ14.5mm
where ~ like ‘keyword%’
記事タイトルや内容にまで検索が入っていないため結果は「なし」
© CROOZ,Inc.
9
- 10. 【今後】検索×分析×マーケティング×ソーシャル = CROOZ
CROOZが考えるユーザを幸せにするシステム(未承認)
意思検索 → マイニング → サービス横断検索 → 最適結果
大切な人がおねだりしています
商品の注目度、ちょっとしたレビュー
繋がりへの近況update
お友達はこんなの買ってます
「購入履歴」から「お勧め、注目コーデ」
「買う」までの遷移を楽しく!
ファセット型ナビの導入
※画像はamazonさんより
流行情報は生もの。 データマイニングから価値ある商品を推薦し続ける!
© CROOZ,Inc.
10
- 11. 【今後の妄想】検索から分析、マーケティングへ・・・。
問い合わせ
where ~ like ‘keyword%’
ある・なし
非同期insert
ある=注目など・・
ナレッジ 熟成
DB なし=重点営業
DB
非同期insert
問い合わせ
参照DB
ある・なし
© CROOZ,Inc.
11
- 12. 【今後の妄想】検索から分析、マーケティングへ・・・。
結果あり アクション
検索実行
結果
(完全一致)
(購入導線)
結果なし
結果なし
結果
(効果の高い)
(部分一致)
近似結果
結果
(不一致)
不一致 but
あれば売れる
加盟店舗への
情報提供
(マーケ活用)
© CROOZ,Inc.
12
- 13. 【今後】検索から分析、マーケティングへ・・・。
① ブログ検索も対象範囲を広げ、全文化へ・・・・。
② ブログ検索ワードを非同期で蓄積。 商品文言を抜き出
し、モールなど相互流入活用
① 商品検索ワードを非同期で蓄積。 注目やランキングな
どのデータ作成や、注目度が高いのに、そもそも商品がな
い場合など、店舗様へのマーケに活用。
② PCサイト対応。 ファセットなどを導入する!
現在のインフラ、アプリ実装では不安・・・そこで。
© CROOZ,Inc.
13
- 14. 検証「やってみた」
Key
目的: 現状のパフォーマンスの問題点、今後増えるデータ量と、検索そのもの
Message
に対する対応案から、現状のMyISAMから、より汎用性を持たせておくこと。
できればMeCabからも離れることはできないか?
<今回の検証候補>
Tritonn → MyISAMの呪縛あり。
MySQL5.6.4(Development relace) → まだ早そう
Tokyo Cabinet , Tokyo Dystopia → また今度?
Groongaストレージエンジン → ★
Groongaストレージエンジン
弊社既存バージョンが5.1.x系で、ここにGroongaストレージエンジンを
追加しようとしたが、色々あって時間切れ。
更地にMySQL5.5系を導入してGroongaを導入。 これなら簡単。
© CROOZ,Inc.
14
- 15. 検証「やってみた」
Key たったこれだけ
Message
rpm -ivh http://packages.groonga.org/centos/groonga-repository-1.0.0-0.noarch.rpm
yum update
yum -y install MySQL-client
yum -y install MySQL-devel
yum -y install MySQL-embedded
yum -y install MySQL-server
yum -y install MySQL-shared
yum -y install MySQL-test
yum install -y groonga groonga-tokenizer-mecab groonga-devel
yum -y install mysql-groonga
mysql -u root
mysql> INSTALL PLUGIN groonga SONAME 'ha_groonga.so';
mysql> CREATE FUNCTION last_insert_grn_id RETURNS INTEGER soname 'ha_groonga.so';
mysql> SHOW ENGINES;
my.cnf もなにも作らずに完成。
mysql>
SHOW
ENGINES;
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
|
Engine
|
Support
|
Comment
|
Transactions
|
XA
|
Savepoints
|
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
|
InnoDB
|
DEFAULT
|
Supports
transactions,
row-level
locking,
and
foreign
keys
|
YES
|
YES
|
YES
|
|
CSV
|
YES
|
CSV
storage
engine
|
NO
|
NO
|
NO
|
|
MyISAM
|
YES
|
MyISAM
storage
engine
|
NO
|
NO
|
NO
|
|
BLACKHOLE
|
YES
|
/dev/null
storage
engine
(anything
you
write
to
it
disappears)
|
NO
|
NO
|
NO
|
|
MRG_MYISAM
|
YES
|
Collection
of
identical
MyISAM
tables
|
NO
|
NO
|
NO
|
|
MEMORY
|
YES
|
Hash
based,
stored
in
memory,
useful
for
temporary
tables
|
NO
|
NO
|
NO
|
|
groonga
|
YES
|
CJK-ready
fulltext
search,
column
store
|
NO
|
NO
|
NO
|
|
PERFORMANCE_SCHEMA
|
YES
|
Performance
Schema
|
NO
|
NO
|
NO
|
|
FEDERATED
|
NO
|
Federated
MySQL
storage
engine
|
NULL
|
NULL
|
NULL
|
|
ARCHIVE
|
YES
|
Archive
storage
engine
|
NO
|
NO
|
NO
|
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
10
rows
in
set
(0.00
sec)
© CROOZ,Inc.
15
- 16. 検証「やってみた」
ベンチマークとるためのデータではなく、弊社クルーズ
Key
Message
モールの本番データの一部を利用!
OSはCent5系。MySQL(5.5.x)をはじめ、各コンフィグ、
チューニングは行っていない状態での検証です。
ハードは
CPU : X5670 @ 2.93GHz × 1 (12コア)
Disk : SSD
なんと、現行本番環境より検証環境のほうが高スペック
だったのは内緒。
© CROOZ,Inc.
16
- 17. 検証「やってみた」
Key
Message
データ(約38万件) サイズ(約128MB)
単独INSERT MyISAM groonga
real 2m22.907s 1m33.408s
user 0m9.024s 0m7.599s
sys 0m3.334s 0m2.867s
SELECTしながら MyISAM groonga
INSERT (ロックせず実施)
real 2m19.093s 5m46.734s
user 0m7.131s 0m8.161s
sys 0m4.027s 0m4.856s
© CROOZ,Inc.
17
- 18. 検証「やってみた」
MyISAM(ロックせず検証) groonga
SELECT INSERT SELECT INSERT
(回/秒) (回/秒) (回/秒) (回/秒)
30~ 60万件 2714 4135
(INSERTのみ)
60~ 90万件 2341 3710
(INSERTのみ)
90~120万件 2276 3533
(INSERTのみ)
120万件(SELECT 610 208
のみ)
120~150万件 123 2156 175 746
(SELECT+INSERT)
150万件(SELECT 509 180
のみ)
150~180万件 96 2019 168 667
(SELECT+INSERT
中)
180万件(SELECT 406 165
のみ)
© CROOZ,Inc.
18
- 19. 検証「やってみた」
Key
Message
MyISAM側の検証でテーブルロックを実施してから
のパフォーマンス計測は間に合わず。。。
Insertは何もしなくても早い。 これだけで本番に
適用する価値はありそう。
ただ、groongaには参照も頑張ってもらいたい。
テーブル設計やミドルウエアチューニングで何とか
なるのであれば、是非実施したい。
大幅なハード投資が無くても、現在の10倍くらいの
データに耐えうるシステムを目指したい。
© CROOZ,Inc.
19
- 20. 検証「やってみたい」
Key
Message
MeCabの存在
今回、MeCabからの脱却も目指しているのです
が、そもそもMeCabに任せている要件、それを
他で補えるのか? などについて整理している
最中でして、検証は次の機会に。。。
© CROOZ,Inc.
20
- 21. さいごに・・・・
Key
Message
CROOZでは技術者を募集しております。
詳細は弊社社員までご気軽に
ご相談ください。
© CROOZ,Inc.
21