首頁  >  文章  >  後端開發  >  Laravel xunsearch 全文搜索

Laravel xunsearch 全文搜索

高洛峰
高洛峰原創
2017-02-09 09:55:202708瀏覽

開始之前強烈建議先瀏覽一下 xunsearch 的官方文件

Xunsearch簡介

Xunsearch 是一個高效能、全功能的全文檢索解決方案。
Xunsearch 旨在幫助一般開發者針對既有的海量數據,快速且方便地建立自己的全文搜尋引擎。

詳情點我

測試環境:

Linux 伺服器2 台:

centos7
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 安裝包
wget http://www.php.cn/
tar -xjf xunsearch-full-latest.tar.bz2
cd xunsearch-full-1.4.10/
sh setup.sh
然後喝杯咖啡, 稍等一會出現下面的安裝成功提示即可.配置一下iptables, 如果你沒有啟用那麼忽略本操作
代號 提供web服務 192.168. 56.2
伺服器B 提供xunsearch 後端服務 192.168.56.3 centos77PH. 0.13 沒有安裝緩存, 生產環境推薦安裝快取
執行安裝腳本,根據提示進行操作,主要是輸入xunsearch 軟體包的安裝目錄,強烈建議單獨規劃一個目錄,而不是混到別的軟體目錄中。 之後會顯示安裝的互動介面, 然後直接按下回車,安裝到預設路徑下,
+==========================================+
| 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可能需要配置得嚴格,本文僅為測試
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)

webweb配置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('demo');
    $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 /關鍵字測試搜尋功能

例如搜尋關鍵字

項目

<pre class="brush:php;toolbar:false">1. 关于 xunsearch 的 DEMO 项目测试 [99%] - 2011-08-26 项目测试是一个很有意思的行为! ======== 2. 项目测试第三篇 [100%] - 2011-08-26 俗话说,无三不成礼,所以就有了第三篇 ======== 总数:2</pre>

透過上述步驟我們就完成了一個最簡單的全文搜尋範例.

如果希望了解更多詳細內容, 請閱讀xunsearch的官方文檔.

參考內容

xunsearch 官方文件

開始之前強烈推薦先瀏覽一下xunsearch 的官方文件
Xunsearch簡介

Xunsearch 旨在幫助一般開發者針對既有的海量數據,快速且方便地建立自己的全文搜尋引擎。

詳情點我

    測試環境:
  1. Linux 伺服器2 台:


代號

提供web服務

192.168. 56.2


centos7

伺服器B

提供xunsearch 後端服務

192.168.56.3centos7192.168.56.3centos7

xunsearch 後端伺服器設定:

PHP版本7.0.13 沒有安裝快取, 生產環境建議安裝快取

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 安裝套件

wget http://www.php.cn/
tar -xjf xunsearch-full-latest.tar.bz2

執行安裝腳本,依照指示操作,主要是輸入xunsearch 軟體包的安裝目錄,強烈建議單獨規劃一個目錄,而不是混到別的軟體目錄中。

cd xunsearch-full-1.4.10/
sh setup.sh

之後會顯示安裝的互動介面, 然後直接按下回車,安裝到預設路徑下,
然後喝杯咖啡, 稍等一會出現下面的安裝成功提示即可.

+==========================================+
| 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可能需要配置得嚴格,本文僅為測試

配置一下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)

webweb配置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('demo');
    $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 /關鍵字測試搜尋功能例如搜尋關鍵字項目
<pre class="brush:php;toolbar:false">1. 关于 xunsearch 的 DEMO 项目测试 [99%] - 2011-08-26 项目测试是一个很有意思的行为! ======== 2. 项目测试第三篇 [100%] - 2011-08-26 俗话说,无三不成礼,所以就有了第三篇 ======== 总数:2</pre>透過上述步驟我們就完成了一個最簡單的全文搜尋範例.

如果希望了解更多詳細內容, 請閱讀xunsearch的官方文檔.


更多Laravel xunsearch 全文搜尋 相關文章請關注PHP中文網!

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