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

More Related Content

What's hot

BPstudy#64 ドキュメントを作りたくなってしまう魔法のツール Sphinx 2012年版
BPstudy#64 ドキュメントを作りたくなってしまう魔法のツール Sphinx 2012年版BPstudy#64 ドキュメントを作りたくなってしまう魔法のツール Sphinx 2012年版
BPstudy#64 ドキュメントを作りたくなってしまう魔法のツール Sphinx 2012年版Go Yamada
 
JUS関西 Sphinxワークショップ@関西 Sphinx紹介
JUS関西 Sphinxワークショップ@関西 Sphinx紹介JUS関西 Sphinxワークショップ@関西 Sphinx紹介
JUS関西 Sphinxワークショップ@関西 Sphinx紹介Takayuki Shimizukawa
 
Sphinxで社内勉強会(Git)の
資料を作ってみた
Sphinxで社内勉強会(Git)の
資料を作ってみたSphinxで社内勉強会(Git)の
資料を作ってみた
Sphinxで社内勉強会(Git)の
資料を作ってみたTaku SHIMIZU
 
個人的ドキュメンテーションツール トップ100
個人的ドキュメンテーションツール トップ100個人的ドキュメンテーションツール トップ100
個人的ドキュメンテーションツール トップ100Go Yamada
 
SIerでもSphinxを使いたい! 後編
SIerでもSphinxを使いたい! 後編SIerでもSphinxを使いたい! 後編
SIerでもSphinxを使いたい! 後編kk_Ataka
 
執筆中のPythonプロフェッショナルプログラミング第2版でsphinxを使っている話
執筆中のPythonプロフェッショナルプログラミング第2版でsphinxを使っている話執筆中のPythonプロフェッショナルプログラミング第2版でsphinxを使っている話
執筆中のPythonプロフェッショナルプログラミング第2版でsphinxを使っている話Takayuki Shimizukawa
 
手軽にメンテナンスできるドキュメントのヒミツ - blockdiag #odstudy 2011/07
手軽にメンテナンスできるドキュメントのヒミツ - blockdiag #odstudy 2011/07手軽にメンテナンスできるドキュメントのヒミツ - blockdiag #odstudy 2011/07
手軽にメンテナンスできるドキュメントのヒミツ - blockdiag #odstudy 2011/07Takeshi Komiya
 
Sphinxで作る貢献しやすい ドキュメント翻訳の仕組み
Sphinxで作る貢献しやすいドキュメント翻訳の仕組みSphinxで作る貢献しやすいドキュメント翻訳の仕組み
Sphinxで作る貢献しやすい ドキュメント翻訳の仕組みTakayuki Shimizukawa
 
sphinx + blockdiag で始めるドキュメント生活 2011/05 yokohama.pm
sphinx + blockdiag で始めるドキュメント生活 2011/05 yokohama.pmsphinx + blockdiag で始めるドキュメント生活 2011/05 yokohama.pm
sphinx + blockdiag で始めるドキュメント生活 2011/05 yokohama.pmTakeshi Komiya
 
マークアップ言語の拡張 メリットとデメリット #hankumi
マークアップ言語の拡張 メリットとデメリット #hankumiマークアップ言語の拡張 メリットとデメリット #hankumi
マークアップ言語の拡張 メリットとデメリット #hankumiTakeshi Komiya
 
ドキュメンテーションを加速するストレスフリーの作図ツール『blockdiag』 jus2011年6月勉強会
ドキュメンテーションを加速するストレスフリーの作図ツール『blockdiag』 jus2011年6月勉強会ドキュメンテーションを加速するストレスフリーの作図ツール『blockdiag』 jus2011年6月勉強会
ドキュメンテーションを加速するストレスフリーの作図ツール『blockdiag』 jus2011年6月勉強会Takayuki Shimizukawa
 
Sphinx ではじめるドキュメント生活 2012 #pyconjp #sphinxconjp
Sphinx ではじめるドキュメント生活 2012 #pyconjp #sphinxconjpSphinx ではじめるドキュメント生活 2012 #pyconjp #sphinxconjp
Sphinx ではじめるドキュメント生活 2012 #pyconjp #sphinxconjpTakeshi Komiya
 
世界のSphinx事情 @ SphinxCon JP 2015
世界のSphinx事情 @ SphinxCon JP 2015世界のSphinx事情 @ SphinxCon JP 2015
世界のSphinx事情 @ SphinxCon JP 2015Takayuki Shimizukawa
 
Sphinxの使い方事例
Sphinxの使い方事例Sphinxの使い方事例
Sphinxの使い方事例Go Yamada
 
社内のマニュアルをSphinxで作ってみた
社内のマニュアルをSphinxで作ってみた社内のマニュアルをSphinxで作ってみた
社内のマニュアルをSphinxで作ってみたIosif Takakura
 
ドキュメントシステムはこれを使え2015年版
ドキュメントシステムはこれを使え2015年版ドキュメントシステムはこれを使え2015年版
ドキュメントシステムはこれを使え2015年版Keiichiro Shikano
 
Sphinx customization for OGP support at SphinxCon JP 2018
Sphinx customization for OGP support at SphinxCon JP 2018Sphinx customization for OGP support at SphinxCon JP 2018
Sphinx customization for OGP support at SphinxCon JP 2018Takayuki Shimizukawa
 
How to spread reST and Sphinx
How to spread reST and SphinxHow to spread reST and Sphinx
How to spread reST and SphinxTakanori Suzuki
 
ドキュメントを作りたくなってしまう魔法のツール「Sphinx」
ドキュメントを作りたくなってしまう魔法のツール「Sphinx」ドキュメントを作りたくなってしまう魔法のツール「Sphinx」
ドキュメントを作りたくなってしまう魔法のツール「Sphinx」Yoshiki Shibukawa
 

What's hot (20)

BPstudy#64 ドキュメントを作りたくなってしまう魔法のツール Sphinx 2012年版
BPstudy#64 ドキュメントを作りたくなってしまう魔法のツール Sphinx 2012年版BPstudy#64 ドキュメントを作りたくなってしまう魔法のツール Sphinx 2012年版
BPstudy#64 ドキュメントを作りたくなってしまう魔法のツール Sphinx 2012年版
 
JUS関西 Sphinxワークショップ@関西 Sphinx紹介
JUS関西 Sphinxワークショップ@関西 Sphinx紹介JUS関西 Sphinxワークショップ@関西 Sphinx紹介
JUS関西 Sphinxワークショップ@関西 Sphinx紹介
 
Sphinxで社内勉強会(Git)の
資料を作ってみた
Sphinxで社内勉強会(Git)の
資料を作ってみたSphinxで社内勉強会(Git)の
資料を作ってみた
Sphinxで社内勉強会(Git)の
資料を作ってみた
 
Sphinx GO!!
Sphinx GO!!Sphinx GO!!
Sphinx GO!!
 
個人的ドキュメンテーションツール トップ100
個人的ドキュメンテーションツール トップ100個人的ドキュメンテーションツール トップ100
個人的ドキュメンテーションツール トップ100
 
SIerでもSphinxを使いたい! 後編
SIerでもSphinxを使いたい! 後編SIerでもSphinxを使いたい! 後編
SIerでもSphinxを使いたい! 後編
 
執筆中のPythonプロフェッショナルプログラミング第2版でsphinxを使っている話
執筆中のPythonプロフェッショナルプログラミング第2版でsphinxを使っている話執筆中のPythonプロフェッショナルプログラミング第2版でsphinxを使っている話
執筆中のPythonプロフェッショナルプログラミング第2版でsphinxを使っている話
 
手軽にメンテナンスできるドキュメントのヒミツ - blockdiag #odstudy 2011/07
手軽にメンテナンスできるドキュメントのヒミツ - blockdiag #odstudy 2011/07手軽にメンテナンスできるドキュメントのヒミツ - blockdiag #odstudy 2011/07
手軽にメンテナンスできるドキュメントのヒミツ - blockdiag #odstudy 2011/07
 
Sphinxで作る貢献しやすい ドキュメント翻訳の仕組み
Sphinxで作る貢献しやすいドキュメント翻訳の仕組みSphinxで作る貢献しやすいドキュメント翻訳の仕組み
Sphinxで作る貢献しやすい ドキュメント翻訳の仕組み
 
sphinx + blockdiag で始めるドキュメント生活 2011/05 yokohama.pm
sphinx + blockdiag で始めるドキュメント生活 2011/05 yokohama.pmsphinx + blockdiag で始めるドキュメント生活 2011/05 yokohama.pm
sphinx + blockdiag で始めるドキュメント生活 2011/05 yokohama.pm
 
マークアップ言語の拡張 メリットとデメリット #hankumi
マークアップ言語の拡張 メリットとデメリット #hankumiマークアップ言語の拡張 メリットとデメリット #hankumi
マークアップ言語の拡張 メリットとデメリット #hankumi
 
ドキュメンテーションを加速するストレスフリーの作図ツール『blockdiag』 jus2011年6月勉強会
ドキュメンテーションを加速するストレスフリーの作図ツール『blockdiag』 jus2011年6月勉強会ドキュメンテーションを加速するストレスフリーの作図ツール『blockdiag』 jus2011年6月勉強会
ドキュメンテーションを加速するストレスフリーの作図ツール『blockdiag』 jus2011年6月勉強会
 
Sphinx ではじめるドキュメント生活 2012 #pyconjp #sphinxconjp
Sphinx ではじめるドキュメント生活 2012 #pyconjp #sphinxconjpSphinx ではじめるドキュメント生活 2012 #pyconjp #sphinxconjp
Sphinx ではじめるドキュメント生活 2012 #pyconjp #sphinxconjp
 
世界のSphinx事情 @ SphinxCon JP 2015
世界のSphinx事情 @ SphinxCon JP 2015世界のSphinx事情 @ SphinxCon JP 2015
世界のSphinx事情 @ SphinxCon JP 2015
 
Sphinxの使い方事例
Sphinxの使い方事例Sphinxの使い方事例
Sphinxの使い方事例
 
社内のマニュアルをSphinxで作ってみた
社内のマニュアルをSphinxで作ってみた社内のマニュアルをSphinxで作ってみた
社内のマニュアルをSphinxで作ってみた
 
ドキュメントシステムはこれを使え2015年版
ドキュメントシステムはこれを使え2015年版ドキュメントシステムはこれを使え2015年版
ドキュメントシステムはこれを使え2015年版
 
Sphinx customization for OGP support at SphinxCon JP 2018
Sphinx customization for OGP support at SphinxCon JP 2018Sphinx customization for OGP support at SphinxCon JP 2018
Sphinx customization for OGP support at SphinxCon JP 2018
 
How to spread reST and Sphinx
How to spread reST and SphinxHow to spread reST and Sphinx
How to spread reST and Sphinx
 
ドキュメントを作りたくなってしまう魔法のツール「Sphinx」
ドキュメントを作りたくなってしまう魔法のツール「Sphinx」ドキュメントを作りたくなってしまう魔法のツール「Sphinx」
ドキュメントを作りたくなってしまう魔法のツール「Sphinx」
 

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

「Python言語」はじめの一歩 / First step of Python
「Python言語」はじめの一歩 / First step of Python「Python言語」はじめの一歩 / First step of Python
「Python言語」はじめの一歩 / First step of PythonTakanori Suzuki
 
scikit-learnを用いた機械学習チュートリアル
scikit-learnを用いた機械学習チュートリアルscikit-learnを用いた機械学習チュートリアル
scikit-learnを用いた機械学習チュートリアル敦志 金谷
 
東京Node学園 今できる通信高速化にトライしてみた
東京Node学園 今できる通信高速化にトライしてみた東京Node学園 今できる通信高速化にトライしてみた
東京Node学園 今できる通信高速化にトライしてみたYoshiki Shibukawa
 
Python & PyConJP 2014 Report
Python & PyConJP 2014 ReportPython & PyConJP 2014 Report
Python & PyConJP 2014 Reportgree_tech
 
Pyconjp2016 pyftplib
Pyconjp2016 pyftplibPyconjp2016 pyftplib
Pyconjp2016 pyftplibShinya Okano
 
CPythonを読もう
CPythonを読もうCPythonを読もう
CPythonを読もうAkira Nonaka
 
Firefox Add-on SDK 入門
Firefox Add-on SDK 入門Firefox Add-on SDK 入門
Firefox Add-on SDK 入門Shoot Morii
 
「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12
「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12
「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12Takanori Suzuki
 
Excel 方眼紙撲滅委員会 活動報告 2012.08 #pyfes
Excel 方眼紙撲滅委員会 活動報告 2012.08 #pyfesExcel 方眼紙撲滅委員会 活動報告 2012.08 #pyfes
Excel 方眼紙撲滅委員会 活動報告 2012.08 #pyfesTakeshi Komiya
 
入門書を読み終わったらなにしよう? 〜Python と WebAPI の使い方から学ぶ次の一歩〜 / next-step-python-programing
入門書を読み終わったらなにしよう? 〜Python と WebAPI の使い方から学ぶ次の一歩〜 / next-step-python-programing入門書を読み終わったらなにしよう? 〜Python と WebAPI の使い方から学ぶ次の一歩〜 / next-step-python-programing
入門書を読み終わったらなにしよう? 〜Python と WebAPI の使い方から学ぶ次の一歩〜 / next-step-python-programingKei IWASAKI
 
PyScriptの紹介
PyScriptの紹介PyScriptの紹介
PyScriptの紹介2bo 2bo
 
Firefox OS 勉強会 名古屋2nd 「便利な便利な開発ツール」
Firefox OS 勉強会 名古屋2nd 「便利な便利な開発ツール」Firefox OS 勉強会 名古屋2nd 「便利な便利な開発ツール」
Firefox OS 勉強会 名古屋2nd 「便利な便利な開発ツール」Noritada Shimizu
 
素振りのススメ at Python入門者の集い
素振りのススメ at Python入門者の集い素振りのススメ at Python入門者の集い
素振りのススメ at Python入門者の集いTakayuki Shimizukawa
 
私の好きなPython構文 vol.2 #nds46
私の好きなPython構文 vol.2 #nds46私の好きなPython構文 vol.2 #nds46
私の好きなPython構文 vol.2 #nds46civicpg
 
SphinxのCIの続き Azure DevOpsでのビルド結果を、認証付きAzure App Serviceに公開するところまで
SphinxのCIの続き Azure DevOpsでのビルド結果を、認証付きAzure App Serviceに公開するところまでSphinxのCIの続き Azure DevOpsでのビルド結果を、認証付きAzure App Serviceに公開するところまで
SphinxのCIの続き Azure DevOpsでのビルド結果を、認証付きAzure App Serviceに公開するところまでStudy Group by SciencePark Corp.
 
SwiftとCocoaPodsで始めるサクサクiOS開発!
SwiftとCocoaPodsで始めるサクサクiOS開発! SwiftとCocoaPodsで始めるサクサクiOS開発!
SwiftとCocoaPodsで始めるサクサクiOS開発! Koji Shiraishi
 
今時のオンプレなgithubクローン環境構築
今時のオンプレなgithubクローン環境構築今時のオンプレなgithubクローン環境構築
今時のオンプレなgithubクローン環境構築You&I
 

Similar to Oktavia全文検索エンジン - SphinxCon JP 2014 (20)

「Python言語」はじめの一歩 / First step of Python
「Python言語」はじめの一歩 / First step of Python「Python言語」はじめの一歩 / First step of Python
「Python言語」はじめの一歩 / First step of Python
 
scikit-learnを用いた機械学習チュートリアル
scikit-learnを用いた機械学習チュートリアルscikit-learnを用いた機械学習チュートリアル
scikit-learnを用いた機械学習チュートリアル
 
東京Node学園 今できる通信高速化にトライしてみた
東京Node学園 今できる通信高速化にトライしてみた東京Node学園 今できる通信高速化にトライしてみた
東京Node学園 今できる通信高速化にトライしてみた
 
Python & PyConJP 2014 Report
Python & PyConJP 2014 ReportPython & PyConJP 2014 Report
Python & PyConJP 2014 Report
 
Keep a diary
Keep a diaryKeep a diary
Keep a diary
 
Pyconjp2016 pyftplib
Pyconjp2016 pyftplibPyconjp2016 pyftplib
Pyconjp2016 pyftplib
 
CPythonを読もう
CPythonを読もうCPythonを読もう
CPythonを読もう
 
Pykonjp2014
Pykonjp2014Pykonjp2014
Pykonjp2014
 
Firefox Add-on SDK 入門
Firefox Add-on SDK 入門Firefox Add-on SDK 入門
Firefox Add-on SDK 入門
 
Stapy#22 LT
Stapy#22 LTStapy#22 LT
Stapy#22 LT
 
「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12
「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12
「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12
 
Excel 方眼紙撲滅委員会 活動報告 2012.08 #pyfes
Excel 方眼紙撲滅委員会 活動報告 2012.08 #pyfesExcel 方眼紙撲滅委員会 活動報告 2012.08 #pyfes
Excel 方眼紙撲滅委員会 活動報告 2012.08 #pyfes
 
入門書を読み終わったらなにしよう? 〜Python と WebAPI の使い方から学ぶ次の一歩〜 / next-step-python-programing
入門書を読み終わったらなにしよう? 〜Python と WebAPI の使い方から学ぶ次の一歩〜 / next-step-python-programing入門書を読み終わったらなにしよう? 〜Python と WebAPI の使い方から学ぶ次の一歩〜 / next-step-python-programing
入門書を読み終わったらなにしよう? 〜Python と WebAPI の使い方から学ぶ次の一歩〜 / next-step-python-programing
 
PyScriptの紹介
PyScriptの紹介PyScriptの紹介
PyScriptの紹介
 
Firefox OS 勉強会 名古屋2nd 「便利な便利な開発ツール」
Firefox OS 勉強会 名古屋2nd 「便利な便利な開発ツール」Firefox OS 勉強会 名古屋2nd 「便利な便利な開発ツール」
Firefox OS 勉強会 名古屋2nd 「便利な便利な開発ツール」
 
素振りのススメ at Python入門者の集い
素振りのススメ at Python入門者の集い素振りのススメ at Python入門者の集い
素振りのススメ at Python入門者の集い
 
私の好きなPython構文 vol.2 #nds46
私の好きなPython構文 vol.2 #nds46私の好きなPython構文 vol.2 #nds46
私の好きなPython構文 vol.2 #nds46
 
SphinxのCIの続き Azure DevOpsでのビルド結果を、認証付きAzure App Serviceに公開するところまで
SphinxのCIの続き Azure DevOpsでのビルド結果を、認証付きAzure App Serviceに公開するところまでSphinxのCIの続き Azure DevOpsでのビルド結果を、認証付きAzure App Serviceに公開するところまで
SphinxのCIの続き Azure DevOpsでのビルド結果を、認証付きAzure App Serviceに公開するところまで
 
SwiftとCocoaPodsで始めるサクサクiOS開発!
SwiftとCocoaPodsで始めるサクサクiOS開発! SwiftとCocoaPodsで始めるサクサクiOS開発!
SwiftとCocoaPodsで始めるサクサクiOS開発!
 
今時のオンプレなgithubクローン環境構築
今時のオンプレなgithubクローン環境構築今時のオンプレなgithubクローン環境構築
今時のオンプレなgithubクローン環境構築
 

More from Yoshiki Shibukawa

技術書執筆のススメ 〜Only1なエンジニアになるためのセルフブランディング〜の発表資料
技術書執筆のススメ 〜Only1なエンジニアになるためのセルフブランディング〜の発表資料技術書執筆のススメ 〜Only1なエンジニアになるためのセルフブランディング〜の発表資料
技術書執筆のススメ 〜Only1なエンジニアになるためのセルフブランディング〜の発表資料Yoshiki Shibukawa
 
GO本執筆者が語る、2064年もITで仕事し続けるためのキャリアプランの発表資料
GO本執筆者が語る、2064年もITで仕事し続けるためのキャリアプランの発表資料GO本執筆者が語る、2064年もITで仕事し続けるためのキャリアプランの発表資料
GO本執筆者が語る、2064年もITで仕事し続けるためのキャリアプランの発表資料Yoshiki Shibukawa
 
Chunked encoding を使った高速化の考察
Chunked encoding を使った高速化の考察Chunked encoding を使った高速化の考察
Chunked encoding を使った高速化の考察Yoshiki Shibukawa
 
Go & multi platform GUI Trials and Errors
Go & multi platform GUI Trials and ErrorsGo & multi platform GUI Trials and Errors
Go & multi platform GUI Trials and ErrorsYoshiki Shibukawa
 
FINAL FANTASY Record Keeperを支えたGolang
FINAL FANTASY Record Keeperを支えたGolangFINAL FANTASY Record Keeperを支えたGolang
FINAL FANTASY Record Keeperを支えたGolangYoshiki Shibukawa
 
Oktavia Search Engine - pyconjp2014
Oktavia Search Engine - pyconjp2014Oktavia Search Engine - pyconjp2014
Oktavia Search Engine - pyconjp2014Yoshiki Shibukawa
 
Expert JavaScript Programming
Expert JavaScript ProgrammingExpert JavaScript Programming
Expert JavaScript ProgrammingYoshiki Shibukawa
 
JavaScriptゲーム制作勉強会
JavaScriptゲーム制作勉強会JavaScriptゲーム制作勉強会
JavaScriptゲーム制作勉強会Yoshiki Shibukawa
 
つまみぐい勉強法。その後。
つまみぐい勉強法。その後。つまみぐい勉強法。その後。
つまみぐい勉強法。その後。Yoshiki Shibukawa
 
Sphinx Tutorial at BPStudy#30
Sphinx Tutorial at BPStudy#30Sphinx Tutorial at BPStudy#30
Sphinx Tutorial at BPStudy#30Yoshiki Shibukawa
 
Who is the person whom the IT engineers should learn next to Alexander?
Who is the person whom the IT engineers should learn next to Alexander?Who is the person whom the IT engineers should learn next to Alexander?
Who is the person whom the IT engineers should learn next to Alexander?Yoshiki Shibukawa
 

More from Yoshiki Shibukawa (20)

技術書執筆のススメ 〜Only1なエンジニアになるためのセルフブランディング〜の発表資料
技術書執筆のススメ 〜Only1なエンジニアになるためのセルフブランディング〜の発表資料技術書執筆のススメ 〜Only1なエンジニアになるためのセルフブランディング〜の発表資料
技術書執筆のススメ 〜Only1なエンジニアになるためのセルフブランディング〜の発表資料
 
GO本執筆者が語る、2064年もITで仕事し続けるためのキャリアプランの発表資料
GO本執筆者が語る、2064年もITで仕事し続けるためのキャリアプランの発表資料GO本執筆者が語る、2064年もITで仕事し続けるためのキャリアプランの発表資料
GO本執筆者が語る、2064年もITで仕事し続けるためのキャリアプランの発表資料
 
Golang tokyo #7 qtpm
Golang tokyo #7 qtpmGolang tokyo #7 qtpm
Golang tokyo #7 qtpm
 
Chunked encoding を使った高速化の考察
Chunked encoding を使った高速化の考察Chunked encoding を使った高速化の考察
Chunked encoding を使った高速化の考察
 
Mithril
MithrilMithril
Mithril
 
Go & multi platform GUI Trials and Errors
Go & multi platform GUI Trials and ErrorsGo & multi platform GUI Trials and Errors
Go & multi platform GUI Trials and Errors
 
Excelの話
Excelの話Excelの話
Excelの話
 
FINAL FANTASY Record Keeperを支えたGolang
FINAL FANTASY Record Keeperを支えたGolangFINAL FANTASY Record Keeperを支えたGolang
FINAL FANTASY Record Keeperを支えたGolang
 
アンラーニング
アンラーニングアンラーニング
アンラーニング
 
Oktavia Search Engine - pyconjp2014
Oktavia Search Engine - pyconjp2014Oktavia Search Engine - pyconjp2014
Oktavia Search Engine - pyconjp2014
 
大規模JavaScript開発
大規模JavaScript開発大規模JavaScript開発
大規模JavaScript開発
 
Xpjug基調lt2011
Xpjug基調lt2011Xpjug基調lt2011
Xpjug基調lt2011
 
Expert JavaScript Programming
Expert JavaScript ProgrammingExpert JavaScript Programming
Expert JavaScript Programming
 
JavaScriptゲーム制作勉強会
JavaScriptゲーム制作勉強会JavaScriptゲーム制作勉強会
JavaScriptゲーム制作勉強会
 
Pomodoro technique
Pomodoro techniquePomodoro technique
Pomodoro technique
 
Bitbucket&mercurial
Bitbucket&mercurialBitbucket&mercurial
Bitbucket&mercurial
 
つまみぐい勉強法。その後。
つまみぐい勉強法。その後。つまみぐい勉強法。その後。
つまみぐい勉強法。その後。
 
Erlang and I and Sphinx.
Erlang and I and Sphinx.Erlang and I and Sphinx.
Erlang and I and Sphinx.
 
Sphinx Tutorial at BPStudy#30
Sphinx Tutorial at BPStudy#30Sphinx Tutorial at BPStudy#30
Sphinx Tutorial at BPStudy#30
 
Who is the person whom the IT engineers should learn next to Alexander?
Who is the person whom the IT engineers should learn next to Alexander?Who is the person whom the IT engineers should learn next to Alexander?
Who is the person whom the IT engineers should learn next to Alexander?
 

Recently uploaded

UPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdfUPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdffurutsuka
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000Shota Ito
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxAtomu Hidaka
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 

Recently uploaded (7)

UPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdfUPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdf
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 

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

  • 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.
  • 6.
  • 7. AM.txt (0) • Good morning • Hi PM.txt (1) • Good afternoon • Good evening • Hi
  • 8. AM.txt (0) • Good morning • Hi PM.txt (1) • Good afternoon • Good evening • Hi
  • 9.
  • 10.
  • 11. ! Sphinxは組み込みの検索エンジンを提供 ! 転置インデックス方式 ! 転置インデックスはインデックス作成時(ビル ド時)と検索時に単語分割が必要 ! 日本語だと単語分割に巨大な辞書が必要 ! 最初のバージョンは日本語非対応 ! パッチをいくつか送ったりもしてみた ! でもまだ十分じゃない
  • 12.
  • 13. ! イタリアの大学教授が考案したアルゴリズム ! Paolo Ferragina ! Giovanni Manzini ! FM-indexは海外ではあまり有名ではない ! 既存のアルゴリズムと大きく違う ! 既存のアルゴリズムでも西洋の言語では十分 ! ゲノムの解析分野ではポピュラー ! このアルゴリズムを使った検索エンジンを実装し ました。
  • 15. ! ウェブブラウザで動く検索エンジ ! PythonとJSX (DeNAが作ったaltJS http://jsx.github.io/)で書かれている ! FM-indexを検索のアルゴリズムとして 利用
  • 16. ! Action Script 3っぽいaltJS ! クラス構文がある ! 型に超厳格 ! thisで悩むことが大幅に減る ! パフォーマンスの最適化が凄い
  • 17.
  • 18. ! FM-indexは圧縮インデックスを使った検 索アルゴリズムでは最速 ! メモリに余裕がなく、インデックス配信が必 要なブラウザ上の検索に有利 ! FM-indexは単語分割を必要としない ! 日本語の検索で辞書がいらない
  • 19. ! Oktaviaは追加のメタデータを持つ ! 巨大な1つの文字列に統合されたテキストに、場所の 情報を与える Use the Force, Luke. No, I am your father. Ep4.txt Ep5.txt ! いくらでもメタデータを自由に追加できる。 ! セクション: ドキュメント区切り。名前付き。 ! ブロック: コードブロックなど。名前付き。空白箇所あり。 ! スプリッタ: 単語区切り。名前なし。大量に持てる。 ! テーブル: 行と列。RDBっぽい検索に対応。
  • 20. ソース 読み込み インデックス ファイル作成 インデックス 読み込み 検索結果 表示 CLI tool Browser search program
  • 21. ソース 読み込み インデックス ファイル作成 インデックス 読み込み 検索結果 表示 CLI tool Browser search program ! 1ヶ月前に完成 ! Python 2.6, 2.7, 3.3, 3.4をサポート
  • 22. ソース 読み込み インデックス ファイル作成 インデックス 読み込み JSX版 検索ツール 検索結果 表示 CLI tool Browser search program PyPy ! 1ヶ月前に完成 ! Python 2.6, 2.7, 3.3, 3.4をサポート
  • 24. ! Bitbucketにアップロード ! https://bitbucket.org/shibu/sphinx/ branch/feature/oktavia ! やったこと ! html_search_engineオプション追加 ! 既存実装をsearch/invertindex.pyに ! Oktavia用コード追加 ! テキストをOktaviaに流し込んでビルド
  • 25. ! O(n) ! 文書量に線形で処理時間がかかる ! JSX版 (node.js) ! Pythonドキュメント(10MB)で1分半ぐらい ! Python版 ! Sphinxのドキュメント(850KB)で30分 ! PyPyだと95秒!JIT偉い! ! Pythonドキュメントだと6時間?
  • 26. 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言語実装が必要かも
  • 27. ! str = str + substr ! pypy: 19.19 [s], python: 2.44 [s] ! str += substr ! pypy: 0.0137 [s] python: 0.0023 [s] strって書いてあるけど文字列じゃなくて数値の配列です
  • 28. ! _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]
  • 29. ! ビット演算が重い ! はじめてのC拡張を作り始めたよ (今日の昼から) ! ひととおりPythonコードを移植して、 コンパイルは通ったけどテストがまだ ! 結果は後日
  • 30. ! 転置インデックス方式は東アジアの言語 では辛ぽよ ! FM-indexっていう、まったく違う方式が あるよ ! Oktaviaは先月のPyConの前日にアップ ロードしたよ。 ! Sphinxに組み込んでみたよ←NEW ! 昨日は遅かったけどだいぶ改善したよ