首頁  >  文章  >  後端開發  >  如何使用php擴展Sphinx進行全文搜索

如何使用php擴展Sphinx進行全文搜索

WBOY
WBOY原創
2023-07-29 10:05:101152瀏覽

如何使用 PHP 擴充功能 Sphinx 進行全文搜尋

全文搜尋是現代 Web 應用程式中的常見需求之一。為了滿足使用者對資料的高效查詢和檢索,我們可以使用 Sphinx 這個功能強大的開源搜尋引擎來實現全文搜尋功能。 Sphinx 使用 C 編寫,提供了 PHP 的擴展,方便我們在 PHP 專案中使用。

本文將介紹如何使用 PHP 擴充 Sphinx 進行全文搜尋。首先,我們需要確保已經安裝了 Sphinx 引擎,並將其配置為我們的資料來源。

第一步:安裝 Sphinx 引擎
我們可以從 Sphinx 的官方網站(http://sphinxsearch.com/downloads/release/)下載最新版本的 Sphinx 引擎。下載完成後,請依照官方文件的指引進行安裝。

第二步:設定資料來源
在使用 Sphinx 進行全文搜尋之前,我們需要設定資料來源,告訴 Sphinx 需要搜尋的內容在哪裡。 Sphinx 支援多種資料來源,包括 MySQL、PostgreSQL、XML 等。

我們以 MySQL 資料來源為例,首先需要在 MySQL 中建立一個資料表,並將需要搜尋的內容匯入到表中。例如,我們建立一個名為 "movies" 的表,並將電影的標題和簡介插入其中。

CREATE TABLE movies (

id INT PRIMARY KEY,
title VARCHAR(255),
description TEXT

);

INSERT INTO movies (id, title, description) VALUES

(1, 'Avatar', 'A paraplegic marine dispatched to the moon Pandora on a unique mission becomes torn between following his orders and protecting the world he feels is his home.'),
(2, 'The Avengers', 'Earth''s mightiest heroes must come together and learn to fight as a team if they are going to stop the mischievous Loki and his alien army from enslaving humanity.'),
(3, 'Inception', 'A thief who steals corporate secrets through the use of dream-sharing technology is given the inverse task of planting an idea into the mind of a CEO.');

儲存並關閉 MySQL 資料庫。

第三個步驟:設定 Sphinx 設定檔
在 Sphinx 安裝目錄中,執行下列指令建立新的 Sphinx 設定檔。

$ sudo cp sphinx.conf.dist sphinx.conf

然後,打開 sphinx.conf 文件,根據我們的需求進行配置。新增以下內容:

source movies {

type            = mysql

sql_host        = localhost
sql_user        = username
sql_pass        = password
sql_db          = database
sql_port        = 3306

sql_query_pre   = SET NAMES utf8
sql_query       = 
    SELECT id, title, description 
    FROM movies

sql_attr_uint   = id
sql_attr_uint   = gid

sql_query_info  = SELECT * FROM movies WHERE id=$id

}

#index movies {

source          = movies
path            = /var/data/movies
docinfo         = extern
min_prefix_len  = 1
charset_type    = utf-8

}

searchd {

listen          = 9306:mysql41
log             = /var/log/sphinxsearch/searchd.log
query_log       = /var/log/sphinxsearch/query.log
read_timeout    = 5
max_children    = 30
pid_file        = /var/run/sphinxsearch/searchd.pid
seamless_rotate = 1
preopen_indexes = 1
unlink_old      = 1
workers         = threads
binlog_path     = /var/data/sphinxsearch/

}

取代username、password、database 為你的MySQL 資料庫的連線資訊。儲存並關閉 sphinx.conf 設定檔。

第四步:啟動 Sphinx 服務
在終端機中執行下列指令啟動 Sphinx 服務。

$ searchd

第五步:建立 PHP 腳本
現在我們可以透過 PHP 腳本來搜尋資料了。建立一個名為search.php 的文件,並插入以下程式碼:

dc1fd5bcbcf9788d57b67dc0bff67e69SetServer('localhost', 9312);
$cl->SetConnectTimeout(1);
$cl-> ;SetArrayResult(true);

//設定搜尋模式與搜尋關鍵字
$cl->SetMatchMode(SPH_MATCH_EXTENDED2);
$cl->SetRankingMode(SPH_RANK_PROXIMITY_BM25);##25);
25);
25);
25);

25);

25); $cl->SetSortMode(SPH_SORT_RELEVANCE);

$cl->SetLimits(0, 10);

$cl->SetFieldWeights(array('title' => 10, 'description' => ; 3));

$query = 'Avatar';

$result = $cl->Query($query, 'movies');

#if ( $result === false) {

echo 'Query failed: ' . $cl->GetLastError();

} else {

if ($cl->GetLastWarning()) {
    echo 'Warning: ' . $cl->GetLastWarning();
}

echo 'Total matches: ' . $result['total_found'] . "

";

foreach ($result['matches'] as $match) {
    echo 'Title: ' . $match['attrs']['title'];
    echo 'Description: ' . $match['attrs']['description'];
}

}

?>

將搜尋關鍵字替換為你想要搜尋的內容。儲存並關閉search.php 檔案。

第六步:執行搜尋

在終端機中,進入search.php 所在的目錄並執行以下指令:

$ php search.php

###你將會看到結果中包含與搜尋關鍵字相符的資料。######透過上述步驟,我們就可以在PHP專案中使用Sphinx 進行全文搜尋。Sphinx 提供了許多強大的搜尋功能和選項,可以根據我們的需求進行配置。希望本文能幫助你了解如何使用PHP 擴展Sphinx 進行全文搜尋。###

以上是如何使用php擴展Sphinx進行全文搜索的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn