Sennaのインストール
Rastにつづいて、Sennaを試してみる。
Sennaは、組み込み型の全文検索エンジンで、データベースなどと一緒に使えて、しかもN-gramインデックスを備えてます。インストールは開発者やPatchの作成者のおかげで思ったより楽でした。
OSは今回はCentOS4.0。何も使ってないマシンにいれました。
MySQLが動いているマシンだとさすがに怖い。
MecabにPatchをあててインストール
# wget http://dev.razil.jp/archive/mecab-0.81.mte.patch.20050423 # tar zxf mecab-0.81.tar.gz # cp ipadic-2.5.1.tar.gz mecab-0.81/dic/ # cd mecab-0.81/dic/ # tar zxf ipadic-2.5.1.tar.gz # cd .. # patch -p1 < ../mecab-0.81.mte.patch.20050423 # ./configure --enable-mutex --prefix=/usr # make # make install
Sennaのコンパイルとインストール。
今回は、デイリースナップショットから入れました。
# wget http://dev.razil.jp/archive/senna/senna-20050601-svn.tar.gz # tar zxf senna-20050601-svn.tar.gz # ./configure --prefix=/usr # make # make install
MySQLのインストール。
コンパイルオプションは、MySQLのドキュメントや、rpmのSPECS、MLのこちらのメッセージを参考にしました。
# /usr/sbin/groupadd -g 27 mysql # /usr/sbin/useradd -g mysql -u 27 -d /var/lib/mysql mysql # wget http://dev.mysql.com/get/Downloads/MySQL-4.0/mysql-4.0.24.tar.gz/from/ftp://ftp.u-aizu.ac.jp/ftp/pub/dbms/mysql/mysql.com/ # tar zxf mysql-4.0.24.tar.gz # cd mysql-4.0.24 # patch -p1 < ../senna/bindings/mysql/mysql-4.0.24.senna.diff # autoconf # CFLAGS="-O3 -mpentiumpro" CXX=gcc CXXFLAGS="-O3 -mpentiumpro -felide-constructors -fno-exceptions -fno-rtti" ? ./configure ? --prefix=/usr ? --with-extra-charsets=complex ? --with-charset=ujis ? --enable-thread-safe-client ? --enable-local-infile ? --enable-assembler ? --with-client-ldflags=-all-static ? --with-mysqld-ldflags=-all-static ? --with-mysqld-user=mysql ? --localstatedir=/var/lib/mysql ? --with-unix-socket-path=/var/lib/mysql/mysql.sock # touch ./Docs/Images/cluster-components-1.txt # touch ./Docs/Images/multi-comp-1.txt # touch ./Docs/errmsg-table.texi # touch ./Docs/cl-errmsg-table.texi # make # make install # ./scripts/mysql_install_db # chown -R mysql.mysql /var/lib/mysql # chmod 755 /var/lib/mysql # cp support-files/my-medium.cnf /etc/my.cnf
mysqld_safeとして起動で、起動後にパスワードの設定を忘れないように。
テストはこんな感じで。
まず。データベースとテーブルを作ります。
mysql> create database sennatest; mysql> use sennatest mysql> create table articles( -> id int unsigned not null auto_increment primary key, -> body text, -> fulltext(body) ->); Query OK, 0 rows affected (0.01 sec)
データを入力。はてなブックマークの人気サイトのタイトルだけ持ってきてみました。
mysql> insert into articles values -> (null,"郵貯民営化は重要な問題だと思う "), -> (null,"スローライフを志向するiPodの強み - CNET Japan"), -> (null,"HTML, CSS, Photoshopを同時に学べるサンプル付きデザイン記事:Goodpic"), -> (null,"jazzanovaの日記 - 現在顧問弁護士に相談中であり、対応についても検討中"), -> (null,"mixi非公式ニュースサイト - mixiの問題人物Kusakabe氏、強制退会に?"), -> (null,"むだづかいにっき♂:ネット上で議論を仕掛ける事について"), -> (null,"はてな perl ハッカーの方々にお聞きします。近頃ますます良い感じなperlですが、どのような開発環境で開発していますでしょうか。"), -> (null,"シナトラ千代子 - 投げ銭が飛び交うなかでダイアリーに立てこもる、という意味。"), -> (null,"Going My Way: Skypeの会話をPodcast用に録音する場合の設定方法"), -> (null,"Kusakabeさんがmixiの一部?を賑わしている。彼にmixi強制退会が言い渡されたのだ。"), -> (null,"Ringo's Weblog: googleと競合しない方法2 "), -> (null,"Moleskin Diary - 投げ銭よりたれ銭"), -> (null,"第38回 海外メディアが伝えた小泉・郵政解散劇の評判 - nikkeibp.jp - 立花隆の「メディア ソシオ-ポリティクス」"), -> (null,"ほその日記 - フォームが変更された事を知る"), -> (null,"総選挙はてなと公職選挙法:北海道に住む国家公務員日記 "), -> (null,"はてな、政党を株式に見立てて総選挙結果を予測 - CNET Japan"); Query OK, 16 rows affected (0.06 sec) Records: 16 Duplicates: 0 Warnings: 0
検索をしてみます。日本語で検索ができていれば以下の検索結果になると思います。
mysql> select * from articles where match (body) against ('はてな'); +----+----------------------------------------------+ | id | body | +----+----------------------------------------------+ | 7 | はてな perl ハッカーの方々にお聞きします〜 | 15 | 総選挙はてなと公職選挙法:北海道に住む国家公務員日記 | 16 | はてな、政党を株式に見立てて総選挙結果を予測〜 +----+----------------------------------------------+ 3 rows in set (0.01 sec)
コメント
sennaのインストールとっても参考になりました。
ありがとうございます!!
しかし正しくインストールされたか確認する術がありません。
(インストールでエラーが出なかったのですが・・・)
確認できるテストスクリプトなんて公開してもらえないでしょうか?
わがままいって申し訳ありません。
投稿者: 超初心者 | 2005年08月12日 01:35
> 超初心者さん
記事にSennnaのテストの方法を追加しました。参考にしてみてください。
全文検索のSQLはSennaを入れたとしてもMySQLのものと同じです。それがSennaの良いところでもあると思います。
http://dev.mysql.com/doc/mysql/ja/fulltext-search.html
こちらのページが参考になりますよ。、
投稿者: かぜぶろ | 2005年08月13日 02:01
テストデータ登録sqlまでありがとうございます。
インストール環境で試したところ正しくselectできました。
(もちろんただmysqlをインストールした環境ではダメでした。)
sennaについても参考ページのおかげでずいぶん理解が深まりました。
私はsennnaを利用するのにはsenna用の特別な関数を利用しなければならないと勘違いしておりました。
match関数で利用できるというのは非常に便利ですね。
本当にありがとうございました!
投稿者: 超初心者 | 2005年08月16日 17:39
ちょっと聞きますけど、MySQLのmakeの時、エラーが出来ます。
item_cmpfunc.cc:2257: error: 'class Item' has no member named 'needs_record'
どうして?助けてください。
投稿者: zuoy | 2007年02月08日 22:53