最初にlnmp環境をインストールしてください。インストールされていない場合は、を参照してください。
https://blog.csdn.net/hgb24660/article/details/108938963
1.公式ウェブサイトにアクセスしてパッケージをダウンロードします
http://sphinxsearch.com/
ここでは、wgetを介してソフトウェアパッケージをダウンロードします。コマンドは次のとおりです。
wget http://sphinxsearch.com/files/sphinx-2.1.6-release.tar.gz
2.圧縮パッケージを加圧します。コマンドは次のとおりです。
tar zxvf sphinx-2.1.6-release.tar.gz
ソースコードパッケージのインストールサポートされている他の関連クラスライブラリファイルがインストールされていない場合は、最初に他のクラスライブラリパッケージファイルをインストールします。以前に関連クラスライブラリファイルをインストールしたことがある場合は、この手順をスキップします。
yum -y install make gcc g++ gcc-c++ libtool autoconf automake imake mysql-devel libxml2-devel expat-devel
3.実行するディレクトリにcdします
./configure --prefix=/usr/local/sphinx
4. make && makeinstallを使用してコンパイルします
make && make install
5.構成ファイルを編集します
cd /usr/local/sphinx/etc/
デフォルトの構成ファイルをコピーして、構成ファイルを再作成します。sphinx.conf.distのフルバージョンにはデフォルトの構成があります。コンテンツがたくさんあります。ここでは、sphinx-min.conf.distのミニバージョンをコピーすることを選択します。
cp /usr/local/sphinx/etc/sphinx-min.conf.dist /usr/local/sphinx/etc/sphinx.conf
vim sphinx.con
まず、構成における次の概念を理解します。
-source:数据源,数据是从什么地方来的
-index:索引,当有数据源之后,从数据源处构建索引,索引实际上就是相当于一个字典检索。有了整本字典内容以后,才会有字典检索。
-searchd:提供搜索查询服务,启动 sphinx 服务一般使用 /usr/local/sphinx/bin/searchd -c /usr/local/etc/sphinx.conf
-indexer:构建索引,当需要构建索引的时候就调用indexer这个命令:/usr/local/bin/indexer -c /usr/local/etc/sphinx.conf --all --rotate
-attr:属性,属性是存在索引中的,它不进行全文索引,但是可以进行过滤和排序
構成データベース
6. / usr / local / sphinx / etc /ディレクトリのexample.sqlをデータベースにインポートします(全文検索に使用されるテストデータ、他のテーブルを使用できますが、データが必要です)
进入mysql
mysql -u xxx -p
show databases; //查看数据库
create database test; //创建数据库
source /usr/local/sphinx/etc/example.sql //导入sql文件
mysql
6.5を終了します。mysql.ini構成ファイルソケット
を変更して、/ tmpの下のmysql.sockを/ var / lib / mysql /に移動します。
mkdir /var/lib/mysql
chmod 777 /var/lib/mysql
cd /tmp/
mv mysql.sock /var/lib/mysql/
ソケットを変更し、MySQLサービスを再起動します
8.スフィンクスサービスを開始します
/usr/local/sphinx/bin/searchd -c /usr/local/sphinx/etc/sphinx.conf
7.スフィンクスインデックスファイルを作成します
/usr/local/sphinx/bin/indexer -c /usr/local/sphinx/etc/sphinx.conf --all --rotate
如果创建的索引文件比较多而又不需要全部重新生成索引,可以单独生成
/usr/local/sphinx/bin/indexer -c /usr/local/sphinx/etc/sphinx.conf test1
/usr/local/sphinx/bin/indexer -c /usr/local/sphinx/etc/sphinx.conf testrt
警告の場合:pid_file '/ usr / local / sphinx / var / log / searchd.pid'を開くことができませんでした。
警告:インデックスが回転していません。
または
致命的:停止:pidファイル '/ usr / local / sphinx / var / log / searchd .pid 'が存在しないか、読み取り可能な
解決策ではありません:
start sphinx serviceが動作中です。startsphinxservice
を使用してから、再度実行してください。
サービスの使用を停止するには:
/usr/local/sphinx/bin/searchd -c /usr/local/sphinx/etc/sphinx.conf --stop
sphinxのLinuxインストールが完了しました。
phpはスフィンクスケースを使用します
1.PHPインストールスフィンクス拡張モジュール
- libsphinxclientのサポートが必要
libsphinxclientファイルは、解凍されたソースファイルのapiフォルダーに存在します
cd sphinx-2.1.6-release/api/libsphinxclient/
./configure -prefix=/usr/local/sphinx/
make && make install
スフィンクス拡張機能をダウンロードし、リンクをダウンロードします:https://pecl.php.net/package/sphinx
実行するディレクトリを解凍して入力します。
phpize
./configure --with-php-config=/www/server/php/56/bin/php-config --with-sphinx=/usr/local/sphinx/
make && make install
注意:
--With-php-config = / www / server / php / 56 / bin / php-config:は、php環境ファイルをインストールするディレクトリです。
最後に、スフィンクス拡張子が表示されます。
次に、php.iniファイルを構成します。
php.iniにスフィンクス拡張機能をロードします。に追加
[sphinx]
extension=/www/server/php/56/lib/php/extensions/no-debug-non-zts-20131226/sphinx.so
サービスを再起動し、phpinfoを確認して、sphinxが正常にインストールされているかどうかを確認します
2.phpコードテストスフィンクス
<?php
$sphinx = new SphinxClient;
$sphinx->setServer("127.0.0.1", 9312);
$sphinx->setMatchMode(SPH_MATCH_ANY); //匹配模式 ANY为关键词自动拆词,ALL为不拆词匹配(完全匹配)
// $sphinx->SetArrayResult ( true ); //返回的结果集为数组
$keyword = 'is';
// $result = $sphinx->query($keyword,"*"); //星号为所有索引源
$result = $sphinx->query($keyword,"test1");
$err = $sphinx->GetLastError(); //错误信息
if(!empty($err)) {
print_r($result);
}
//使用mysql
$ids = implode(',',array_keys($result['matches']));
$conn = mysqli_connect('127.0.0.1','root','root');
mysqli_query($conn,'set names utf8');
mysqli_select_db($conn,'test');
$sql = "select * from documents where id in (".$ids.")";
$rst = mysqli_query($conn,$sql);
//给匹配关键字添加样式
$opts = array(
'before_match'=>'<font style="font-weight:bold;color:#f00;">',
'after_match'=>'</font>'
);
echo '<pre>';
while($row = mysqli_fetch_assoc($rst)){
$row2 = $sphinx->buildExcerpts($row,'test1',$keyword,$opts);//test1 配置文件中的主数据源索引
print_r($row2);
}
echo '</pre>';
結果: