<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>doradoradora &#187; XenServer5.5</title>
	<atom:link href="http://dora-0o0-emon.net/tag/xenserver55/feed" rel="self" type="application/rss+xml" />
	<link>http://dora-0o0-emon.net</link>
	<description>blog</description>
	<lastBuildDate>Sat, 19 Sep 2009 05:50:45 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.3</generator>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Ludia と PostgreSQL8.3(再)</title>
		<link>http://dora-0o0-emon.net/linux/entry-20.html</link>
		<comments>http://dora-0o0-emon.net/linux/entry-20.html#comments</comments>
		<pubDate>Wed, 08 Apr 2009 13:22:05 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[CentOS5]]></category>
		<category><![CDATA[XenServer5.5]]></category>

		<guid isPermaLink="false">http://dora-0o0-emon.net/?p=20</guid>
		<description><![CDATA[ここんとこ寝不足な日々が続いています。
先週、部屋を掃除している時にサーバー機を少しずらして棚を拭いていたら
誤って落としちゃいました(+_+)
恐る恐る電源を入れてみたが HDD からお決まりの異音が・・・
というわけ [...]]]></description>
			<content:encoded><![CDATA[<p>ここんとこ寝不足な日々が続いています。<br />
先週、部屋を掃除している時にサーバー機を少しずらして棚を拭いていたら<br />
誤って落としちゃいました(+_+)</p>
<p>恐る恐る電源を入れてみたが HDD からお決まりの異音が・・・<br />
というわけで、１から構築しなおしになりました。</p>
<p>PostgreSQL8.3.6 と Ludia のインストールに少し時間がかかったのでメモします。<br />
<span id="more-20"></span><br />
必要なパッケージのインストール</p>
<pre class="brush: plain;">
yum install gcc-c++ openssl-devel
yum install --enablerepo=pgdg83 postgresql-devel
</pre>
<p>mecab のインストール</p>
<pre class="brush: plain;">
wget http://nchc.dl.sourceforge.net/sourceforge/mecab/mecab-0.98pre1.tar.gz
tar zxvf ./mecab-0.98pre1.tar.gz
cd ./mecab-0.98pre1
./configure --with-charset=utf8
make &amp;&amp; make install &amp;&amp; echo &quot;ok&quot;
</pre>
<p>mecabの辞書をインストール（mecab-ipadic）</p>
<pre class="brush: plain;">
wget http://nchc.dl.sourceforge.net/sourceforge/mecab/mecab-ipadic-2.7.0-20070801.tar.gz
tar zxvf ./mecab-ipadic-2.7.0-20070801.tar.gz
cd ./mecab-ipadic-2.7.0-20070801
./configure --with-charset=utf8
make &amp;&amp; make install &amp;&amp; echo &quot;ok&quot;
</pre>
<p>sennaのインストール</p>
<pre class="brush: plain;">
wget http://keihanna.dl.sourceforge.jp/senna/33763/senna-1.1.4.tar.gz
tar zxvf ./senna-1.1.4.tar.gz
cd ./senna-1.1.4
./configure &amp;&amp; make &amp;&amp; make install &amp;&amp; echo &quot;ok&quot;
</pre>
<p>Ludiaのインストール</p>
<pre class="brush: plain;">
tar zxvf ./ludia-1.5.2.tar.gz
cd ./ludia-1.5.2
./configure
エラー(+o+)
find / -name pg_config
/usr/bin/pg_config
find / -name senna-cfg
/usr/local/src/senna-1.1.4/senna-cfg
/usr/local/bin/senna-cfg
./configure --with-pg-config=/usr/bin/pg_config --with-senna-cfg=/usr/local/bin/senna-cfg
make &amp;&amp; make install &amp;&amp; echo &quot;ok&quot;
</pre>
<p><script type="text/javascript"><!--
google_ad_client = "pub-8857586699971285";
/* 728x90, 作成済み 09/09/06 */
google_ad_slot = "5536792068";
google_ad_width = 728;
google_ad_height = 90;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></p>
<p>Ludia のインストール時にエラーが出てしまいました。</p>
<pre class="brush: plain;">
make  all-am
make[1]: Entering directory `/usr/local/src/ludia-1.5.2'
if /bin/sh ./libtool --mode=compile --tag=CC gcc -D_REENTRANT -I. -I. -I.   -DPOSTGRES83=1 -I/usr/include -I/usr/include/pgsql/server -I/usr/local/include/senna  -Wall -fno-strict-aliasing -g -O2 -MT pgsenna2.lo -MD -MP -MF &quot;.deps/pgsenna2.Tpo&quot; -c -o pgsenna2.lo pgsenna2.c; \
        then mv -f &quot;.deps/pgsenna2.Tpo&quot; &quot;.deps/pgsenna2.Plo&quot;; else rm -f &quot;.deps/pgsenna2.Tpo&quot;; exit 1; fi
mkdir .libs
 gcc -D_REENTRANT -I. -I. -I. -DPOSTGRES83=1 -I/usr/include -I/usr/include/pgsql/server -I/usr/local/include/senna -Wall -fno-strict-aliasing -g -O2 -MT pgsenna2.lo -MD -MP -MF .deps/pgsenna2.Tpo -c pgsenna2.c  -fPIC -DPIC -o .libs/pgsenna2.o
pgsenna2.c: In function 'pgs2build0':
pgsenna2.c:613: warning: passing argument 4 of 'IndexBuildHeapScan' makes integer from pointer without a cast
pgsenna2.c:613: error: too few arguments to function 'IndexBuildHeapScan'
make[1]: *** [pgsenna2.lo] Error 1
make[1]: Leaving directory `/usr/local/src/ludia-1.5.2'
make: *** [all] Error 2
</pre>
<p>原因はpgsenna2.c の 613行目にある模様。</p>
<pre class="brush: plain;">
warning: passing argument 4 of 'IndexBuildHeapScan' makes integer from pointer without a cast
#
#
</pre>
<p>IndexBuildHeapScan() の４番目の引数が・・・とのとこ。<br />
覗いてみると、<br />
まぁ、わけワカメ@@<br />
ググッてみると<a href="http://decide.cocolog-nifty.com/blog/2009/03/postgresql-836-.html">青山ではたらくCTOのブログ</a>さんがヒットしました。ありがとう～CTOさん！<br />
原因が IndexBuildHeapScan の引数の数か変わったことによるエラーだそうです。<br />
Postgresのリリースノートや実際のソースコードまで追っかけて解決したようです。<br />
ものすごく参考になりました。</p>
<p>vi ./pgsenna2.c</p>
<pre class="brush: plain;">
/*
 * pgs2build0 is called by pgs2build, _pgs2build, pgs2buildb, _pgs2buildb,
 * pgs2buildu, _pgs2buildu.
 */
Datum
pgs2build0(Relation heap, Relation index, IndexInfo *indexInfo, int flags, Oid oid_type)
{
#if defined(POSTGRES82) || defined(POSTGRES83)
  IndexBuildResult *result;
#endif
  build_stat bs;
  double    reltuples;

  init_support_funcs(&amp;bs.funcs, index);
  bs.indtuples = 0;
  bs.index = index_info_open(index, 1, flags);
  bs.oid_type = oid_type;
  reltuples = IndexBuildHeapScan(heap, index, indexInfo,
                                 false, buildCallback, (void *) &amp;bs);
#if defined(POSTGRES82) || defined(POSTGRES83)
  result = (IndexBuildResult *) PGS2_PALLOC(sizeof(IndexBuildResult));
  result-&gt;heap_tuples = reltuples;
  result-&gt;index_tuples = bs.indtuples;
  index_info_close(bs.index);
  PG_RETURN_POINTER(result);
#else
  IndexCloseAndUpdateStats(heap, reltuples, index, bs.indtuples);
  index_info_close(bs.index);
  PG_RETURN_VOID();
#endif
}
</pre>
<p>んで、もう一度インストール</p>
<pre class="brush: plain;">
make clean
./configure --with-pg-config=/usr/bin/pg_config --with-senna-cfg=/usr/local/bin/senna-cfg
make &amp;&amp; make install &amp;&amp; echo &quot;ok&quot;
</pre>
<p>Ludia のインストールが完了したので<br />
PostgreSQL に設定を追加します。</p>
<pre class="brush: plain;">
vi /var/lib/pgsql/data/postgresql.conf

#追記
#ludia
custom_variable_classes = 'ludia'
ludia.max_n_sort_result = 10000
ludia.enable_seqscan = on
ludia.sen_index_flags = 31
ludia.max_n_index_cache = 16
ludia.initial_n_segments = 512
#end ludia
</pre>
<p>PostgreSQL を再起動して、Ludia を使用するデータベースに<br />
インデックスアクセスメソッドを登録します。<br />
が、<br />
ものぐさなので、template1 に流します。</p>
<pre class="brush: plain;">
su - postgres
psql -f /usr/share/pgsql/pgsenna2.sql template1
</pre>
<p>後は、テスト用にテーブルとインデックスを張って動くか確認</p>
<pre class="brush: plain;">
createdb ludiatest
psql ludiatest
ludiatest=# CREATE TABLE table1 (col1 text, col2 varchar(128));
CREATE TABLE
ludiatest=# INSERT INTO table1 VALUES ('すもももももももものうち', 'あの壺はよいものだ');
INSERT 0 1
ludiatest=# INSERT INTO table1 VALUES ('ももから生まれた桃太郎', 'あの壷はよいものだ');
INSERT 0 1
ludiatest=# CREATE INDEX index1 ON table1 USING fulltext(col1);
CREATE INDEX
ludiatest=# CREATE INDEX index2 ON table1 USING fulltextb((col2::text));
CREATE INDEX
ludiatest=# SELECT * FROM table1 WHERE col1 %% 'もも';
           col1           |        col2
--------------------------+--------------------
 すもももももももものうち | あの壺はよいものだ
 ももから生まれた桃太郎   | あの壷はよいものだ
(2 rows)

ludiatest=# SELECT col1, pgs2getscore(table1.ctid, 'index1') FROM table1 WHERE col1 %% 'もも';
           col1           | pgs2getscore
--------------------------+--------------
 すもももももももものうち |           35
 ももから生まれた桃太郎   |            5
(2 rows)
</pre>
<p>無事インストールできました。</p>
]]></content:encoded>
			<wfw:commentRss>http://dora-0o0-emon.net/linux/entry-20.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
