Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

PHP バインディング概要

laurus PHP エクステンションは Laurus 検索エンジンの PHP バインディングです。ext-php-rs を使ってネイティブ Rust 拡張としてビルドされており、PHP プログラムからネイティブに近いパフォーマンスで Laurus の Lexical 検索、Vector 検索、ハイブリッド検索機能を利用できます。

機能

  • Lexical 検索 – BM25 スコアリングを備えた転置インデックスによる全文検索
  • Vector 検索 – Flat、HNSW、IVF インデックスを使用した近似最近傍(ANN)検索
  • ハイブリッド検索 – フュージョンアルゴリズム(RRF、WeightedSum)で Lexical と Vector の結果を統合
  • 豊富なクエリ DSL – Term、Phrase、Fuzzy、Wildcard、NumericRange、Geo、Boolean、Span クエリ
  • テキスト解析 – トークナイザー、フィルター、ステマー、同義語展開
  • 柔軟なストレージ – インメモリ(一時的)またはファイルベース(永続的)インデックス
  • PHP らしい APILaurus\ 名前空間の直感的な PHP クラス

アーキテクチャ

graph LR
    subgraph "laurus-php (extension)"
        PhpIndex["Index\n(PHP クラス)"]
        PhpQuery["クエリクラス"]
        PhpSearch["SearchRequest\n/ SearchResult"]
    end

    PHP["PHP アプリケーション"] -->|"メソッド呼び出し"| PhpIndex
    PHP -->|"クエリオブジェクト"| PhpQuery
    PhpIndex -->|"ext-php-rs FFI"| Engine["laurus::Engine\n(Rust)"]
    PhpQuery -->|"ext-php-rs FFI"| Engine
    Engine --> Storage["ストレージ\n(Memory / File)"]

PHP クラスは Rust エンジンの薄いラッパーです。 各呼び出しは ext-php-rs の FFI 境界を一度だけ越え、その後 Rust エンジンが操作をネイティブコードで実行します。

Rust エンジン内部は非同期 I/O を使用していますが、 PHP 側のメソッドはすべて同期関数として公開されています。 各メソッドは内部で tokio::Runtime::block_on() を呼び出し、 非同期 Rust を同期 PHP にブリッジしています。

クイックスタート

<?php

use Laurus\Index;

// インメモリインデックスを作成
$index = new Index();

// ドキュメントをインデックス
$index->putDocument("doc1", ["title" => "Introduction to Rust", "body" => "Systems programming language."]);
$index->putDocument("doc2", ["title" => "PHP for Web Development", "body" => "Web applications with PHP."]);
$index->commit();

// 検索
$results = $index->search("title:rust", 5);
foreach ($results as $r) {
    printf("[%s] score=%.4f  %s\n", $r->getId(), $r->getScore(), $r->getDocument()["title"]);
}

セクション