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);
  }
}
?>

 

Monday, October 16, 2006

昼休み 男三人 海岸でリフティングに没頭。
昨日は、貧血で倒れたが、
今日はすこぶる調子がよい。

海は最高だ。 

記録:15

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

 

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エラー....
再度渡来

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

起動
正常に動作しました
 

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]\$ '
 

Sunday, October 01, 2006

FreeBsd6 portsnap

portsを最新版に更新するため、portsnapを使用します。
freebsd ver6は標準で入ってるので、そのまま使用します。

初回だけ全てを最新版に更新します
# portsnap fetch && portsnap extract && portsnap update

次回からは差分のみ更新
# portsnap fetch && portsnap update