株式会社クリアコード > ククログ

ククログ


検索エンジン自作入門

2014年9月に技術評論社から「検索エンジン自作入門 - 手を動かしながら見渡す検索の舞台裏」という全文検索エンジンについて解説する本が出版されました。

検索エンジン自作入門 ~手を動かしながら見渡す検索の舞台裏
山田 浩之/末永 匡
技術評論社
¥ 2,894

内容

この本は、最初に全文検索エンジンの概要を説明し、それ以降は全文検索エンジンのコードを見ながら実装方法を解説していきます。実装方法を解説した後はさらに改良するにはどうしたらよいか、という話題が続きます。

全文検索エンジンを速いLIKE、という使い方で十分なRDBMSユーザーの人には必要のない内容です。一方、もっと検索の精度を上げたい、性能を上げたいなどチューニングしたい人には役立つ内容です。たとえ、自分で全文検索エンジンを作る予定がなくても、です。

本書の中でもたびたびでてくるのがトレードオフの話です。チューニングするときに直面するのがトレードオフです。全文検索エンジンがどのように作られているのか、どのあたりにどのようなトレードオフがあるのかという知識はチューニング時に非常に役にたちます。

わかりやすいところだとトークナイズの仕方もトレードオフの1つです。形態素解析をしてトークンを切り出すのか、N-gram方式でトークンを切り出すかで精度や性能は変わってきます。

トレードオフはいろいろ紹介されています。「全文検索の安易な利用を避ける」というコラムもあるくらいです。チューニングしたい人は実装の詳細を学ぶだけでなく、トレードオフにも注意して読むとよいでしょう。

チューニングの観点では、トレードオフ以外にも、全文検索エンジンの仕組みの知識が有用です。例えば、タグ検索は全文検索と同じ仕組みで効率よく実現できます。仕組みがわかっていると今までよりも効率よく検索できるかもしれません。このような話もコラムで触れています。

全体的に平易な表現で書かれているので全文検索エンジンに興味はあったけど今まで手が出ていなかったという人でも大丈夫です。

著者

この本は山田浩之さんと末永匡さんの共著です。山田さんはLuxというオープンソースの全文検索エンジンを開発者で、末永さんはGroongaというオープンソースの全文検索エンジンの開発者です。2人とも全文検索エンジンの開発経験があります。

山田さんは数年前にgihyo.jpに検索エンジンはいかにして動くのか?という連載をしていました。この連載も非常に有用な内容なので、全文検索エンジンに興味のある方は合わせて読んでみてください。

まとめ

「検索エンジン自作入門 - 手を動かしながら見渡す検索の舞台裏」という本の内容を紹介しました。全文検索エンジンをチューニングしたい、単純に興味があるという人はぜひ読んでみてください。

検索エンジン自作入門 ~手を動かしながら見渡す検索の舞台裏
山田 浩之/末永 匡
技術評論社
¥ 2,894

お知らせ

11/29(土)に開催予定の全文検索エンジンGroongaを囲む夕べ5で著者の1人である末永さん…だけでなく、もう1人の著者の山田さんも*1サインをしてくれるサイン会を実施する予定です!一気に著者全員のサインを集められるチャンスです!すでに検索エンジン自作入門を購入している方は本を持って参加してサインをもらってください。まだ購入していない方は…まだイベントまで1ヶ月半あるので事前に購入して読んで、そして本を持ってイベントに参加してサインをもらってください。

*1 コメント欄で一緒にサインしてくれることが決まりました!

2014-10-10

OSC2014 Tokyo/FallでMySQLユーザー向けに日本語全文検索について紹介予定

今週末(2014年10月18日(土)と19日(日))、オープンソースカンファレンス2014 Tokyo/Fallが開催されます。初日(18日(土))の11:00から11:45の枠で日本MySQLユーザ会の須藤がいろいろ考えると日本語の全文検索もMySQLがいいね!という発表をします。

次の人を対象とした内容です。

  • MySQLユーザー
  • 全文検索に関する知識はない(あるいは、ほとんどない)
  • でも、日本語の全文検索を実現することになってしまった(あるいは、実現したいと常々思っている)

MySQLを使っていて、「日本語の全文検索を実現したいけどWebの情報を見るとひと手間必要そうで敷居が高いなぁ…」という人は、ぜひ18日(土)に明星大学 日野キャンパス*1にお越しください。

全文検索についての知識がない人向けの内容なので、全文検索のあまり細かいことまでは触れない予定です。その代わり、全文検索の知識がなかった人には、「なるほどねー」とわかった気になれるような内容を目指します。

全文検索の細かいことが知りたい人はMySQLユーザー会のブース*2に来て聞いてください。須藤と@yoku0825がブース番をしている予定です。須藤はGroongaMroongaといった全文検索関連プロダクトの開発に関わっているので詳しく説明することができます。MySQLそのものについてはOracle ACEの@yoku0825が詳しく説明することができます。ちなみに、隣のブースはOracle Corporation (MySQL Community Team)ということなので、MySQLに関することは一緒に力を合わせて説明できます。全文検索に関係ないことでもMySQLに関することを知りたい方はぜひブースにお立ち寄りください。

発表内容が具体的にどんな内容になるか事前に知りたい人はGitHubのリポジトリーをのぞいてみてください。発表資料はここで随時アップデートされています。

MySQLで日本語全文検索をしたい人の助けになる内容を目指しますので、MySQLユーザーで日本語全文検索に興味のある方はぜひお越しください。お待ちしています!

以下は参考URLのリストです。

*1 OSC2014 Tokyo/Fallの会場です。新宿から1時間くらいの場所にあります。

*2 土曜日のみ出展です。日曜日は出店していません。

2014-10-15

いろいろ考えると日本語の全文検索もMySQLがいいね! #osc2014tk

先日お伝えした通り、10月18日(土)にオープンソースカンファレンス2014 Tokyo/Fallいろいろ考えると日本語の全文検索もMySQLがいいね!という発表をしてきました。

関連リンク:

内容

今回の発表は「すでにMySQLを使っていて」、「全文検索についてよく知らない」けど、「日本語の全文検索を実現したい」という人向けの内容になっています。そのため、トークナイザーや転置索引といった話はあえて外しました。

MySQLを使うと、そのような詳細を知らなくてもそこそこの機能の日本語の全文検索を実現できる、ということを伝えました。

データ量が少ない場合は適切なcollationを設定すればLIKEでも十分な機能と性能が得られて、運用の手間も増えません。LIKEで十分なら無理して専用の全文検索サーバーは必要ありません。

データ量が増えてきたらMroongaを導入することにより高速な日本語全文検索機能を手に入れられます。しかも、トークナイザーや転置索引といったことを知らなくても使えます。運用面を考えてみても、専用の全文検索サーバーを別途導入するよりかなり楽に運用できます。なぜならMySQLの運用ノウハウを使えるからです。

すでにMySQLを使っているなら、まずはLIKEかMroongaを使ってみて、機能面で不足を感じ始めたら検索のチューニングを始めるのがよいでしょう。

実は、Mroongaにも検索のチューニングを実施するオプションがあるので、専用の全文検索サーバーを導入する前にMroongaで経験して全文検索に関するノウハウを貯めるという方法を使えます。

スライド中でも軽く触れましたが、知らないことに手をだすときは、いきなりカンペキを求めないやり方をオススメしています。まずは実際に動かして、気になったところ(最初はいろいろあるはず)を改良しながら知識や技術を身に着けていく方法です。コツコツと改良を積み重ねていく方法です。遠回りに感じるかもしれませんが、後から振り返ってみると結構割に合っています。

別の方法として、近くに詳しい人がいたらその人に相談するという方法もオススメです。例えば、OSCに参加してブースに行って相談する、ということですね。

ブース番

今回は、発表だけでなく、日本MySQLユーザ会のブース番もしました。普段あまり意識していないことについて質問されたときにうまく答えられなくて、自分は何を知らなかったかに気付けました*1。誰かに説明をする、という機会はいいものですね。みなさんもブース番をしてみてはいかがでしょうか。日本MySQLユーザ会はブース番をしてくれる人を募集しています。日本MySQLユーザ会のメーリングリストに参加しているとたまに募集のメールが流れるるので、そこで手をあげるとよいです。

まとめ

OSC2014 Tokyo/Fallでの日本MySQLユーザ会の発表内容を紹介しました。MySQLで日本語を全文検索したかった人は参考にしてください。

Mroongaや全文検索についてもっと知りたくなった人は、10/27(来週の月曜日)に開催されるGroongaドキュメント読書会5や、11/29(いい肉の日!土曜日)に開催される全文検索エンジンGroongaを囲む夕べ5へも参加してみてください。理解が深まること間違いありません!

なお、「全文検索エンジンGroongaを囲む夕べ5」の方は発表者も募集しています。

*1 今回は、特にMySQL ClusterやGalera ClusterなどMySQLの分散システムのことが勉強になりました。

2014-10-24

12/9にリーダブルコードのWeb授業(生放送)を開催予定

須藤はリーダブルコードの解説の著者*1としてリーダブルコード普及のために活動しています。その一環として、約1ヶ月後の12/9に名著『リーダブルコード - より良いコードを書くためのシンプルで実践的なテクニック』を解説者と一緒に読み解こうというWeb授業を開催します。

受講対象者は次のような方です。

プログラマの方で、リーダブルコードを書きたい方。変数や関数の命名に自信が持てない方。

なお、リーダブルコードという本をまだ読んでいない人でも大丈夫な内容です。もし、まだ読んでいない人は、この授業を受講したことで「もっとリーダブルコードについて学びたい!」というきっかけになり、実際に本を読んでさらにリーダブルコードを学び始めることを期待しています。前に読んだけど身についていない、と感じている人もぜひ参加してください。リーダブルコードについて考えなおすよい機会になるはずです。

リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)
Dustin Boswell/Trevor Foucher/須藤 功平/角 征典
オライリージャパン
¥ 2,592

この授業は無料で生放送授業を受講できるスクーというサービスを利用して行います。会員登録をしなくても受講できますが、会員登録をすると授業中にコメントをすることができるようになります。コメントをできるということは、須藤先生に直接質問できるということです。気になることを直接質問すれば、より自分のスキルを伸ばす場として活用できます。質問したいという方は、ぜひ会員登録の上、受講してください。

それでは、12/9にインターネット越しにお会いできることを楽しみにしています!

*1 本文は書いていないです。解説を書いただけです。

2014-10-29

Debianでパッケージをリリースできるようにしたい - そしてDebianへ

はじめに

以前、オープンソースのカラムストア機能付き全文検索エンジンであるGroongaをDebianに入れるために必要な作業について、最初のとっかかりであるWNPPへのバグ登録やDebianらしいパッケージかどうかチェックするためのLintian、mentors.debian.netの使いかたについて紹介記事を書きました。

今回は、GroongaのDebianリポジトリ入りを目指す作業がようやく実を結び、Debian(unstable)に入ったことから、unstableに入るまでどんな流れだったのかを紹介します。

mentors.debian.netにパッケージをアップロードしたその後は

mentors.debian.netにパッケージをアップロードした後のざっくりとした流れは以下の通りです。

  • スポンサーにパッケージをチェックしてもらう
  • スポンサーにパッケージをNew Queueにアップロードしてもらう
  • ftp-masterにパッケージをチェックしてもらう
  • ftp-masterがパッケージをオフィシャルリポジトリへアップロード

Debian開発者であるやまねさんによるスライドに参考となる図があります。 以下の図は「なれる! Debian開発者 〜 45分でわかる? メンテナ入門」の26ページのものです。

以降では、それぞれのステップを簡単に説明します。

スポンサーにパッケージをチェックしてもらう

mentors.debian.netにアップロードしたパッケージはスポンサーにその内容をチェックしてもらわなければなりません。 Groongaの場合はDebian開発者であるやまねさんにお願いしました。

パッケージの内容にいくつか不備があったので、その点を修正してmentors.debian.netにアップロードしなおすというのを何度か行う必要がありました。

このあたりのやまねさんとのやりとりは ITP: groonga -- Fulltext search engineから参照できます。

dch --teamにしていなかったり、debian/copyrightの記述が不適切だったりしていたりと、細々とした修正をしています。 この作業はスポンサーによるチェックが通るまで続きます。

スポンサーにパッケージをNew Queueにアップロードしてもらう

スポンサーであるやまねさんのチェックを通ったら、次はNew Queueへのアップロードです。Groongaは新規パッケージなので、Debian開発者に行ってもらう必要があります。これはスポンサーであるやまねさんにお願いしました。

パッケージを扱う権限については以下の図が参考になります。

ftp-masterにパッケージをチェックしてもらう

パッケージがNew Queueにアップロードされたら、あとはftp-masterにチェックしてもらえるのを待ちます。 Groongaの場合は、チェックしてもらうまでに3ヶ月ほどかかりました。

ただし、その3ヶ月間でLintianのチェックが追加されたため、あえなく初回はrejectされてしまいました。 一旦rejectされたら、再度パッケージを修正して、mentors.debian.netにアップロードするところからやりなおしです。

Groongaの場合は、バンドルしているjavascriptやcssのcopyrightが明記されていなかったので、再度のftp-masterによるチェックでrejectされてしまうという残念なことがありました。二度目のftp-masterによるチェック待ちは1ヶ月ほどでした。

New Queue待ちは結構長いため、ftp-masterによるチェックがすんなり通るためには、ライセンスまわりを特に入念にチェックするのをお勧めします。

ftp-masterがパッケージをオフィシャルリポジトリへアップロード

ftp-masterによるチェックが通ったら、ようやくオフィシャルリポジトリにパッケージがアップロードされます。 debian/changelogに (Closes: #732055)などとしてBTSの番号を書いておくとアップロードと前述のバグが同時にクローズされます。

日々パッケージがアップロードされている様子は Debian upload で知ることもできます。

こうして、普段unstableを常用している人はapt-getでGroongaをインストールできるようになりました。

まとめ

今回はmentors.debian.netにパッケージをアップロードしてからDebianのオフィシャルリポジトリに入るまでの流れを簡単に紹介しました。 Debianオフィシャルリポジトリに入ったとはいえ、まだunstableにしかパッケージはありません。安定版のDebian(wheezy)には入っていないので、wheezyでは、Groongaプロジェクトで提供しているパッケージをインストールする必要があります。

今後は安定版でもbackportsからインストールして使えるようにするというのを目指すのと、肉の日リリースに継続的に追従していくのを頑張っていきます。

2014-10-31

«前月 最新記事 翌月»
タグ:
年・日ごとに見る
2008|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|12|
2020|01|02|03|04|05|06|07|08|09|10|11|12|