Yokozuna日本語検索機能を
評価しました
Takashi Sogabe(@rev4t)
Yoshihisa Tanaka (@yosisa)
Internet Initiative Japan., Inc.
質問
• Riakに入れたデータ、どのように取り出してい
ますか?
– Key を直接指定
– Secondary Index
– Map/Reduce
– Riak Search
– Mohair
検索機能はとても便利
• Gmail
• Evernote
膨大な量のデータが入っていても、
すぐに検索結果が返ってくる!
しかし検索機能は実装が大変..
• 膨大な構造化がされていないデータ
– Email
– チャット
– 日記
– etc.
全文検索エンジンの運用
• Namazu, Senna, Hyper Estrayer, Lucene/Solr,
etc...
– オリジナルデータの保管方法
– リアルタイムにインデックス作っても大丈夫?
– スケールアウト簡単にできる?
Yokozuna
• https://github.com/basho/yokozuna
• Yokozuna = Riak + Solr
– Riak と Solr の良いところ取り
– Riakの運用+αで全文検索ができるようになる
– 色...
Riak Searchとの違い
• Riak Search
– 多言語への対応が弱い
• 日本語の形態素解析
– Solrの方が検索機能が充実している
• スコアリング、ファセット検索、検索結果のハイライト,
etc.
ソフトウェア構成
Node
A
Node
B
Node
C
Node
D
Solr A
Solr B
Solr C
Solr D
Bucket X
Bucket X
Bucket X
Bucket X
• 各Node(ホスト)毎に
Solrが動...
YOKOZUNA 使い方
インストール手順(0)
• Yokozuna ソースコード
– https://github.com/basho/yokozuna/blob/master/doc
s/INSTALL.md
– yokozuna-0.7 が最新版
• 必要なもの...
インストール手順(1)
$ wget http://data.riakcs.net:8080/yokozuna/riak-yokozuna-
0.7.0-src.tar.gz
$ tar zxvf riak-yokozuna-0.7.0-src...
Index作成方法
$ curl -XPUT ¥
-i http://(hostname):8098/yz/index/(indexname)
(出力結果)
HTTP/1.1 204 No Content
Server: MochiWeb/1....
Bucket->Index マッピング
$ curl -XPUT –i ¥
-H 'content-type: application/json' ¥
'http://(hostname):8098/buckets/(bucketname)/p...
オブジェクト登録のテスト
$ curl -H 'content-type: text/plain' -X PUT ¥
‘http://(hostname):8098/riak/testbucket/testkey’ ¥
-d "Ryan Zez...
Searchのテスト
$ curl ¥
'http://(hostname):8098/search/testindex?q=text:Ryan’
(出力結果)
<response>
<lst name="responseHeader"><in...
YOKOZUNA 検証結果
Yokozuna 動作検証しました
• ウィキペディア日本語版のdumpデータを
store
– 170万件、7GBのデータ
• 検証内容
– 沢山のデータを入れても問題なく動くこと
– 性能がそれなりに良いこと
• store性能
• sea...
機器構成
Gigabit Ethernet (1Gbps)
Router
The Internet
Riak Node (32台)
ベンチマークPC
兼Reverse Proxy
PRIMERGY RX200 S6
• CPU Xeon L56...
Demo
• Wikipedia query WebUI
– https://github.com/iij/yokozuna-demo
yz_extractor
• テキストの中身を解析してfield展開する
– text/plain
• yz_text_extractor
– text/json
• yz_json_extractor
– text/xml
• yz_xml_...
yz_xml_extractor
• XMLの例
<person>
<name>Ryan</name>
<age>29</age>
</person>
• Field展開後
[{<<"person_name">>, <<"Ryan">>},
{...
Solr XMLスキーマの変更
• 日本語(text_ja)として形態素解析
• 下記項目を抽出する
– <page>
– <title>
– <revision>
– <id>
– <timestamp>
– <text>
<page>
<t...
wikipedia_schema.xml
…
<field name="text" type="text_ja" indexed="true" stored="false"
multiValued="true"/>
<field name=“p...
スキーマの変更方法
$ curl -i -XPUT ¥
-H 'content-type: application/xml' ¥
-d @/tmp/wikipedia_schema.xml ¥
(hostname):8098/yz/schema...
Store性能のベンチマーク
• wikipedia-jaコンテンツ(xmlファイル)を rubyク
ライアントのプログラムを用いて全件登録
– Ruby riak-client
• https://github.com/basho/riak-...
ベンチマーク結果
ノード数 スループット(Clients per sec)
1 227.19
4 270.50
8 270.70
• ベンチマークプログラムの性能が不十分なため、riak
cluster の上限値まで達しなかった
– Erlan...
まとめ
• Yokozunaはデータをstoreするだけで全文検
索できるので便利
• 分散処理の面倒なことは全てYokozunaが引
き受けてくれるので、運用が楽にできる
Upcoming SlideShare
Loading in...5
×

Yokozuna 日本語検索機能を評価しました

3,386

Published on

Published in: Technology
0 Comments
9 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
3,386
On Slideshare
0
From Embeds
0
Number of Embeds
4
Actions
Shares
0
Downloads
13
Comments
0
Likes
9
Embeds 0
No embeds

No notes for slide

Yokozuna 日本語検索機能を評価しました

  1. 1. Yokozuna日本語検索機能を 評価しました Takashi Sogabe(@rev4t) Yoshihisa Tanaka (@yosisa) Internet Initiative Japan., Inc.
  2. 2. 質問 • Riakに入れたデータ、どのように取り出してい ますか? – Key を直接指定 – Secondary Index – Map/Reduce – Riak Search – Mohair
  3. 3. 検索機能はとても便利 • Gmail • Evernote 膨大な量のデータが入っていても、 すぐに検索結果が返ってくる!
  4. 4. しかし検索機能は実装が大変.. • 膨大な構造化がされていないデータ – Email – チャット – 日記 – etc.
  5. 5. 全文検索エンジンの運用 • Namazu, Senna, Hyper Estrayer, Lucene/Solr, etc... – オリジナルデータの保管方法 – リアルタイムにインデックス作っても大丈夫? – スケールアウト簡単にできる?
  6. 6. Yokozuna • https://github.com/basho/yokozuna • Yokozuna = Riak + Solr – Riak と Solr の良いところ取り – Riakの運用+αで全文検索ができるようになる – 色々考えなくても簡単にスケールアウトする – Solrと同じQueryが使える
  7. 7. Riak Searchとの違い • Riak Search – 多言語への対応が弱い • 日本語の形態素解析 – Solrの方が検索機能が充実している • スコアリング、ファセット検索、検索結果のハイライト, etc.
  8. 8. ソフトウェア構成 Node A Node B Node C Node D Solr A Solr B Solr C Solr D Bucket X Bucket X Bucket X Bucket X • 各Node(ホスト)毎に Solrが動作している • Objectをstoreする際 に、各Node上のSolr にindexが作成される • Search時は自動的に Distributed Searchが 実行される Store: Riak API Search: Solr API
  9. 9. YOKOZUNA 使い方
  10. 10. インストール手順(0) • Yokozuna ソースコード – https://github.com/basho/yokozuna/blob/master/doc s/INSTALL.md – yokozuna-0.7 が最新版 • 必要なもの – Erlang R15B02 or higher – JRE 1.6 or later (jarコマンドが必要) – GNU make – GCC(C/C++)
  11. 11. インストール手順(1) $ wget http://data.riakcs.net:8080/yokozuna/riak-yokozuna- 0.7.0-src.tar.gz $ tar zxvf riak-yokozuna-0.7.0-src.tar.gz $ cd riak-yokozuna-0.7.0-src $ make rel $ sed -e '/{yokozuna,/,/]}/{s/{enabled, false}/{enabled, true}/;}' -i.back rel/riak/etc/app.config $ ulimit –n 4096 $ rel/riak/bin/riak start
  12. 12. Index作成方法 $ curl -XPUT ¥ -i http://(hostname):8098/yz/index/(indexname) (出力結果) HTTP/1.1 204 No Content Server: MochiWeb/1.1 WebMachine/1.9.2 (someone had painted it blue) Date: Tue, 04 Jun 2013 07:34:13 GMT Content-Type: application/json Content-Length: 0 • hostname – Riakの動作しているホスト名 • Indexname – 任意の文字列
  13. 13. Bucket->Index マッピング $ curl -XPUT –i ¥ -H 'content-type: application/json' ¥ 'http://(hostname):8098/buckets/(bucketname)/props' ¥ -d '{"props":{"yz_index":"(indexname)"}}‘ • 任意のBucketを全文検索の対象にする – オブジェクトをstoreする度にSolrインデックスが作成される ようになる
  14. 14. オブジェクト登録のテスト $ curl -H 'content-type: text/plain' -X PUT ¥ ‘http://(hostname):8098/riak/testbucket/testkey’ ¥ -d "Ryan Zezeski" • Bucket “testbucket”, Key “testkey” にて テキス ト ”Ryan Zezeski” をPUTする
  15. 15. Searchのテスト $ curl ¥ 'http://(hostname):8098/search/testindex?q=text:Ryan’ (出力結果) <response> <lst name="responseHeader"><int name="status">0</int><int name="QTime">47</int><lst name="params"><str name="shards">10.0.2.11:8093/solr/testindex</str><str name="q">text:Ryan</str><str name="fq">(_yz_node:riak@10.0.2.11 AND ((_yz_pn:62 AND (_yz_fpn:62)) OR _yz_pn:61 OR _yz_pn:58 OR _yz_pn:55 OR _yz_pn:52 OR _yz_pn:49 OR _yz_pn:46 OR _yz_pn:43 OR _yz_pn:40 OR _yz_pn:37 OR _yz_pn:34 OR _yz_pn:31 OR _yz_pn:28 OR _yz_pn:25 OR _yz_pn:22 OR _yz_pn:19 OR _yz_pn:16 OR _yz_pn:13 OR _yz_pn:10 OR _yz_pn:7 OR _yz_pn:4 OR _yz_pn:1))</str></lst></lst><result name="response" numFound="1" start="0" maxScore="0.4451987"><doc><str name="_yz_id">testkey_19</str><str name="_yz_ed">20130709T015823 19 testbucket testkey g2IFn+UN</str><str name="_yz_fpn">17</str><str name="_yz_node">riak@10.0.2.11</str><str name="_yz_pn">19</str><str name="_yz_rk">testkey</str><str name="_yz_rb">testbucket</str></doc></result> </response>
  16. 16. YOKOZUNA 検証結果
  17. 17. Yokozuna 動作検証しました • ウィキペディア日本語版のdumpデータを store – 170万件、7GBのデータ • 検証内容 – 沢山のデータを入れても問題なく動くこと – 性能がそれなりに良いこと • store性能 • search性能は、今回は除外
  18. 18. 機器構成 Gigabit Ethernet (1Gbps) Router The Internet Riak Node (32台) ベンチマークPC 兼Reverse Proxy PRIMERGY RX200 S6 • CPU Xeon L5630 @2.13GHz • Memory 24GB • HDD hwRAID5(1TB SATA x8)
  19. 19. Demo • Wikipedia query WebUI – https://github.com/iij/yokozuna-demo
  20. 20. yz_extractor • テキストの中身を解析してfield展開する – text/plain • yz_text_extractor – text/json • yz_json_extractor – text/xml • yz_xml_extractor
  21. 21. yz_xml_extractor • XMLの例 <person> <name>Ryan</name> <age>29</age> </person> • Field展開後 [{<<"person_name">>, <<"Ryan">>}, {<<"person_age">>, <<"29">>}]
  22. 22. Solr XMLスキーマの変更 • 日本語(text_ja)として形態素解析 • 下記項目を抽出する – <page> – <title> – <revision> – <id> – <timestamp> – <text> <page> <title>言語</title> <ns>0</ns> <id>10</id> <revision> <id>47989880</id> <parentid>47989854</parentid> <timestamp>2013-05-29T08:46:04Z</timestamp> <contributor> <ip>219.116.251.28</ip> </contributor> <comment>/* 各国の国語・公用語 */</comment> <text xml:space="preserve">{{出典の明記|date=2009年5月}} … </text> </revision> </page>
  23. 23. wikipedia_schema.xml … <field name="text" type="text_ja" indexed="true" stored="false" multiValued="true"/> <field name=“page_title" type="text_ja" indexed="true" stored="false" multiValued="false"/> <field name=“page_id" type="int" indexed="true" stored="false" multiValued="false"/> <field name=“page_revision_timestamp" type="date" indexed="true" stored="false" multiValued="false"/> <field name=“page_revision_text" type="text_ja" indexed="true" stored="false" multiValued="false"/> …
  24. 24. スキーマの変更方法 $ curl -i -XPUT ¥ -H 'content-type: application/xml' ¥ -d @/tmp/wikipedia_schema.xml ¥ (hostname):8098/yz/schema/wikipedia $ curl -i -XPUT ¥ -H 'content-type: application/json' ¥ -d '{"schema": "wikipedia"}' ¥ (hostname):8098/yz/index/wikipedia • “/tmp/wikipedia_schema.xml” をインデックス 名”wikipedia”のスキーマとして登録する
  25. 25. Store性能のベンチマーク • wikipedia-jaコンテンツ(xmlファイル)を rubyク ライアントのプログラムを用いて全件登録 – Ruby riak-client • https://github.com/basho/riak-ruby-client/tree/master/lib/riak – wikipedia-yz • https://github.com/iij/wikipedia-yz
  26. 26. ベンチマーク結果 ノード数 スループット(Clients per sec) 1 227.19 4 270.50 8 270.70 • ベンチマークプログラムの性能が不十分なため、riak cluster の上限値まで達しなかった – Erlang(riakc_pb_socket)版を作る、または basho_bench のドライ バとして実装すると高スループット出せそう – Rubyでさらに高速化する場合は eventmachine , rev あたりが使 えそうだけれど、protocol bufferに対応していないのが残念 – Solr の負荷は概ね5-10%程度
  27. 27. まとめ • Yokozunaはデータをstoreするだけで全文検 索できるので便利 • 分散処理の面倒なことは全てYokozunaが引 き受けてくれるので、運用が楽にできる
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×