Laravel xunsearch 全文搜索

開始以前強烈推薦先瀏覽一下 xunsearch 的官方文檔php

Xunsearch簡介

Xunsearch 是一個高性能、全功能的全文檢索解決方案。
Xunsearch 旨在幫助通常開發者針對既有的海量數據,快速而方便地創建本身的全文搜索引擎。

詳情點我mysql

測試環境:

Linux 服務器 2 臺:

代號 功能 IP 系統
服務器A 提供web服務 192.168.56.2 centos7
服務器B 提供 xunsearch 後端服務 192.168.56.3 centos7

xunsearch 後端服務器配置:

PHP版本 7.0.13 沒有安裝緩存, 生產環境推薦安裝緩存web

PHP 7.0.13 (cli) (built: Dec 21 2016 13:53:31) ( NTS )
Copyright (c) 1997-2016 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2016 Zend Technologies
    with Xdebug v2.5.0, Copyright (c) 2002-2016, by Derick Rethans

鏈接到服務器B 運行下面指令安裝, 解壓 xunsearch 安裝包sql

wget http://www.xunsearch.com/download/xunsearch-full-latest.tar.bz2
tar -xjf xunsearch-full-latest.tar.bz2

執行安裝腳本,根據提示進行操做,主要是輸入 xunsearch 軟件包的安裝目錄,強烈建議單獨 規劃一個目錄,而不是混到別的軟件目錄中。後端

cd xunsearch-full-1.4.10/
sh setup.sh

以後會顯示安裝的交互界面, 而後直接按下回車,安裝到默認路徑下,
而後喝杯咖啡, 稍等一會 出現下面的安裝成功提示便可.centos

+==========================================+
| Welcome to setup xunsearch(full)         |
| 歡迎使用 xunsearch (完整版) 安裝程序       |
+------------------------------------------+
| Follow the on-screen instructions please |
| 請按照屏幕上的提示操做以完成安裝            |
+==========================================+

Please specify the installation directory
請指定安裝目錄 (默認爲中括號內的值)
[/usr/local/xunsearch]:

Confirm the installation directory
請確認安裝目錄:/usr/local/xunsearch [Y/n]Y
Checking scws ... no
Installing scws (1.2.3) ... 
Extracting scws package ...
Configuring scws ...
Compiling & installing scws ...
Checking scws dict ... no
Extracting scws dict file ... 
Checking libuuid ... no, try to install it
Extracting libuuid package ...
Configuring libuuid ...
Compiling & installing libuuid ...
Checking xapian-core-scws ... no
Installing xapian-core-scws (1.2.22) ... 
Extracting xapian-core-scws package ...
Configuring xapian-core-scws ...
Compiling & installing xapian-core-scws ...
Checking libevent ... no
Installing libevent (2.0.21-stable) ... 
Extracting libevent package ...
Configuring libevent ...
Compiling & installing libevent ...
Extracting xunsearch package (1.4.10) ...
Configuring xunsearch ...
Compiling & installing xunsearch ...
Cleaning ... done

+=================================================+
| Installation completed successfully, Thanks you |
| 安裝成功,感謝選擇和使用 xunsearch                |
+-------------------------------------------------+
| 說明和注意事項:                                  |
| 1. 開啓/從新開啓 xunsearch 服務程序,命令以下:    |
|    /usr/local/xunsearch/bin/xs-ctl.sh restart   |
|    強烈建議將此命令寫入服務器開機腳本中             |
|                                                 |
| 2. 全部的索引數據將被保存在下面這個目錄中:         |
|    /usr/local/xunsearch/data                    |
|    如須要轉移到其它目錄,請使用軟連接。             |
|                                                 |
| 3. 您如今就能夠在咱們提供的開發包(SDK)基礎上       |
|    開發您本身的搜索了。                           |
|    目前只支持 PHP 語言,參見下面文檔:             |
|    /usr/local/xunsearch/sdk/php/README          |
+=================================================+

注意: 若是是生產環境iptables可能須要配置得嚴格,本文僅爲測試api

配置一下iptables, 若是你沒有啓用那麼忽略本操做數組

vi /etc/sysconfig/iptables

加入, 下面兩行

-A INPUT -p tcp -m state --state NEW -m tcp --dport 8383 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 8384 -j ACCEPT

重啓iptables
service iptables restart

啓動服務瀏覽器

/usr/local/xunsearch/bin/xs-ctl.sh -b inet start

啓動輸出內容:緩存

INFO: starting server[xs-indexd] ... (BIND:8383)
INFO: starting server[xs-searchd] ... (BIND:8384)

web服務器配置

安裝xunsearch PHP SDK

cd project/root/path
composer require --prefer-dist hightman/xunsearch

建立項目配置文件, 一個項目對應一個配置文件, 項目名稱不能重複

cp app\vendor\hightman\xunsearch\app\demo.ini app\config\search-demo.ini

修改剛剛建立的文件的內容, 其中server.index 和 server.search 的IP地址是安裝了xunsearch服務的服務器IP地址

;搜索配置文件示例
project.name = demo
project.default_charset = utf-8
server.index = 192.168.56.4:8383
server.search = 192.168.56.4:8384

[pid]
type = id

[subject]
type = title

[message]
type = body

[chrono]
type = numeric

修改 app/routes/web.php 文件, 寫入一些客戶端搜索測試代碼

###################### 測試模塊 ####################
/*
 * 全文搜索測試部分
 */
Route::get('/search/{key}', function ($key){
    $xs = new XS(config_path('search-demo.ini'));
    $search = $xs->search; // 獲取 搜索對象
    $query = $key;
    $search->setQuery($query)
        ->setSort('chrono', true) //按照chrono 正序排列
        ->setLimit(20,0) // 設置搜索語句, 分頁, 偏移量
    ;

    $docs = $search->search(); // 執行搜索,將搜索結果文檔保存在 $docs 數組中
    $count = $search->count(); // 獲取搜索結果的匹配總數估算值
    foreach ($docs as $doc){
        $subject = $search->highlight($doc->subject); // 高亮處理 subject 字段
        $message = $search->highlight($doc->message); // 高亮處理 message 字段
        echo $doc->rank() . '. ' . $subject . " [" . $doc->percent() . "%] - ";
        echo date("Y-m-d", $doc->chrono) . "<br>" . $message . "<br>";
        echo '<br>========<br>';
    }
    echo  '總數:'. $count;
});

Route::get('/makedoc/{title}/{message}', function ($title, $message){
    $xs = new XS(config_path('search-demo.ini'));
    $doc = new XSDocument;
    $doc->setFields([
        'pid' => 1,
        'subject' => $title,
        'message' => $message,
        'chrono' => time(),
    ]); // 用數組進行批量賦值
    $xs->index->add($doc);
});

使用瀏覽器訪問上面兩個路由來測試功能

經過訪問: http://你的域名/makedoc/標題/... 測試生成索引

測試例子:

http://你的域名/makedoc/關於 xunsearch 的 DEMO 項目測試/項目測試是一個頗有意思的行爲!

http://你的域名/makedoc/測試第二篇/這裏是第二篇文章的內容

http://你的域名/makedoc/項目測試第三篇/俗話說,無三不成禮,因此就有了第三篇

注意: 索引不是即時生效的 延遲大概在10秒左右

經過訪問: http://你的域名/search/關鍵詞 測試搜索功能
好比搜索關鍵詞 項目

1. 關於 xunsearch 的 DEMO 項目測試 [99%] - 2011-08-26
項目測試是一個頗有意思的行爲!

========
2. 項目測試第三篇 [100%] - 2011-08-26
俗話說,無三不成禮,因此就有了第三篇

========
總數:2

經過上述步驟咱們就完成了一個最簡單的全文搜索例子.
若是但願瞭解更多詳細內容, 請閱讀xunsearch的官方文檔.

注意事項

不管是增長索引仍是改變數據結果。必定要重建索引。不然不會報錯,可是搜索結果會不正確。切記!!!!!
好比:
util/Indexer.php --rebuild --source=mysql://root:pass@localhost/dbname --sql="SELECT * FROM tbl_post" --project=demo

參考內容

  1. xunsearch 官方文檔
相關文章
相關標籤/搜索