Oktavia全文検索エンジン - SphinxCon JP 2014
Upcoming SlideShare
Loading in...5
×
 

Like this? Share it with your network

Share

Oktavia全文検索エンジン - SphinxCon JP 2014

on

  • 64 views

* 検索エンジンOktaviaとは

* 検索エンジンOktaviaとは
* Sphinxに統合してみた

Statistics

Views

Total Views
64
Views on SlideShare
62
Embed Views
2

Actions

Likes
1
Downloads
0
Comments
0

1 Embed 2

https://twitter.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

Oktavia全文検索エンジン - SphinxCon JP 2014 Presentation Transcript

  • 1. DeNA Co, Ltd. 渋川よしき 10/26/2014 SphinxCon
  • 2. ! 渋川よしき ! DeNAで仕事してます ! @shibu_jp (twitter) ! yoshiki.shibukawa (Facebook) ! yoshiki@shibu.jp (mail) ! 主に使う言語 ! C/C++, Python, JavaScript ! sphinx-users.jpのファウンダ ー ! サンフランシスコから帰ってき ました
  • 3. ! 検索エンジンの基礎 ! Oktaviaの構造 ! OktaviaのAPIの使い方 ! Oktavia組み込んでみてどうよ?
  • 4. ! 転置インデックス方式は東アジアの言語 では辛ぽよ ! FM-indexっていう、まったく違う方式が あるよ ! Oktaviaは先月のPyConの前日にアップ ロードしたよ。 ! Sphinxに組み込んでみたよ←NEW ! 昨日は遅かったけどだいぶ改善したよ
  • 5. AM.txt (0) • Good morning • Hi PM.txt (1) • Good afternoon • Good evening • Hi
  • 6. AM.txt (0) • Good morning • Hi PM.txt (1) • Good afternoon • Good evening • Hi
  • 7. ! Sphinxは組み込みの検索エンジンを提供 ! 転置インデックス方式 ! 転置インデックスはインデックス作成時(ビル ド時)と検索時に単語分割が必要 ! 日本語だと単語分割に巨大な辞書が必要 ! 最初のバージョンは日本語非対応 ! パッチをいくつか送ったりもしてみた ! でもまだ十分じゃない
  • 8. ! イタリアの大学教授が考案したアルゴリズム ! Paolo Ferragina ! Giovanni Manzini ! FM-indexは海外ではあまり有名ではない ! 既存のアルゴリズムと大きく違う ! 既存のアルゴリズムでも西洋の言語では十分 ! ゲノムの解析分野ではポピュラー ! このアルゴリズムを使った検索エンジンを実装し ました。
  • 9. Estimated Time: 15min
  • 10. ! ウェブブラウザで動く検索エンジ ! PythonとJSX (DeNAが作ったaltJS http://jsx.github.io/)で書かれている ! FM-indexを検索のアルゴリズムとして 利用
  • 11. ! Action Script 3っぽいaltJS ! クラス構文がある ! 型に超厳格 ! thisで悩むことが大幅に減る ! パフォーマンスの最適化が凄い
  • 12. ! FM-indexは圧縮インデックスを使った検 索アルゴリズムでは最速 ! メモリに余裕がなく、インデックス配信が必 要なブラウザ上の検索に有利 ! FM-indexは単語分割を必要としない ! 日本語の検索で辞書がいらない
  • 13. ! Oktaviaは追加のメタデータを持つ ! 巨大な1つの文字列に統合されたテキストに、場所の 情報を与える Use the Force, Luke. No, I am your father. Ep4.txt Ep5.txt ! いくらでもメタデータを自由に追加できる。 ! セクション: ドキュメント区切り。名前付き。 ! ブロック: コードブロックなど。名前付き。空白箇所あり。 ! スプリッタ: 単語区切り。名前なし。大量に持てる。 ! テーブル: 行と列。RDBっぽい検索に対応。
  • 14. ソース 読み込み インデックス ファイル作成 インデックス 読み込み 検索結果 表示 CLI tool Browser search program
  • 15. ソース 読み込み インデックス ファイル作成 インデックス 読み込み 検索結果 表示 CLI tool Browser search program ! 1ヶ月前に完成 ! Python 2.6, 2.7, 3.3, 3.4をサポート
  • 16. ソース 読み込み インデックス ファイル作成 インデックス 読み込み JSX版 検索ツール 検索結果 表示 CLI tool Browser search program PyPy ! 1ヶ月前に完成 ! Python 2.6, 2.7, 3.3, 3.4をサポート
  • 17. Estimated Time: 23min
  • 18. ! Bitbucketにアップロード ! https://bitbucket.org/shibu/sphinx/ branch/feature/oktavia ! やったこと ! html_search_engineオプション追加 ! 既存実装をsearch/invertindex.pyに ! Oktavia用コード追加 ! テキストをOktaviaに流し込んでビルド
  • 19. ! O(n) ! 文書量に線形で処理時間がかかる ! JSX版 (node.js) ! Pythonドキュメント(10MB)で1分半ぐらい ! Python版 ! Sphinxのドキュメント(850KB)で30分 ! PyPyだと95秒!JIT偉い! ! Pythonドキュメントだと6時間?
  • 20. Python2.7 PyPy コンテンツ結合 9.43 [s] 67.51 [s] BW変換 1640.58 [s] 1.14 [s] ウェーブレットマトリックス構築 5.37 [s] 0.84 [s] 文字ごとの事前ランク計算 0.02 [s] 0.03 [s] キャッシュ計算(2%時) 70.18 [s] 21.17 [s] 合計 1725.59 [s] 90.69 [s] ! 傾向が違いすぎる・・・ ! if “pypy” in sys.executable:みたいなの必要? ! CPythonは完結データ構造のC言語実装が必要かも
  • 21. ! str = str + substr ! pypy: 19.19 [s], python: 2.44 [s] ! str += substr ! pypy: 0.0137 [s] python: 0.0023 [s] strって書いてあるけど文字列じゃなくて数値の配列です
  • 22. ! _range = getattr(__builtins__, 'xrange', range) ! pypy: 0.85 [s], python: 129.38 [s] ! pythonで、子モジュールでうまく動かない 問題(xrangeではなく、rangeが使われてた) ! _range = range if sys.version_info.major == 3 else xrange ! pypy: 0.82 [s], python: 4.85 [s]
  • 23. ! ビット演算が重い ! はじめてのC拡張を作り始めたよ (今日の昼から) ! ひととおりPythonコードを移植して、 コンパイルは通ったけどテストがまだ ! 結果は後日
  • 24. ! 転置インデックス方式は東アジアの言語 では辛ぽよ ! FM-indexっていう、まったく違う方式が あるよ ! Oktaviaは先月のPyConの前日にアップ ロードしたよ。 ! Sphinxに組み込んでみたよ←NEW ! 昨日は遅かったけどだいぶ改善したよ