情報量の爆発により、検索エクスペリエンスに関するユーザーの要件も増加しています。 Manticore Searchは、PHP開発機能を組み合わせて応答性の高い正確な検索システムを作成する高性能オープンソースフルテキスト検索エンジンです。この記事では、2つの統合されたプラクティスに焦点を当て、環境構築からインデックス作成からクエリ拡張機能を使用して検索精度の向上に徐々に導入します。
開発を開始するには、最初にManticore Search Serverがインストールされ、関連する拡張モジュールがPHPで有効になっていることを確認する必要があります。次の行をPHP構成ファイルPHP.iniに追加して、拡張機能をロードします。
<span class="fun">extension = manticore.so</span>
構成を完了したら、PHPサービスを再起動するだけです。
実際に検索する前に、基本的なインデックスを構築する必要があります。たとえば、記事と呼ばれるインデックスを作成し、タイトルやコンテンツなどの全文で検索する必要があるフィールドを定義できます。インデックスを作成してサンプルデータを追加するためのサンプルコードを次に示します。
// インデックスを作成します
$index = 'articles';
$query = 'CREATE TABLE ' . $index . ' (title text, content text)';
$result = $conn->query($query);
// データを追加します
$query = 'INSERT INTO ' . $index . ' (title, content) VALUES ("Lorem Ipsum", "Lorem ipsum dolor sit amet, consectetur adipiscing elit.")';
$result = $conn->query($query);
インデックスにデータを追加した後、検索操作を実行できます。 Manticoreは、フルテキストマッチングクエリのMatch構文をサポートしています。以下は、基本的な検索ロジックの例です。
// 検索クエリを実行します
$index = 'articles';
$query = 'SELECT * FROM ' . $index . ' WHERE MATCH(\'Lorem\')';
$result = $conn->query($query);
// 出力結果
if ($result && $result->num_rows > 0) {
while ($row = $result->fetch_assoc()) {
echo 'タイトル:' . $row['title'] . '<br>';
echo 'コンテンツ:' . $row['content'] . '<br>';
}
} else {
echo '関連する結果は見つかりませんでした。';
}
このクエリは、キーワード「Lorem」を含む関連レコードを返し、一致するコンテンツをすばやく見つけます。
検索結果の関連性をさらに向上させるために、クエリ拡張機能を有効にできます。たとえば、ステムマーはキーワードをルーツに復元し、マッチングの精度を効果的に改善できます。
次の例は、インデックスにクエリ拡張子を追加する方法を示しています。
// クエリ拡張子を追加します
$index = 'articles';
$query = 'ALTER TABLE ' . $index . ' ADD QUERY EXPANSION stemmer';
$result = $conn->query($query);
有効になったら、クエリを実行するときに拡張機能名を指定します。
// 使用 stemmer 検索用のクエリ拡張機能
$index = 'articles';
$query = 'SELECT * FROM ' . $index . ' WHERE MATCH(\'Lorem\') OPTION query_expansion=stemmer';
$result = $conn->query($query);
この方法を通じて、検索はステムを自動的に実行して、キーワードマッチングの幅と精度を改善します。
PHPとManticore検索の統合は、高性能検索システムを構築するための効果的なソリューションです。基本インデックスの作成からクエリ拡張機能を使用して検索ロジックの最適化まで、開発者はさまざまなビジネスシナリオで検索ニーズに柔軟に対応できます。将来的には、eコマース、ブログ、フォーラム、その他のプラットフォームでは、このソリューションに基づく検索機能は、ユーザーエクスペリエンスと実用的な価値が高くなります。