Psalm

プログラマ向け技術メモ

EclipseでのStarアプリ開発。

2009-04-14 11:54:57 | iアプリ
あらかじめJDKとEclipseをインストールしておく。
バージョンは実はあまり気にしなくて大丈夫。
ただし、DojaとStarは同居できないので、Dojaツールを入れている人は注意。

1、docomoサイトから開発ツールをダウンロードする
  ホーム→サービス・機能→作ろうiモードコンテンツ→iアプリ→開発ツールダウンロード(Star)
2、ダウンロードしたZIPファイルを解凍して、setup.exeを実行
3、「セットアップの種類」で「カスタム」を選択して次へ
4、「Eclipse3.0/3.1プラグイン」をチェックして次へ
5、Eclipseのインストールフォルダを選択
6、以降、全て「はい」

インストール完了。
Eclipseを起動する。
ファイル→新規プロジェクトで、Javaの下にStar1.0プロジェクトがあるはずなので選択
アプリケーションの種別でフル、ミニ、フル+ミニを選択できる。
フル+ミニは、あらかじめフル、ミニのプロジェクトを作っておいて
それを参照するだけ。

PostgreSQLの日本語全文検索

2009-04-14 11:13:21 | PostgreSQL
8.3の場合、TSearchがデフォルトで入っているが、英語にしか対応していないので
日本語での全文検索を行うためには、ライブラリを入れてあげる必要がある。
今回は、textsearch_jaというのを使うことに。
textsearch_jaを使うにはmecabが必要なので、まずはこれをインストール。

mecab
http://mecab.sourceforge.net/

手順
1、mecabの本体と辞書をダウンロードする
   mecab-0.97.tar.gz
   mecab-ipadic-2.7.0-20070801.tar.gz
2、mecabインストール(rootユーザで)
   tar zxf mecab-0.97.tar.gz
   cd mecab-0.97
   ./configure
   make
   make install
3、辞書のインストール(rootユーザで)
  DBの文字コードがUTF-8なので、UTF-8で作成する。
   tar zxf mecab-ipadic-2.7.0-20070801.tar.gz
   cd mecab-ipadic-2.7.0-20070801
   ./configure --with-charset=utf8
   make
   make install
4、LD_LIBRARY_PATHの設定
   export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
5、postgreSQLを再起動する


textsearch_ja
http://textsearch-ja.projects.postgresql.org/index-ja.html

手順
1、PostgreSQLのソースディレクトリにtextsearch_jaを展開する。
  (/usr/local/src/postgresql-8.3.1/contrib)
2、以下を実行
  make
  sudo make install
  pgsql -f textsearch_ja.sql DB名

注意点
・PostgreSQLをバイナリからインストールした場合は、先にビルドしておく必要がある
 (configureとmakeまで)
・LD_LIBRARY_PATHの設定忘れに注意。設定後はpostgresを再起動しないとパスが読み込まれない


さて、全文検索の環境は整ったのでインデックスを作成。今回はGINを使う。
以下のSQLを実行。

CREATE INDEX インデックス名 on 対象テーブル名 USING gin(to_tsvector('japanese', カラム名))

GINインデックスの検索はGiSTの3倍くらい高速なんだそうだ。
ただし、インデックスの構築や更新に時間がかかるし、サイズも大きい。
システムの構成とかハードウェアの余力なんかを考えて決めるべきなんだろう・・・
まあ、検索の速さ重視で。

さて、いよいよ検索実行。
普通のSELECT文のWHERE句をちょっと変えるだけ。

SELECT * from テーブル名 WHERE to_tsvector('japanese', カラム名) @@ to_tsquery('japanese', '検索条件');

検索条件には、「AND」「OR」「NOT」の3種類の記号が使える。
それぞれ「&」「|」「!」。
&&とか||とか書かないことに注意。
こんな感じ?

SELECT * from テーブル名 WHERE to_tsvector('japanese', カラム名) @@ to_tsquery('japanese', '渋谷 & イタリアン');

以上。