sphinx使用步骤:
1、安装
windows
直接解压就可以了
linux
源码安装
2、配置
SQL 结构化查询语言 MYSQL数据库 oracle数据库 sqlserver数据库 但是这三个数据库都要遵循SQL规则
理解配置文件的结构
source ecshop{
}
index mygoods{
}
source ecshop1{
}
index mygoods1{
source = ecshop1 指定索引用户哪个数据源
}
indexer{
mem_limit = 128M
}
searchd{
}
注意:
1、数据库配置和索引配置必须成对出现可以有多个
2、sql_query_pre 这个参数可以多个,主要是在执行主查询之前进行的操作
3、sql_query 这个主查询,主要从MYSQL数据库中拿到要建立索引的数据,
sql_query = select 必须是主键,搜索的字段名,搜索的字段名 from 表名
4、sql_attr_uint 设置属性 ,可以多个,属性字段必须在主查询时查询出来
[matches] => Array
(
[29] => Array
(
[weight] => 1
[attrs] => Array
(
[cat_id] => 14 设置属性
)
)
[30] => Array
(
[weight] => 1
[attrs] => Array
(
[cat_id] => 14
)
)
)
3、生成索引
Indexer.exe -c 配置文件 参数(--all 表示所有的索引 | 索引名称)
indexer.exe -c .\etc\csft_mysql.conf --all
indexer.exe -c .\etc\csft_mysql.conf mygoods(索引名称)
4、开启searchd服务 端口号默认是9312
searchd.exe -c .\etc\csft_mysql.conf
注意:
如果开启服务后,再次重新建立索引,需要重启服务
5、引入sphinxapi接口或者安装sphinx扩展
6、进行实例化对象,查询数据
require "sphinxapi.php";
$sphinxapi = new SphinxClient();
$sphinxapi->SetServer('127.0.0.1', 9312);
$result = $sphinxapi->Query('移动', 'mygoods');
print_r($result);
案例:
比如:一个论坛,数据量比较大,此时采用sphinx全文搜索进行优化,
遇到一个问题是: 论坛中的贴子每天都会增加
比如:
贴子表中,有1000条记录
我们建立索引
第二天:
又增加1000条记录
这时怎么处理
我们又要重新创建索引
第n天:
贴子数量达到1亿条
我们又要重新创建索引
解决办法:
使用 增量索引
增量索引的原理:
原有一个主索引 1000条记录
增加的1000条记录 生成一个增量索引
然后将增量索引的数据合并到主索引
增量索引怎么使用:
1、配置增量索引
主数据源
source delta{
}
主索引
index main{
}
增量数据源
source deltasrc:delta{
}
增量索引
index delta: main //增量索引{
./bin/indexer --merge test1 test1stemmed --rotate
source = deltasrc
}
注意:
名称不要有下划线(有可能是这样)
如果文件名为 csft.conf 这是 ./bin/indexer --merge zengmy company --rotatesphinx默认的文件名
这样就不用在indexer -c 配置文件名(可以省略) --all
2、生成增量索引
./bin/indexer 增量索引文件名
3、合并增量索引和主索引
./bin/indexer --merge 增量索引文件名 主索引文件名 --rotate(平滑启动searchd服务)
到此:增量索引完毕(增量索引只解决了一次性创建比较多数据慢的问题,但是解决不了自动更新索引问题)
增量索引+LINUX中的计划任务(又叫实时索引)--可以解决实时更新的问题
s
新增一个计数表:
sph_count
id max_id
1 7
增量配置
source zengcom:company
{
sql_query = SELECT id,name,address FROM company where id > select max_id from sph_count where id = 1
sql_query_info_pre = 更新sph_count的SQL语句
update count set max_id =select max(id) from company
}
创建LINUX计划任务,每隔5分钟自动执行下面两条语句(最好是创建一个shell脚本,因为在LINUX中计划任务有很多,这样方便修改和维护)
./bin/indexer 增量索引文件名
./bin/indexer --merge 增量索引文件名 主索引文件名 --rotate(平滑启动searchd服务)