Senna 非公式 PHPバインディング - php_senna
php_sennaは、組み込み型全文検索エンジンSennaをPHPから利用するためのPHPエクステンションです。
PHP 5系、Senna-1.0.9以降での動作を目指しています。CentOS4.4上のPHP5.2.1、Senna-1.0.9〜1.1.1で動作確認をしながら開発しています。Windows用のコンパイラは持っていないので、Windowsで使えるかどうかテストしていません。
現在のところ非公式で開発をしていますので、Senna本家様の設計方針とは異なる部分があるかと思います。エクステンション内のコードにAPIの不適切な使い方やバグを見つけた場合は、該当箇所を教えていただけると嬉しいです。ドキュメントの誤り等もご指摘ください。
php_sennaにはSenna本体は付属していません。Senna本体を先にインストールする必要があります。
php_sennaの使用例
以下のようなPHPコードでSennaを使うことができます。
<?php $index = new Senna_Index('/tmp/php_senna_sample'); $index->upd('key1', NULL, 'This is a sample.'); $index->upd('key2', NULL, 'This is an another.'); $index->update('key3', 1, NULL, 'php_senna sample'); $index->update('key3', 2, NULL, 'binding'); $index->update('key3', 3, NULL, 'sample code'); $records = $index->query('sample'); foreach ($records as $row) { echo $row->getKey(), ' = ', $row->getScore(), "\n"; }
実行結果: key3 = 10 key1 = 5
各クラスの詳しい使い方は使い方(API)ページに記載しています。
php_sennaの特徴
PHP用の言語バインディングとして実装しています。TritonnやLudiaのようなDBMSバインディングとは違い、特定のデータストレージに縛られることなくSennaを利用可能です。
以下のような状況でもSennaを使えるようになります
- MySQLやPostgreSQLは既に稼動しているが、Senna対応バージョンにできない理由がある場合
- バインディングの存在しないデータストレージに文書を保存したい場合
- 通常ファイル、XMLファイル、HTMLファイル、SQLite、その他バインディング未開発のデータストレージ
なるべく簡単に扱えるインターフェイスを目指して設計しています
- SennaAPIをカプセル化し、各種機能をクラスとして表現
- 一部の引数を省略可能
- APIが失敗した場合は例外発生
- Sennaの不具合を回避するコードを可能な範囲で内包
できること(実装済み)
- インデックスの生成、オープン、リネーム、削除
- インデックスの更新
- インデックスに対するクエリー検索
- section単位やposition単位での検索
- サブレコード情報の取得
- Snippet(KWIC)の作成
インデックスの更新はsen_index_upd()
とsen_index_update()
の両方を実装しています。文書単位だけでなく段落単位も扱うことができます。
Snippetはクエリ文字列からの生成も可能です。sen_query_snip()
を使用します。
できないこと(未実装)
- [basic API]
sen_index_sel()
関数に相当する1語での検索 - [advanced API]
- (sen_records型) 昇順ソート、
sen_records_group()
関数に相当するレコードの単位変更 - (sen_index型)
sen_index_update()
以外の関数 - (sen_query型)
sen_query_term()
関数
- (sen_records型) 昇順ソート、
- [low-level API] 未着手
- log API --- 考え中
インデックスの検索はsen_index_sel()
とsen_index_select()
を実装していません。sen_query_exec()
によるクエリー検索を実装しているため、この2つは不要と考えました。ただし、この2つのAPIを使わなければ実現できない処理があれば追加する予定です。
ライセンス
現在検討中です。Sennaと同じ「LGPL」にする予定ですが、LGPLが良くわからないんです。
その他のPHPバインディング
本サイトで公開しているPHPバインディングの他にも、
- 公式ページからリンクされている関山隆介さん作のphp_senna
- Senna本体に付属のPHPバインディング(sen_ctx)
があります。本サイトの非公式版php_sennaが利用できなかった場合や目的の機能が未実装でしたら、上記のバインディングを試してみてください!
※関山隆介さん作のphp_sennaとはエクステンション名が同一のため、混在して使用できないかもしれません。
最終更新:2008/03/31 09:00