Laravel 使用 xunsearch(迅搜)全文檢索引擎

木大大發表於2021-10-30

目前使用的全文檢索引擎解決方案是 laravel-scout-tntsearch,但是因為該方案使用的是用 SQLite 作為資料儲存,當我測試文章超過5000篇以上之後,文章儲存時間會越來越慢。

所以迫切需要一個輕量級但是又比較效率的全文檢索方案。之所以不考慮 Elasticsearch 就是因為 ES 太重量級了,沒必要,畢竟為了以後網站搬家方便。

需求背景就是如此了。

之所以選擇迅搜,官方是這樣介紹的

迅搜後端是採用 C/C++ 開發多執行緒服務端,索引設計基於 Xapian 和 scws 中文分詞。單庫最多支援 40 億條資料,在 5 億網頁大約 1.5TB 的資料中檢索時間不超過 1 秒(非快取)。

迅搜Xunsearch安裝教程 www.xunsearch.com/doc/php/guide/sta...

接入Laravel 步驟

  1. 使用的是 taxusorg/xunsearch-laravel 擴充套件包,github.com/taxusorg/xunsearch-lara...
    注意:該擴充套件包限制 laravel/scout 為 6、7、8,最新的 laravel/scout 大版本號已經是9了
  2. 安裝 laravel/scout,因為taxusorg/xunsearch-laravel的限制故需指定版本
    composer require laravel/scout 8.*
  3. 修改配置
  4. 啟動 xunsearch,前提必須自行安裝了,這裡是預設安裝路徑啟動
    如果不是本機呼叫,需繫結ip啟動迅搜
    # 重啟迅搜
    /usr/local/xunsearch/bin/xs-ctl.sh restart
    # 啟動迅搜
    /usr/local/xunsearch/bin/xs-ctl.sh start
    # 停止迅搜
    /usr/local/xunsearch/bin/xs-ctl.sh stop
    # 繫結IP啟動,不繫結IP,則預設繫結 127.0.0.1 僅限本地訪問
    # 0.0.0.0 表示任意ip均可訪問
    /usr/local/xunsearch/bin/xs-ctl.sh -b 0.0.0.0 start
  5. 編寫demo,測試
    # 建立索引
    php artisan scout:import "App\Models\ApiArticle"
    # 重新整理索引
    php artisan scout:flush "App\Models\ApiArticle"
    # 測試程式碼 接收get引數 $s 並查詢
    $s = $request->get('s');
    $list =ApiArticle::search($s)
    ->paginate()
    //  ->get()
    ->toArray();
    dd($list);

Centos8 安裝Xunsearch失敗的問題

錯誤日誌描述如下

bufferevent_openssl.c:237:2: note: (near initialization for 'methods_bufferevent')
bufferevent_openssl.c:228:19: error: storage size of 'methods_bufferevent' isn't known
 static BIO_METHOD methods_bufferevent = {
                   ^~~~~~~~~~~~~~~~~~~
make[2]: *** [Makefile:793: bufferevent_openssl.lo] Error 1
make[2]: Leaving directory '/usr/local/src/xunsearch-full-1.4.14/libevent-2.0.21-stable'
make[1]: *** [Makefile:857: install-recursive] Error 1
make[1]: Leaving directory '/usr/local/src/xunsearch-full-1.4.14/libevent-2.0.21-stable'
make: *** [Makefile:1182: install] Error 2

解決方法
首先,先去下載一下2.1.X版本的libevent安裝包,可以直接搜尋libevent,然後在官方的網站上下載,很多時候官方的連結是github上的,如果直接在linux系統上用wget下載有點慢,這種情況下可以先在我們們自己的瀏覽器上下載好,再通過winscp上傳上去,更加快。
我下載的版本是libevent2.1.12,下載連結是:github.com/libevent/libevent/relea...

下載好後上傳到伺服器上放xunsearch的目錄下,我的目錄是/usr/local/src/,然後將這個檔案解壓,並重新壓縮成bz2格式,參考程式碼如下:

//先將libevent解壓(以便壓縮成所需格式)
tar -zxvf libevent-2.1.12-stable.tar.gz
//壓縮成bz2格式,這是迅搜安裝包的支援的格式
tar -cjf libevent-2.1.12-stable.tar.bz2 libevent-2.1.12-stable
//複製到xunsearch下的packages資料夾內
cp libevent-2.1.12-stable.tar.bz2 xunsearch-full-1.4.15/packages/
//進入安裝包的目錄並將原來自帶的libevent安裝包刪除(xunsearch1.4.15自帶的是2.0.X)
cd xunsearch-full-1.4.15/packages/
rm -f libevent-2.0.X
//返回上一步的資料夾(即迅搜安裝包的根目錄),然後執行setup.sh就可以了,
//迅搜會自動檢查安裝包檔案內的libevent開頭的安裝包,如果沒找到會報錯,如果找到了就會自動解壓並編譯安裝
cd ..
./setup.sh

解決方法來著風柏楊,感謝風柏楊的文件幫助:blog.csdn.net/one_and_only4711/art...

相關參考連結

taxusorg/xunsearch-laravel: github.com/taxusorg/xunsearch-lara...

Xunsearch 權威指南: www.xunsearch.com/doc/php/guide/ini...

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章