Wednesday, October 18, 2006
FreeBsd6 estraierpure.php
pear にestraierのパッケージがないか探していましたが、
えらいお方が、pear規約でお作りになられていました。
http://page2.xrea.jp/
使用させて頂きます。
簡易ですが、コネクションpoolとID管理周りを実装した
らっぱーを作成してみました。
//使用方法
# 登録
$est = & EST::getObj("hoge");
$val['colm' ] = "name";
$val['id' ] = "20";
$val['title' ] = "name";
$val['body' ] = "あいうえお#かきくけこ";
$est->put($val);
#検索
$est = & EST::getObj("hoge");;
$val['phrase'] = "あいうえお";
$val['max' ] = 10;
$val['skip' ] = 0;
$rs = $est->get($val);
//disp
Array
(
[0] => Array
(
[id] => 20
[colm] => name
[snippet] => あいうえお #かきくけこ
)
//ソース
require_once(PEAR_DIR . 'EstraierPure/estraierpure.php');
class EST
{
var $mNode;
var $mCond;
var $mDoc;
function EST( $node )
{
$this->connect( $node );
}
function connect( $node )
{
// node
$this->mNode = &new EstraierPure_Node;
$this->mNode->set_url('http://localhost:1978/node/'.$node );
$this->mNode->set_auth('hoge', 'hogehoge');
// condition
$this->mCond = &new EstraierPure_Condition;
// document
$this->mDoc = &new EstraierPure_Document;
}
function get( $val )
{
// set condition
if ( isset($val['phrase']) ){ $this->mCond->set_phrase($val['phrase']);}
if ( isset($val['max' ]) ){ $this->mCond->set_max($val['max']); }
if ( isset($val['skip' ]) ){ $this->mCond->set_skip($val['skip']); }
// search
$nres = &$this->mNode->search($this->mCond, 0 );
// get result
if ($nres) {
for ($i = 0; $i < $nres->doc_num(); $i++) {
$rdoc = &$nres->get_doc($i);
list($rs[$i]['colm'] , $rs[$i]['id']) = split("-",$rdoc->attr('@uri'));
//$rs[$i]['uri' ] = $rdoc->attr('@uri');
//$rs[$i]['title' ] = $rdoc->attr('@title');
//$rs[$i]['author' ] = $rdoc->attr('@author');
$rs[$i]['snippet'] = $rdoc->snippet();
}
}
return $rs;
}
function put( $val )
{
$this->mDoc->add_attr('@uri' , $val['colm']."-".$val['id']);
$this->mDoc->add_attr('@title', $val['title']);
$this->mDoc->add_text( $val['body'] );
$this->mNode->put_doc($this->mDoc);
}
//singleton
function &getObj( $node )
{
static $myselfESTObj;
if($myselfESTObj == NULL)
{
$myselfESTObj = new EST( $node );
//destruct
register_shutdown_function("destroyEST");
}
return $myselfESTObj;
}
}
/*==============================================================================X
X Function Name : destroyConnect
X===============================================================================*/
function destroyEST()
{
$objdb =& EST::getObj();
if (is_object( $objdb )){
//$objdb->close();
unset($objdb);
}
}
?>
えらいお方が、pear規約でお作りになられていました。
http://page2.xrea.jp/
使用させて頂きます。
簡易ですが、コネクションpoolとID管理周りを実装した
らっぱーを作成してみました。
//使用方法
# 登録
$est = & EST::getObj("hoge");
$val['colm' ] = "name";
$val['id' ] = "20";
$val['title' ] = "name";
$val['body' ] = "あいうえお#かきくけこ";
$est->put($val);
#検索
$est = & EST::getObj("hoge");;
$val['phrase'] = "あいうえお";
$val['max' ] = 10;
$val['skip' ] = 0;
$rs = $est->get($val);
//disp
Array
(
[0] => Array
(
[id] => 20
[colm] => name
[snippet] => あいうえお #かきくけこ
)
//ソース
require_once(PEAR_DIR . 'EstraierPure/estraierpure.php');
class EST
{
var $mNode;
var $mCond;
var $mDoc;
function EST( $node )
{
$this->connect( $node );
}
function connect( $node )
{
// node
$this->mNode = &new EstraierPure_Node;
$this->mNode->set_url('http://localhost:1978/node/'.$node );
$this->mNode->set_auth('hoge', 'hogehoge');
// condition
$this->mCond = &new EstraierPure_Condition;
// document
$this->mDoc = &new EstraierPure_Document;
}
function get( $val )
{
// set condition
if ( isset($val['phrase']) ){ $this->mCond->set_phrase($val['phrase']);}
if ( isset($val['max' ]) ){ $this->mCond->set_max($val['max']); }
if ( isset($val['skip' ]) ){ $this->mCond->set_skip($val['skip']); }
// search
$nres = &$this->mNode->search($this->mCond, 0 );
// get result
if ($nres) {
for ($i = 0; $i < $nres->doc_num(); $i++) {
$rdoc = &$nres->get_doc($i);
list($rs[$i]['colm'] , $rs[$i]['id']) = split("-",$rdoc->attr('@uri'));
//$rs[$i]['uri' ] = $rdoc->attr('@uri');
//$rs[$i]['title' ] = $rdoc->attr('@title');
//$rs[$i]['author' ] = $rdoc->attr('@author');
$rs[$i]['snippet'] = $rdoc->snippet();
}
}
return $rs;
}
function put( $val )
{
$this->mDoc->add_attr('@uri' , $val['colm']."-".$val['id']);
$this->mDoc->add_attr('@title', $val['title']);
$this->mDoc->add_text( $val['body'] );
$this->mNode->put_doc($this->mDoc);
}
//singleton
function &getObj( $node )
{
static $myselfESTObj;
if($myselfESTObj == NULL)
{
$myselfESTObj = new EST( $node );
//destruct
register_shutdown_function("destroyEST");
}
return $myselfESTObj;
}
}
/*==============================================================================X
X Function Name : destroyConnect
X===============================================================================*/
function destroyEST()
{
$objdb =& EST::getObj();
if (is_object( $objdb )){
//$objdb->close();
unset($objdb);
}
}
?>
Monday, October 16, 2006
FreeBsd6 Hyper Estraier
[ hyper estraier]
// インストール
hyperestraier-1.4.4
#cd /usr/ports/textproc/hyperestraier/
#make install clean
// インデックスの作成
#cd /home/www
#estcmd gather -il ja -sd casket /home/hyper/casket
「-il ja」オプションは、文字コードの判定時に日本語を優先
「-sd」オプションは、ファイルの作成日時と更新日時をインデックスに記録するという意味
// 更新
#estcmd gather -cl -il ja -sd -cm casket /home/hyper/casket
// 削除の反映
#estcmd purge -cl casket
// 検索
#estcmd search -vh -max 8 casket 'こんにちは'
日本語は部分一致、英語は完全一致
ひっとしました。
このままでは、外部からの接続ができないので、
DBっぽく使うためにノードを使用します。
// ノードの起動
#estmaster init casket
#estmaster start casket
// ユーザー作成
http://localhost:1978/master_ui
admin admin
// 登録
estファイル作成 vi data001.est
estcall put -auth admini admini http://localhost:1978/node/casket data001.est
// 検索
estcall search http://localhost:1978/node/casket "material world"
おお ひっとしました
// 管理画面で検索
http://localhost:1978/node/casket/search_ui
// インストール
hyperestraier-1.4.4
#cd /usr/ports/textproc/hyperestraier/
#make install clean
// インデックスの作成
#cd /home/www
#estcmd gather -il ja -sd casket /home/hyper/casket
「-il ja」オプションは、文字コードの判定時に日本語を優先
「-sd」オプションは、ファイルの作成日時と更新日時をインデックスに記録するという意味
// 更新
#estcmd gather -cl -il ja -sd -cm casket /home/hyper/casket
// 削除の反映
#estcmd purge -cl casket
// 検索
#estcmd search -vh -max 8 casket 'こんにちは'
日本語は部分一致、英語は完全一致
ひっとしました。
このままでは、外部からの接続ができないので、
DBっぽく使うためにノードを使用します。
// ノードの起動
#estmaster init casket
#estmaster start casket
// ユーザー作成
http://localhost:1978/master_ui
admin admin
// 登録
estファイル作成 vi data001.est
estcall put -auth admini admini http://localhost:1978/node/casket data001.est
// 検索
estcall search http://localhost:1978/node/casket "material world"
おお ひっとしました
// 管理画面で検索
http://localhost:1978/node/casket/search_ui
Thursday, October 05, 2006
FreeBsd6 senna
日本語検索をするために、sennaを使ってみる。
portsにsennaがあるので、portsを使用してインストール。
[ senna ]
// MeCabをインストール
# cd /usr/ports/japanese/mecab
# make install clean
# cd /usr/ports/japanese/mecab-ipadic
# make install clean
// sennaをインストール
# cd /usr/ports/textproc/senna/
# make install
// Mysqlを再度インストール
# cd /usr/ports/databases/mysql51-server
# make deinstall
# make clean
# make extract
# cd /usr/ports/databases/mysql51-server/work/mysql-5.1.11-beta
# patch -p1 < /usr/ports/textproc/senna/work/senna-0.8.1/bindings/mysql/mysql-5.1.11-beta.senna.diff
# patch -p1 < /usr/ports/textproc/senna/work/senna-0.8.1/bindings/mysql/mysql-5.1.11-beta.senna.2ind.diff
# cd /usr/ports/databases/mysql51-server
// Makefileを編集
--with-senna を追加
# make install
configエラー....
再度渡来
portsにsennaがあるので、portsを使用してインストール。
[ senna ]
// MeCabをインストール
# cd /usr/ports/japanese/mecab
# make install clean
# cd /usr/ports/japanese/mecab-ipadic
# make install clean
// sennaをインストール
# cd /usr/ports/textproc/senna/
# make install
// Mysqlを再度インストール
# cd /usr/ports/databases/mysql51-server
# make deinstall
# make clean
# make extract
# cd /usr/ports/databases/mysql51-server/work/mysql-5.1.11-beta
# patch -p1 < /usr/ports/textproc/senna/work/senna-0.8.1/bindings/mysql/mysql-5.1.11-beta.senna.diff
# patch -p1 < /usr/ports/textproc/senna/work/senna-0.8.1/bindings/mysql/mysql-5.1.11-beta.senna.2ind.diff
# cd /usr/ports/databases/mysql51-server
// Makefileを編集
--with-senna を追加
# make install
configエラー....
再度渡来
Wednesday, October 04, 2006
FreeBsd6 mysql5.1
[ mysql5.1 インストール ]
// clientのインストール
# cd /usr/ports/databases/mysql51-client
# make install clean
// server インストール
# cd /usr/ports/databases/mysql51-server
# make install clean
// 起動
# /usr/local/share/mysql/mysql.server start
エラーだ
/var/db/mysql/****.err
InnoDB: Operating system error number 13 in a file operation.
innodbを作成するディレクトリのパーミッションがないようです
/var/db/mysql/ のディレクトリchown chgrp mysqlに変更
再度渡来
進んだがエラー
Can't open and lock privilege tables: Table 'mysql.host' doesn't exist
下記ディレクトリ以下のファイルを削除して
/var/db/mysql/
再度dbを作成
# mysql_install_db
起動
正常に動作しました
// clientのインストール
# cd /usr/ports/databases/mysql51-client
# make install clean
// server インストール
# cd /usr/ports/databases/mysql51-server
# make install clean
// 起動
# /usr/local/share/mysql/mysql.server start
エラーだ
/var/db/mysql/****.err
InnoDB: Operating system error number 13 in a file operation.
innodbを作成するディレクトリのパーミッションがないようです
/var/db/mysql/ のディレクトリchown chgrp mysqlに変更
再度渡来
進んだがエラー
Can't open and lock privilege tables: Table 'mysql.host' doesn't exist
下記ディレクトリ以下のファイルを削除して
/var/db/mysql/
再度dbを作成
# mysql_install_db
起動
正常に動作しました
FreeBsd6 bash
bashが入ってないのでいれます。
[ Ports Collection からインストール]
// インストール
# cd /usr/ports/shells/bash2
# make
# make install
// bash に変更
# chsh -s /usr/local/bin/bash
# bash
// bash_profileのスケルトン
# /usr/src/share/skel/dot.bash_profile
// .bash_profile作成
if [ "$PS1" ]; then
PS1="\h\$ "
IGNOREEOF=3
fi
[ -f ~/.bashrc ] && . ~/.bashrc
// .bashrc作成
PS1='[\u@\h]\$ '
[ Ports Collection からインストール]
// インストール
# cd /usr/ports/shells/bash2
# make
# make install
// bash に変更
# chsh -s /usr/local/bin/bash
# bash
// bash_profileのスケルトン
# /usr/src/share/skel/dot.bash_profile
// .bash_profile作成
if [ "$PS1" ]; then
PS1="\h\$ "
IGNOREEOF=3
fi
[ -f ~/.bashrc ] && . ~/.bashrc
// .bashrc作成
PS1='[\u@\h]\$ '