この記事はGroonga Advent Calendar 2015の九日目の記事です。昨日はyoku0825さんのMroongaのDockerイメージをメンテナンスする、とはでした。
現在、Groongaでは、検索結果の中に「クエリーが出現した位置」を含めた検索結果を取得することができません。
例えば「こんにちはGroonga。」という文書があったとして、「Groonga」で検索するとこの文書がヒットします。その時に『「Groonga」というクエリーが五文字目である』という情報を取得することができません。そのため、例えばongaeshiさんのMilkodeというソースコード検索アプリでは、位置情報を取得するために、Groongaが返したソースコードファイルを開いて、その中でクエリーの語を線形探索しているそうです。僕も、Rubyでプラグインを作れる分散全文検索エンジンDroongaで発表した、「電子書籍の中で、検索後の位置を頭出しして開く」という機能を作る時、やっぱり全文からクエリーの位置を線形探索しなくてはいけませんでした。
もし、Groongaから返って来る検索結果にこの位置情報(文字数かバイト数か)が含まれていると、そういった部分がスキップできるので、システム全体としてより高速になります。
Groonga Meatup 2015の場で開発者の一人である須藤さんに聞いたところ、こういった機能自体はすぐに実装できるそうです(snippet_html()
関数などでやっていることと殆ど変わりません)。なので、あとは適切なAPIがあれば、というところです。
似たような要望を持っている人は他にもいるのではないかと思うので、僕一人の要求を伝えるより、そういう人達と少しお話してから、「こういう感じのAPIが欲しいんですけど」とリクエストするほうがよりよいかなとお持っています。なので、そういう議論のための場所を作りました!
https://github.com/groonga/groonga/issues/437
同じようなことを感じている人、ぜひご意見ください。日本語でも英語でも構いません。Qiitaのこの記事のコメントで意見をくださっても結構です。
よろしくお願いします。