sphinxclient 查找大于_Sphinx是最简单的全文搜索解决方案

一般的项目因信息量不大(一般不超过10万条)、日均用户几万内,考虑成本等因素,基本是直接用SQL的LIKE就能轻松应用。倘若你的数据量、访问量都比较大,并且需要考虑运营成等,推荐大家试下Sphinx,Sphinx是一款基于SQL的高性能全文检索引擎,我们可以利用Sphinx完成比数据库本身更专业的搜索功能,而且可以有很多针对性的性能优化。

这里简单说下步骤,有不懂的,可评论中留言。

1、无论在WINDOWS下测试使用,还是在生产环境的LINUX下安装,都是很简单的。大致步骤为:

1.1、去官网下载(选择适合自已的操作系统的版本),然后解压到你想要放置的目录中;

1.2、将目录etc下的sphinx-min.conf.dist(或sphinx.conf.dist,sphinx.conf.dist带有详细说明的配置模板,而sphinx-min.conf.dist没有注解说明,基实是一样的)复制到bin目录下(也可以其它目录,这里建议放在bin目录目的地为了后面不需要指定配置文件的路径),改名为sphinx.conf(其它也可以,你高兴就好);

1.3、打开sphinx.conf,进行相关的配置(详细的配置,可以看sphinx.conf.dist这个文件的注释说明,或自行网上找下说明),主要是配置MYSQL中的地址、账号、密码、指定数据库,编写想要索引的SQL等。

1.4、第一次,需运生全局生成索引文件(可以目录下添加DATA和LOG用来记录生成的索引文件和日志);

1.5、然后启动Sphinx,就可以通用其它客户端(PHP\PYTHON等)来读取了。

1.6、当然,距离你真正应用还有很多要做的。比如业务系统中添加、修改、删除了信息,都需要去更新Sphinx索引。

—————————————-

以下为我收集的文章:

1.下载地址

2.解压文件放到盘内

3.根目录创建 data 和 log 文件夹

4.复制 etc目录下的 min.conf 到 bin目录 并修改成 后缀.conf 文件

5.修改.conf内容

6.生成文件

indexer --config demo.conf test1

7.开启sphinx服务

8.mysql 查询 创建的数据

9.PHP查询数据

10.效果

11.对比mysql查询

—————————————–

索引文件的更新

思路:如果一条记录修改了,那么就为这条记录重新生成索引。新的记录的索引会覆盖原来旧的的记录的索引

1.创建一张表:记录所有被修改过的记录的ID

create table uprecord(

id  int unsigned not null comment ‘修改过的记录的ID’

)

2.通过PHP程序记录下用户修改一条记录之后,把这条记录的ID插入到uprecord表中

3.修改sphinx的配置文件(修改增量索引的SQL语句)把修改过的记录也取出来,取出来之后就会把以前的索引给覆盖掉

4 清空uprecord表

sql_query_post  =UPDATE a SET max_id=(SELECT max(id) FROM dede_archives);DELETE FROM uprecord;

索引文件的删除:

1 修改电影表添加一个字段用来标记是否删除:

alter table dede_archives add is_deleted unsigned not null default ‘0’;

2 修改sphinx的配置文件,在电影的数据源上添加一个属性(必须)

#源定义

source mymovie

{

type           = mysql

sql_host        = localhost

sql_user                = root

sql_pass                = 123456

sql_db                  = dedecms831

sql_port                = 3306

#命令行查询时,设置正确的字符集

sql_query_pre           = SET NAMES utf8

sql_query       = SELECT a.id,a.title,b.juqing FROM dede_archives a LEFT JOIN  dede_addon7 b  ON a.id=b.aid

#在索引创建好之后把最后一条记录的ID存放到A表中

sql_query_post  =UPDATE a SET max_id=(SELECT max(id) FROM dede_archives)

sql_attr_bool   =is_deleted    //增加一个属性is_deleted

}

3 修改PHP的程序在查询SPHINX时只取出is_deleted属性为0的

$sp ->SetFilter(“is_deleted”, array(0))  //查询时,只查询出is_deleted等于0的记录

4 修改PHP的程序,当删除一条记录时

a.从数据库更新这条记录的is_deleted=1

b.更新SPHINX的删除属性为1:需要调用一个方法UpdateAttributes(‘is_deleted’,array(5=>1)) 意思是设置id等于5的这条记录 将其is_deleted字段值设置为1,array()可以有多个

UpdateAttributes(‘is_deleted’,array(5=>1,6=>1,8=>1))数组的键值代表记录的ID

5 在生成增量索引之后

a.可以删除is_deleted=1的从数据库中删除

sql_query_post = UPDATE a SET max_id=(SELECT max(id) FROM dede_archives);DELETE FROM uprecord;DELETE FROM dede_archives WHERE is_deleted=’1′;

b.修改合并的命令在合并时,添加一个参数is_deleted  只取is_deleted为0的记录.

C:\myenv\coreseek-3.2.14-win32\bin>indexer.exe -c C:\myenv\coreseek-3.2.14-win32\sphinx.conf

--merge mymovie mymovie_zl --merge-dst-range is_deleted 0 0  --roate

相关日志

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值