[pgsql-jp: 30833] [summary] namazu〜PostgreSQL連携を試してみました

Junji TERAMOTO teramoto.junji @ lab.ntt.co.jp
2003年 8月 22日 (金) 10:17:33 JST


寺本と申します。

少し(だいぶ?)昔の投稿ですが、前田@nanet様の

  [pgsql-jp 20023] namazu とPostgreSQLの連携

に興味がありましたので、現行の環境で実行してみました。
その際の変更した点などについて、サマリとしてまとめて投稿します。

有益なプログラムを提供いただき、ありがとうございます>前田様

変更点などについては、100%PostgreSQLやnamazuのことを理解して行ったわけ
ではないので、誤り等ございましたらご指摘ください。

---以下サマリ

【環境】

  debian linux 2.4.18
  PostgreSQL 7.3.3
  namazu 2.0.12
  kakasi 2.3.4

【変更】

Makefileを以下のように変更した。
# リンクする.oファイルの追加とpostgresヘッダファイル位置の追加

--->8---ここから--->8---
26a27
>                                ../nmz/score.o \
32a34
>                                ../intl/dcigettext.o \
35a38,39
>                                ../intl/localcharset.o \
>                                ../intl/plural.o \
39c43
<       $(CC) -c -g -fpic -I/usr/local/pgsql/include -I.. -I../lib pgnmz.c
---
>       $(CC) -c -g -fpic -I/usr/local/pgsql/include -I/usr/local/pgsql/include/server -I.. -I../lib pgnmz.c
--->8---ここまで--->8---

ソースファイルを以下のように変更した。
# VARSIZE(retp)をVARTT_SIZEP(retp)に書き換え

--->8---ここから--->8---
195c195
<         VARSIZE(retp) = strlen(data) + VARHDRSZ;
---
>         VARATT_SIZEP(retp) = strlen(data) + VARHDRSZ;
201c201
<         VARSIZE(retp) = strlen(data) + VARHDRSZ;
---
>         VARATT_SIZEP(retp) = strlen(data) + VARHDRSZ;
211c211
<         VARSIZE(retp) = strlen(data) + VARHDRSZ;
---
>         VARATT_SIZEP(retp) = strlen(data) + VARHDRSZ;
220c220
<         VARSIZE(retp) = strlen(data) + VARHDRSZ;
---
>         VARATT_SIZEP(retp) = strlen(data) + VARHDRSZ;
232c232
<     VARSIZE(retp) = strlen(data) + VARHDRSZ;
---
>     VARATT_SIZEP(retp) = strlen(data) + VARHDRSZ;
--->8---ここまで--->8---

あとは、makeして、出来上がった pgnmz.so を /usr/local/pgsql/lib にコピ
ーします。

【使用例】
# 改行ないのでが見苦しいですが...

関数の登録は以下のようなSQLになります。
PostgreSQLが7系のため、readme.txtと違い、最後が"LANGUAGE C;"になります。
(Cをシングルコーテーション''でくくらない)

--->8---ここから--->8---
CREATE FUNCTION pgnmz_score(text,text,text)
RETURNS int4
AS '/usr/local/pgsql/lib/pgnmz.so'
LANGUAGE C;

CREATE FUNCTION pgnmz_summary(text,text)
RETURNS text
AS '/usr/local/pgsql/lib/pgnmz.so'
LANGUAGE C;
--->8---ここまで--->8---

試験的に、手元にあったMHonArcの出力するHTMLをインデックスしたものを対
象に試用してみました。

--->8---ここから--->8---
CREATE TABLE MAILLIST (author text, title text, file text);
--->8---ここまで--->8---

のようにテーブルを作成し、データを流し込みました。(下記に例示します)

--->8---ここから--->8---
SELECT * FROM MAILLIST LIMIT 3;

   author    |             title              |                  file                   
-------------+--------------------------------+-----------------------------------------
 aaa @ foo.bar | RCSの使い方                    | /home/archive/public_html/msg00004.html
 bbb @ foo.bar | 新しく買ったSUNの設定方法      | /home/archive/public_html/msg00005.html
 ccc @ foo.bar | 端末セッションのログを取りたい | /home/archive/public_html/msg00006.html
(3 行)
--->8---ここまで--->8---

これを、readme.txtに載っているようなサンプルSQLで利用した例が次のよう
になります。

--->8---ここから--->8---
SELECT author, title,
 pgnmz_score('/home/archive/index', file, 'apache') AS score
FROM MAILLIST
WHERE pgnmz_score('/home/archive/index', file, 'apache') > 0
 AND author = 'bbb @ foo.bar';

   author    |                title                 | score 
-------------+--------------------------------------+-------
 bbb @ foo.bar | www のapacheを1.3.11 →1.3.20 にする |    32
 bbb @ foo.bar | Re: charlie成長記録                  |     8
 bbb @ foo.bar | mailman2.0.6日本語版のインストール   |     3
 bbb @ foo.bar | Re: charlie成長記録                  |    12
(4 行)
--->8---ここまで--->8---

以上、何かのお役に立てば幸いです。

---
J U N J I  T E R A M O T O
          ---  NTT Cyber Space Laboratories Information-base Project
          ---  mailto:teramoto.junji @ lab.ntt.co.jp




pgsql-jp メーリングリストの案内