(一)、前期准备
下载sphinx
sphinx的目录结构
使用Sphinx
1、首先得有数据
2、建立Sphinx配置文件
3、生成索引
4、启动Sphinx
5、使用之(调用api或search.exe程序进行查询)
(二)、具体如下
2),关于sphinx配置文件
#源定义 需要对数据库里面的哪些数据建立全文索引 diqu,这个diqu可以自定义
source diqu
{
type = mysql
sql_host = localhost
sql_user = root
sql_pass = root
sql_db = sphinxc
sql_port = 3306
sql_query_pre = SET NAMES utf8
#代表对数据库里的哪张表的哪几个字段建立索引 这里的ID必须叫做id,即使数据库表里面的字段不叫做id,使用别名diqu_id as id
sql_query = SELECT id,province_id,province_name,city_id,city_name,county_id,county_name,town_id,town_name,village_id,village_name FROM j_position
#sql_query第一列id需为整数
#province_id,province_name,city_id,city_name,county_id,county_name,town_id,town_name,village_id,village_name作为字符串/文本字段,被全文索引
#sql_attr_uint = group_id #从SQL读取到的值必须为整数
#sql_attr_timestamp = date_added #从SQL读取到的值必须为整数,作为时间属性
sql_query_info_pre = SET NAMES utf8 #命令行查询时,设置正确的字符集
sql_query_info = SELECT * FROM j_position WHERE id=$id #命令行查询时,从数据库读取原始数据信息
}
#index定义,索引文件对应的信息,对应的index名称,也可以自定义名称
index diqu
{
source = diqu #对应的source名称
path = D:/coreseek/var/data/diqu
docinfo = extern
mlock = 0
morphology = none
min_word_len = 1
html_strip = 0
#中文分词配置,详情请查看:http://www.coreseek.cn/products-install/coreseek_mmseg/
#charset_dictpath = /usr/local/mmseg3/etc/ #BSD、Linux环境下设置,/符号结尾
charset_dictpath = D:/coreseek/etc#Windows环境下设置,/符号结尾,最好给出绝对路径,例如:C:/usr/local/coreseek/etc/...
charset_type = zh_cn.utf-8
}
#全局index定义 在建立索引的时候的,可以使用的内存
indexer
{
mem_limit = 128M
}
#searchd服务定义,端口默认是9312
searchd
{
listen = 9312
read_timeout = 5
max_children = 30
max_matches = 1000
seamless_rotate = 0
preopen_indexes = 0
unlink_old = 1
pid_file = D:/coreseek/var/log/searchd_mysql.pid #请修改为实际使用的绝对路径
log = D:/coreseek/var/log/searchd_mysql.log #请修改为实际使用的绝对路径
query_log = D:/coreseek/var/log/query_mysql.log #请修改为实际使用的绝对路径
}
3)、生成索引
开始 -> 运行 -> 输入cmd回车,打开命令行工具
e:\coreseek\bin\indexer –config e:\coreseek\etc\mysql.conf –all
这一串东西其实就是调用indexer程序来生成所有索引
如果只想对某个数据源进行索引,则可以这样:
e:\coreseek\bin\indexer –config e:\coreseek\etc\mysql.conf #索引名称(索引名称指配置文件中所定义的)
4)、启动Sphinx
e:\coreseek\bin\searchd –config e:\coreseek\etc\mysql.conf
5)、使用之(调用api或search.exe程序进行查询)
<?php
//引入sphinx类
require('./sphinxapi.php');
//连接服务器
$sphinx->SetServer('127.0.0.1',9312);
//实例化对象
$sphinx = new SphinxClient();
//设置返回结果集为php数组格式
$sphinx->SetArrayResult ( true );
//匹配结果的偏移量,参数的意义依次为:起始位置,返回结果条数,最大匹配条数
$sphinx->SetLimits(0, 20, 1000);
//最大搜索时间
$sphinx->SetMaxQueryTime(10);
//使用sphinx返回ID
$res = $sphinx->query('海淀');
/*header('Content-Type:text/html;charset=utf8');
echo "<pre>";
var_dump($res);*/
//连接数据库
//根据返回的ID查询
//
$id = array_keys($res['matches']);
$ids = implode(',',$id);
/*print_r($ids);
exit;*/
$sql = "SELECT * FROM j_position WHERE id in($ids)";
$link = mysql_connect('localhost','root','root');
mysql_select_db('sphinxc');
mysql_query('set names utf8',$link);
$result = mysql_query($sql);
while ($row = mysql_fetch_assoc($result)) {
var_dump($row);
}
mysql_close($link);
>