sphinx(五)php执行sphinx更新索引rotate命令

简介: 选择在更新数据的时候更新索引,这样做是为了保证数据检索的实时性,但是如果您的数据需要比较频繁的更新且数据量比较大,并且对数据检索没有实时性的要求,那么可以使用linux的定时任务,在使用人数较少的时候来更新索引,

QQ图片20220424180744.jpg

我将sphinx全文检索应用到我的博客中。


我这里使用thinkphp5.0框架,其实这玩意跟我用啥框架还真没有啥关系。


将sphinxapi.php文件放到你能引用到的地方就好。参照前几篇中的php的demo代码就可以了。


当然,上边说的只是PHP中sphinx的使用。


执行到这里,我发现了一个小问题:


我该如何维护sphinx的索引,说实话,我博客中的数据不多,说维护,其实就是每次生成全部索引就可以了。


这样的话,我就可以在更新博客文章的时候,使用PHP执行更新索引的命令就可以了。

但是,在使用PHP执行更新索引的命令的时候遇到了几个小问题,这里记录一下:


1:确定服务器中web用户


我的服务器中web用户是apache


<?php
exec(“whoami”,$res,$return);
var_dump( $return);


2:确定sphinx安装目录下的文件apache用户有执行权限


QQ图片20220424180747.jpg


QQ图片20220424180749.jpg


上图中的文件需要有执行权限。


3:执行更新索引命令


<?php
exec('sudo -s /usr/local/sphinxforchinese/bin/indexer -c /usr/local/sphinxforchinese/etc/sphinx.conf  --all --rotate ', $res, $return_val);
var_dump($res);
var_dump($return_val);


(1):报错:


sudo: no tty present and no askpass program specified


解决方法:


编辑sudoers文件


vim /etc/sudoers


添加免密码:


用户名 ALL = NOPASSWD: ALL


如:jenkins ALL = NOPASSWD: ALL


(2):再次执行报错:


This account is currently not available # 该账户不可用


解决方法:


vim /etc/passwd



apache:x:48:48:Apache:/usr/share/httpd:/ sbin /nologin


改成


apache:x:48:48:Apache:/usr/share/httpd:/bin/bash


保存退出。


再次执行,索引生成成功。


当然,我这里是选择在更新数据的时候更新索引,这样做是为了保证数据检索的实时性,但是如果您的数据需要比较频繁的更新且数据量比较大,并且对数据检索没有实时性的要求,那么可以使用linux的定时任务,在使用人数较少的时候来更新索引,linux定时任务请参考我的另一篇文章《linux crontab配置定时任务》。


目录
相关文章
|
3月前
|
缓存 NoSQL PHP
百度搜索:蓝易云【如何使用PHP进行数据库索引优化?】
通过以上方法,你可以使用PHP进行数据库索引优化,提高数据库查询性能和整体应用性能。同时,定期维护数据库和优化查询语句也是保持数据库高性能的关键。
43 11
|
5月前
|
SQL 小程序 Shell
PHP代码审计(三)php中代码执行&&命令执行函数
string system(string command,int &return_var) 可以用来执行系统命令并直接将相应的执行结果输出 system() 输出并返回最后一行shell结果。
53 0
|
10月前
|
PHP 索引
php模版引擎smarty使用section方法实现for循环代用索引数字i的解决方案
php模版引擎smarty使用section方法实现for循环代用索引数字i的解决方案
59 0
|
12月前
|
安全 Go PHP
CTF真题php在多重限制下的情况下如何执行命令?
CTF真题php在多重限制下的情况下如何执行命令?
CTF真题php在多重限制下的情况下如何执行命令?
|
12月前
|
PHP 索引
php es Elasticsearch 索引增删改查
php es Elasticsearch 索引增删改查
203 0
|
存储 缓存 安全
PHP的passthru() 函数:执行一个命令,并将输出直接发送到输出缓冲区,缓冲区是干什么的?为什么要发送到缓冲区?
PHP的passthru() 函数:执行一个命令,并将输出直接发送到输出缓冲区,缓冲区是干什么的?为什么要发送到缓冲区?
221 0
|
PHP
&#39;php&#39; 不是内部或外部命令,也不是可运行的程序 或批处理文件。
&#39;php&#39; 不是内部或外部命令,也不是可运行的程序 或批处理文件。
329 0
&#39;php&#39; 不是内部或外部命令,也不是可运行的程序 或批处理文件。
查看 php-fpm 内存占用命令
查看 php-fpm 内存占用命令
|
自然语言处理 关系型数据库 MySQL
php sphinx 全文检索 中文分词
php sphinx 全文检索 中文分词
147 0