<?xml version="1.0" encoding="UTF-8" ?>
<entry
	xmlns="http://www.w3.org/2005/Atom"
	xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/"
	xml:lang="ja-JP"
>
	<title>CentOSにMeCab+Senna+MySQLを入れる</title>
	<id>tag:txqz.net,2006-08-27:blog/2006/08/27/0253</id>
	<link rel="self" href="http://txqz.net/blog/2006/08/27/0253.atom"/>
	<link rel="alternate" type="application/rss+xml" href="http://txqz.net/blog/2006/08/27/0253.rdf"/>
	<link rel="alternate" type="application/xhtml+xml" href="http://txqz.net/blog/2006/08/27/0253.xhtml"/>
	<link rel="alternate" type="text/html" href="http://txqz.net/blog/2006/08/27/0253.html"/>
	<link rel="contents" href="http://txqz.net/blog/2006/08/27/.atom" title="2006年8月27日"/>
	<link rel="first" href="http://txqz.net/blog/2001/08/04/0001.atom" title="地球空冷化"/>
	<link rel="prev" href="http://txqz.net/blog/2006/08/27/0154.atom" title="日付変更線前後"/>
	<link rel="next" href="http://txqz.net/blog/2006/08/29/1301.atom" title="トイレの位置"/>
	<link rel="last" href="http://txqz.net/blog/2008/12/19/2152.atom" title="浜松市街地を通り抜けて、ムーンライトながら～の思い出"/>
	<author>
		<name>陽坂智佐</name>
		<email>spambasket@txqz.net</email>
	</author>
	<content type="xhtml">
		<div xmlns="http://www.w3.org/1999/xhtml">
<p>日本語で全文検索をするために MySQL に Senna を組み込むメモ。少し前は個人ニュースサイトめぐり→日記書きに数時間を要していた私が次に目をつけたのがRSSめぐり→はてブ登録なのだがそれでも依然として数時間かかる。そんなあなた (私) に朗報です。私の代わりにブックマークしてくれるエージェントを作ればいいのです。そしてそのエージェントが今日よく使われていた単語やタグとか出してくれて、1次ソースAについてBさんとCさんとDさんがそれぞれの立場でこんなことを書いているとかいうのが俯瞰できて、さらにあとから検索とかができればいいのです。いまホッテントリを見なくてもいいのです。あとで検索できればいいのです。Googleが拾ってくる量は莫大過ぎるし個人で把握できる範囲にも限度がある。ユーザの皆さんが勝手に重み付けしてくれるならそれを使ったらいい。先週の週刊東洋経済を読んで悟った。いやなんか変だ。むにむに</p>
<p>まずは MeCab のインストール。<a href="http://mecab.sourceforge.jp/" title="MeCab: Yet Another Part-of-Speech and Morphological Analyzer">配布元</a>に詳しいドキュメントあり。<a href="http://qwik.jp/senna/install.html" title="Senna 組み込み型全文検索エンジン - インストール方法">Senna のインストール方法</a>には、mecab を configure するときに --prefix=/usr をつけていないぽかったのでつけずにやったら起動できなかった。悔い改めてやり直した。</p>
<pre>$ cd mecab-0.93
$ ./configure --enable-utf8-only --enable-mutex --prefix=/usr
$ make
$ make check
$ sudo make install</pre>
<p>続けて辞書をインストールして実行してみる。</p>
<pre>$ cd mecab-ipadic-2.7.0-20060707
$ ./configure --with-charset=utf8 --prefix=/usr
$ make
$ sudo make install
$ mecab</pre>
<p>テストしてみましょう。</p>
<pre>諏訪を新宿並みに有名にしたかった
諏訪    名詞,固有名詞,人名,姓,*,*,諏訪,スワ,スワ
を      助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
新宿    名詞,固有名詞,地域,一般,*,*,新宿,シンジュク,シンジュク
並み    名詞,接尾,一般,*,*,*,並み,ナミ,ナミ
に      助詞,格助詞,一般,*,*,*,に,ニ,ニ
有名    名詞,形容動詞語幹,*,*,*,*,有名,ユウメイ,ユーメイ
に      助詞,格助詞,一般,*,*,*,に,ニ,ニ
し      動詞,自立,*,*,サ変・スル,連用形,する,シ,シ
たかっ  助動詞,*,*,*,特殊・タイ,連用タ接続,たい,タカッ,タカッ
た      助動詞,*,*,*,特殊・タ,基本形,た,タ,タ
EOS</pre>
<p>成功。続けて Senna を入れる。参考書は前出の<a href="http://qwik.jp/senna/install.html" title="Senna 組み込み型全文検索エンジン - インストール方法">Senna のインストール方法</a>。</p>
<pre>$ cd senna
$ ./configure --prefix=/usr
$ make
$ sudo make install
$ sudo mkdir /var/senna
$ sudo emacs /var/senna/senna.conf</pre>
<p>で、senna.conf に、</p>
<pre>DEFAULT_ENCODING utf8</pre>
<p>続けて MySQL 。<a href="http://qwik.jp/senna/mysql_configure.html" title="Senna 組み込み型全文検索エンジン - MySQLのconfigureオプション">MySQLのconfigureオプション</a>や、<a href="http://blog.nomadscafe.jp/archives/000407.html" title="Sennaのインストール : blog.nomadscafe.jp">Sennaのインストール</a>などを参考にした。</p>
<pre>$ cd mysql-5,0,24
$ patch -p1 &lt; ../senna/bindings/mysql/mysql-5.0.24.senna.diff
$ patch -p1 &lt; ../senna/bindings/mysql/mysql-5.0.24.senna.2ind.diff
$ libtoolize -c -f
$ aclocal-1.9
$ autoheader
$ automake-1.9 -c -a -i
$ autoconf
$ touch sql/sql_yacc.yy
$ CFLAGS="-O3 -mtune=pentium4" \
&gt; CXX=gcc \
&gt; CXXFLAGS="-O3 -mtune=pentium4 -felide-constructors -fno-exceptions -fno-rtti" \
&gt; ./configure --prefix=/usr \
&gt; --with-charset=utf8 \
&gt; --with-extra-charsets=complex \
&gt; --with-senna \
&gt; --with-big-tables \
&gt; --with-readline \
&gt; --enable-thread-safe-client \
&gt; --enable-local-infile \
&gt; --enable-assembler \
&gt; --with-client-idflags=-all-static \
&gt; --with-mysql-idflags=-all-static \
&gt; --with-mysql-user=mysql \
&gt; --localstatedir=/var/lib/mysql \
&gt; --with-unix-socket-path=/var/lib/mysql/mysql.sock
$ make
$ sudo make install
$ sudo ./scripts/mysql_install_db</pre>
<p>エラーが出たので</p>
<pre>$ su -
# ./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
# cp /usr/local/src/mysql-5.0.24/support-files/mysql.server /etc/rc.d/init.d/mysqld
# chmod 755 /etc/rc.d/init.d/mysqld
# chkconfig --add mysqld
# chkconfig --level 345 mysqld on
# service mysqld start</pre>
<p>そして</p>
<pre>$ mysqladmin -u root password oniichandoite,soitsukorosenai
$ mysql -uroot -p
mysql&gt; create database sennatest;
mysql&gt; grant all on sennatest.* to gonbei@localhost identified by '[tamurayukari]ttedarenanoyo,sakurananoyo,a.ta.shi!';
$ quit;
$ mysql -ugonbei -p
mysql&gt; use sennatest;
mysql&gt; create table articles(
    -&gt; id int unsigned not null auto_increment primary key,
    -&gt; body text,
    -&gt; fulltext(body)
    -&gt; );
Query OK, 0 rows affected (0.06 sec)

mysql&gt; insert into articles values
    -&gt; (null,"郵貯民営化は重要な問題だと思う "),
    -&gt; (null,"スローライフを志向するiPodの強み - CNET Japan"),
    -&gt; (null,"HTML, CSS, Photoshopを同時に学べるサンプル付きデザイン記事：Goodpic"),
    -&gt; (null,"jazzanovaの日記 - 現在顧問弁護士に相談中であり、対応についても検討中"),
    -&gt; (null,"mixi非公式ニュースサイト - mixiの問題人物Kusakabe氏、強制退会に？"),
    -&gt; (null,"むだづかいにっき♂：ネット上で議論を仕掛ける事について"),
    -&gt; (null,"はてな perl ハッカーの方々にお聞きします。近頃ますます良い感じなperlですが、どのような開発環境で開発していますでしょうか。"),
    -&gt; (null,"シナトラ千代子 - 投げ銭が飛び交うなかでダイアリーに立てこもる、という意味。"),
    -&gt; (null,"Going My Way: Skypeの会話をPodcast用に録音する場合の設定方法"),
    -&gt; (null,"Kusakabeさんがmixiの一部？を賑わしている。彼にmixi強制退会が言い渡されたのだ。"),
    -&gt; (null,"Ringo's Weblog: googleと競合しない方法2 "),
    -&gt; (null,"Moleskin Diary - 投げ銭よりたれ銭"),
    -&gt; (null,"第38回　海外メディアが伝えた小泉・郵政解散劇の評判 - nikkeibp.jp - 立花隆の「メディア ソシオ-ポリティクス」"),
    -&gt; (null,"ほその日記 - フォームが変更された事を知る"),
    -&gt; (null,"総選挙はてなと公職選挙法:北海道に住む国家公務員日記 "),
    -&gt; (null,"はてな、政党を株式に見立てて総選挙結果を予測 - CNET Japan");
Query OK, 16 rows affected (1.48 sec)
Records: 16 Duplicates: 0 Warnings: 0

mysql&gt; select * from articles where match (body) against ('はてな');
+----+----------------------------------------------------------------------------------------------------------------------------+
| id | body                                                                                                                       |
+----+----------------------------------------------------------------------------------------------------------------------------+
|  7 | はてな perl ハッカーの方々にお聞きします。近頃ますます良い感じなperlですが、どのような開発環境で開発していますでしょうか。 |
| 15 | 総選挙はてなと公職選挙法:北海道に住む国家公務員日記                                                                        |
| 16 | はてな、政党を株式に見立てて総選挙結果を予測 - CNET Japan                                                                  |
+----+----------------------------------------------------------------------------------------------------------------------------+
3 rows in set (0.00 sec)</pre>
<p>すばらしい。じゃあ次は PHP からアクセスしてみよう。PHP は apt-getで入れた。</p>
<pre><samp>Warning: mysql_connect(): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (13) in /var/www/html/test.php on line 4</samp></pre>
<p>うまくいかない。ちゃんと/var/lib/mysql には mysql.sock があるんだけどなー。</p>
<p><code class="php">mysql_connect("localhost",$user,$pass);</code> を <code class="php">mysql_connect("<em>localhost.localdomain</em>",$user,$pass);</code> に変えたらうまくいった。しかし <code class="mysql">where match() against()</code> を含んでいる SQL 文を投げると mysql_fetch_object()が false を返す。普通に <code class="mysql">select * from articles;</code> とすると日本語の部分が全部 "?" になる。MySQL も Apache も UTF-8 を使う設定になっているはずなのになぜだー。</p>
<p>ぐぐったら<a href="http://q.hatena.ne.jp/1146357712" title="人力検索はてな - mysql-5.0.20を使いたいのですが、文字化けで困っております。日本語の文字が?になってしまいます。 WIN2000+AN HTTP+mysql+perl5.8で使いたいと思っております。 文字化け..">はてなQに似たような悩みの人がいた</a>。これを参考に、my.cnf の client セクションに default-character-set=utf8 を、 mysqld セクションに init-connect=SET NAMES utf8 を追加。mysqld を restart。直った。素敵。今回は以上。</p>
<ins class="ps" datetime="2007-06-21T20:44:20+09:00" id="PS20070621204420">
<p>この記事のメモは<a href="http://qwik.jp/tritonn/" title="Tritonnプロジェクト ～ MySQL+Sennaによる全文検索 ～ - Tritonnプロジェクト">Tritonn</a>が始まる前に書かれた古いものです。Tritonnを使った場合のインストール方法については<a href="/blog/2007/06/07/2026" title="Sennaとかのアレの続き Tritonn編">Sennaとかのアレの続き Tritonn編</a>をどうぞ。</p>
</ins>
		</div>
	</content>
	<category term="CentOS"/>
	<category term="Linux"/>
	<category term="MeCab"/>
	<category term="MySQL"/>
	<category term="PHP"/>
	<category term="Senna"/>
	<category term="インストール"/>
	<category term="メモ"/>
	<category term="文字コード"/>
	<trackback:ping>http://txqz.net/blog/2006/08/27/0253/tb</trackback:ping>
	<trackback:about>http://d.hatena.ne.jp/tetsuyasato/20060827/1156648145</trackback:about>
	<published>2006-08-27T02:53:00+09:00</published>
	<updated>2007-07-28T18:58:11+09:00</updated>
	<rights>Attribution-Noncommercial-Share Alike 3.0 Unported</rights>
</entry>