CreateField Blog

オープンソースを使って個人でWebサービスを開発・運営していたブログ

Mroonga 7.06からMySQLのgenerated column/MariaDBのvirtual columnが利用可能に

全文検索エンジンGroongaのMySQLストレージエンジンであるMroongaのソースをいじる機会があったので、ついでにMySQLのgenerated columnとMariaDBのvirtual column(computed column)の対応をしました。 次回リリースのMroonga 7.06からはgenerated columnを作…

特許の検索・分析サービスPatentfieldをリニューアルしました

はじめに 私は、2015年1月よりIP Nexusというスタートアップに所属しています。 仕事でPG書いたことがない人間が知財のWeb系のスタートアップに転職した話 - CreateField Blog IP Nexusのメンバーは、投資銀行での経歴をもつ米国とドイツの知財訴訟弁護士や…

Groonga 6.0.2から多段ドリルダウンが利用可能に

GroongaはC/C++で書かれた国産の全文検索エンジンライブラリです。 サーバとしても組み込みのライブラリとしても利用することが可能です。 Groongaでは従来よりドリルダウン機能(ファセット)が提供されていましたが、 ドリルダウン機能の結果をつかってさら…

Groongaのパトリシアトライを使って高速なあいまい検索を実装した

はじめに あいまい検索はたとえば、編集距離を求めることによって実現することができます。 レーベンシュタイン距離(レーベンシュタインきょり、英: Levenshtein distance)は、二つの文字列がどの程度異なっているかを示す距離の一種である。編集距離(へ…

MySQLでgenerated columnを使って圧縮したデータを自動的に解凍する

MySQL5.7でできたgenerated columnってどんなのかな〜って調べていると、参照時に所定の計算結果を反映してから取得する仮想カラムVIRTUALと、更新時に所定の計算結果後の値を格納してくれるSTORED(Mariaの場合PERSISTENT)があることがわかりました。 MySQL…

MySQLで編集距離を求めるUDF

先日、Groongaでビットパラレルで高速な編集距離の実装を検証してました。 ビットパラレルを使ってGroongaで高速な編集距離関数の検証 - CreateField Blog 編集距離とは挿入、置換、削除、並び替えの編集操作によって一方の文字列をもう一方の文字列に変形す…

ビットパラレルを使ってGroongaで高速な編集距離関数の検証

Groongaではサジェスト機能のためにedit_distance関数が実装されています。 これはO(nm)の計算量が必要な動的計画法で文字数が多くなると結構遅くなります。 そこで、高速化するためにビットパラレル法をGroongaの関数で実装してみて比較してみました。 naoa…

Groongaでb Bit MinHashを使って高速に類似検索

Groonga Advent Calendar 2015の23日目の記事です。 はじめに GroongaでJaccard係数を計算するプラグインを作る - CreateField Blog こちらの記事では、GroongaでJaccard係数を計算できるプラグインを作りました。しかしながら、毎回すべてのレコードについ…

GroongaでJaccard係数を計算するプラグインを作る

Groonga Advent Calendar 2015の22日目の記事です。 はじめに Groongaでのタグ検索と表記揺れとの戦い at Groonga Meatup 2015 - CreateField Blog こちらの発表では、編集距離ベースで誤字脱字ぽい類似タグを抽出して表記揺れを抽出する話をしました。 しか…

JavaScriptでクライアントサイドだけで日本語PDF出力する

クライアントサイドでPDF出力できればサーバ負荷軽減できていいなぁとか考えることがあると思います。 そんなときは、 bpampuch/pdfmake · GitHub に日本語フォントを導入することにより 日本語でクライアントサイドだけでPDF出力することができます。 NotoS…

Groongaからword2vecを使って類似文書を取得してみる

Groonga Advent Calendar 2015の13日目の記事です。 全文検索エンジンGroongaからword2vecを簡単に使えるプラグイン - CreateField Blog こちらで作ったプラグインのsentence_vectorsオプションを試してみました。 naoa/groonga-word2vec · GitHub 学習ファ…

全文検索エンジンGroongaからword2vecを簡単に使えるプラグイン

はじめに Groonga Advent Calendar 2015の11日目の記事です。 GroongaはC/C++で書かれた高速な国産の全文検索エンジンです。 word2vecは、Googleが研究評価用に作った単語の特徴をベクトルで表現しニューラルネットモデルで教師なし学習をさせるツールです。…

Groongaでのタグ検索と表記揺れとの戦い at Groonga Meatup 2015

Groonga Meatup 2015 - Groonga | Doorkeeper で発表してきました。 Groongaでのタグ検索と表記揺れとの戦い from naoa_y www.slideshare.net 英語のタグ検索での表記揺れをTrieで前方一致検索絞込、編集距離(Damerau–Levenshtein distance)、キーボード距離…

MySQLでカラムごとに圧縮する方法

MySQLでデータサイズが非常に大きいような場合、データを圧縮して格納したくなることがあります。 InnoDBではROW_FORMAT=compressedとすることで、テーブルを圧縮することができます。 MyISAMではmyisampackコマンドを利用することにより、テーブル全体を圧…

Deploy to HerokuボタンでGitベースのWiki gollumを無料で簡単に作れるようにした

GitHubのWikiが検索できなくて不便だなぁとか思ったりしてたら、このWikiはGitベースでできており、gollumというオープンソースで公開されていることを知りました。 github.com そこで、ちょろっと試すためにHerokuで動くようにしてみました。 GitHubのトー…

Railsで高速全文検索エンジンMroongaを使うためのチュートリアル

はじめに MySQLでオープンソースの日本語対応の高速な全文検索エンジンGroongaが使えるMroongaを使って簡単に全文検索機能付きのRailsアプリケーションを作成する方法を紹介します。Railsのデモアプリケーションと実際に使えるサンプルの検索用のメソッドを…

PostgreSQLの日本語対応全文検索モジュールpg_bigmとPGroongaを検証してみた

はじめに 最近、Web系のエンジニアに転職して、Railsをよく触っています。 Rails界隈では、HerokuかActiveRecordの関係かよくわかりませんがPostgreSQLが利用されていることが多いような気がします。 これまで個人的に全文検索のWebサービスを開発するために…

仕事でPG書いたことがない人間が知財のWeb系のスタートアップに転職した話

2014/12に関西の個人特許事務所を退職し、2015/1からグローバルな知的財産のマーケット、マッチングWebプラットフォームIPNexusを立ち上げているスタートアップのバッグエンドエンジニアに転職しました。 これで2回目の転職で、それぞれ、まったくキャリアの…

MroongaでGroongaの機能を使いこなす高度なテーブル設計をする方法

はじめに MySQL/MariaDBで高速に全文検索するためのオープンソースのストレージエンジンMroongaは、以下のように、Engine=Mroonga、FULLTEXT INDEX (${source_column})と書くだけで非常に簡単に全文検索を使い始めることができます。 CREATE TABLE memos ( i…

GroongaとTokyoCabinetのHash表のベンチマークについて

はじめに 全文検索エンジンGroongaは超高速な全文検索ライブラリとしての機能を有しますが、単純なハッシュ表等のAPIも提供されており、ファイルへの永続化前提のインプロセス型のKVS(key value store)としても利用することができます。 ファイルへの永続化…

GroongaとElasticsearchの転置索引の違いと更新反映速度について

はじめに こちらの記事では、GroongaとElasticsearchの単純な検索性能、更新性能、 ディスク使用効率を比較しました。 その結果では、Groongaの検索速度がElasticsearchよりも数倍ほど速く、Elasticsearchの更新速度がGroongaよりも数倍ほど速かったです。 …

word2vecをDockerでプレーンテキストから簡単に使えるようにしました

はじめに Dockerで簡単に使えるようにしてみた第2弾です。前回は、専門用語を自動抽出してくれるTermExtractをプレーンテキストで簡単に使えるようにしたDockerファイルについて紹介しました。 最近はword2vecが非常に話題になっていますが、word2vecは環境…

専門用語を自動抽出するTermExtractをDockerで簡単に使えるようにしました

はじめに 品詞のつながりや出現頻度、学習情報から複合語らしきキーワードを自動で抽出するPerlモジュールTermExtractが公開されています。 これを利用すれば、形態素解析済みのテキストを食わせるだけでそこそこそれらしい専門用語をたくさん得ることができ…

全文検索エンジンGroongaユーザ勉強会@神戸を主催しました

2014/06/27(金)に全文検索エンジンGroongaユーザ勉強会@神戸を主催しました。 開催のきっかけ 草の根Groongaイベントのお誘いを受けて、関西圏でもGroongaのイベントがあるといいなと思い、神戸でも開催してみることにしました。 会議室の確保 人の集まり具…

61st Ruby/Rails勉強会@関西でLTしました

以下は、LTの資料です。 MacとRabbitの操作に戸惑ってしまい、デモの検証が一部しかできませんでした。デモができなかった分の検証結果を追記しています。 Ruby kansai-20140531-ruby-kansai-20140531 from naoa_y 2014/6/27(金)19:00~神戸でGroongaの勉強…

「Mroongaを使ったときの MySQLの制限との戦い」という内容で初LTしました

MySQL勉強会 in 大阪(第6回)でLTっていうのをはじめてやってみました。 内容は、「Mroongaを使ったときの MySQLの制限との戦い」です。 資料づくりにほとんど時間をかけられなくてすごい雑です。また、現場でちゃんとLTを見たこともなかったので、趣旨や作法が…

国産の全文検索エンジンGroonga vs 世界的流行のElasticsearch

2014年4月21日は、第4回Elasticsearch勉強会ですね! http://elasticsearch.doorkeeper.jp/events/8865 第4回Elasticsearch勉強会は、参加希望者が約200名の大反響なようです。 私は勉強会に参加できないので、C言語で書かれた国産の高速な全文検索エンジンG…

ブログタイトルを変更しました。

旧タイトル:独学Webサービス開発ブログ 新タイトル:CreateField Blog インターネット上には、たくさんの技術情報やソフトウェアを無償で提供されている方々がたくさんいます。 人から教えを請うていて、独学っていうのは独りよがりな感じがしたので辞めま…

数百GiBの全文検索用データベースをMroongaのストレージモードにしてはまったこと

前回は、全文検索Webサービスを作ったときにはまったことの第2回として、 Mroongaのラッパーモードからストレージモードに変えた理由という記事を書きました。 今回は、Mroongaのストレージモードにしたことによってはまったことについて書きたいと思います…

Mroongaのラッパーモードからストレージモードに変えた理由

前回は、全文検索Webサービスを作ったときにはまったことの第1回という記事を書きました。 今回は、Mroongaを使って全文検索Webサービスを作ったときにはまったことの第2回として、ラッパーモードからストレージモードに変えた理由について書きたいと思いま…