• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Yokozuna 日本語検索機能を評価しました
 

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

on

  • 3,370 views

 

Statistics

Views

Total Views
3,370
Views on SlideShare
2,752
Embed Views
618

Actions

Likes
7
Downloads
11
Comments
0

4 Embeds 618

http://9renpoto.github.io 339
http://localhost 221
https://twitter.com 56
http://s.deeeki.com 2

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

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

    • 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の運用+αで全文検索ができるようになる – 色々考えなくても簡単にスケールアウトする – Solrと同じQueryが使える
    • 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が動作している • Objectをstoreする際 に、各Node上のSolr にindexが作成される • Search時は自動的に Distributed Searchが 実行される Store: Riak API Search: Solr API
    • YOKOZUNA 使い方
    • インストール手順(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++)
    • インストール手順(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
    • 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 – 任意の文字列
    • Bucket->Index マッピング $ curl -XPUT –i ¥ -H 'content-type: application/json' ¥ 'http://(hostname):8098/buckets/(bucketname)/props' ¥ -d '{"props":{"yz_index":"(indexname)"}}‘ • 任意のBucketを全文検索の対象にする – オブジェクトをstoreする度にSolrインデックスが作成される ようになる
    • オブジェクト登録のテスト $ curl -H 'content-type: text/plain' -X PUT ¥ ‘http://(hostname):8098/riak/testbucket/testkey’ ¥ -d "Ryan Zezeski" • Bucket “testbucket”, Key “testkey” にて テキス ト ”Ryan Zezeski” をPUTする
    • 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>
    • YOKOZUNA 検証結果
    • Yokozuna 動作検証しました • ウィキペディア日本語版のdumpデータを store – 170万件、7GBのデータ • 検証内容 – 沢山のデータを入れても問題なく動くこと – 性能がそれなりに良いこと • store性能 • search性能は、今回は除外
    • 機器構成 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)
    • 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_extractor
    • yz_xml_extractor • XMLの例 <person> <name>Ryan</name> <age>29</age> </person> • Field展開後 [{<<"person_name">>, <<"Ryan">>}, {<<"person_age">>, <<"29">>}]
    • 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>
    • 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"/> …
    • スキーマの変更方法 $ 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”のスキーマとして登録する
    • 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
    • ベンチマーク結果 ノード数 スループット(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%程度
    • まとめ • Yokozunaはデータをstoreするだけで全文検 索できるので便利 • 分散処理の面倒なことは全てYokozunaが引 き受けてくれるので、運用が楽にできる