Sphinx是一款免费的双许可搜索服务器。Sphinx是用C ++编写的,专注于查询性能和搜索相关性。
主客户端API目前是SphinxQL,SQL的一种方言。几乎任何MySQL连接器都应该工作。此外,还提供了基本
的HTTP / JSON API和许多语言(PHP,Python,Ruby,C,Java)的本机API。
SQL,HTTP / JSON和自定义(传统)访问API
NRT(近实时)和离线批量索引
全文和非文本(参数)搜索
相关性排名,从基本公式到ML模型
来自多个服务器的联合结果
下载地址
http://sphinxsearch.com
例如我解压位置:E:\dev\sphinx
安装步骤
新建一个D:\server\sphinx3\data存放索引文件
新建一个D:\server\sphinx3\log存放日志
新建一个D:\server\sphinx3\etc\sphinx.conf配置文件
如果没有etc 可新建一个etc文件夹
source doc
{
type = mysql
sql_host = localhost
sql_user = root
sql_pass = root
sql_db = test
sql_port = 3306
sql_query_pre = SET NAMES utf8
sql_query = SELECT id, group_id, UNIX_TIMESTAMP(date_added) AS date_added, title, content FROM documents
sql_attr_uint = group_id
sql_attr_timestamp = date_added
}
index testindex
{
source = doc
path =D:/server/sphinx3/data/testindex
mlock = 0
min_word_len = 2
min_prefix_len = 0
min_infix_len = 1
ngram_len = 1
ngram_chars = U+3000..U+2FA1F
}
indexer
{
mem_limit = 128M
}
searchd
{
listen = 9312
listen = 9306:mysql41
log = D:/dev/sphinx/log/searchd.log
query_log = D:/dev/sphinx/log/query.log
read_timeout = 5
max_children = 30
pid_file = D:/dev/sphinx/log/searchd.pid
seamless_rotate = 1
preopen_indexes = 1
unlink_old = 1
workers = threads # for RT to work
binlog_path = D:/dev/sphinx/data
}
语法:indexer.exe –c配置文件 –-all | 索引的名字
说明:
1、--all:为配置文件中所有的索引创建索引文件
2、也可以使用索引的名字只为某一个索引创建索引文件
如sphinx安装在E盘dev文件夹下,通过控制台(cmd)进入到sphinx下面的bin目录
E:\dev\sphinx\bin>indexer.exe -c E:/dev/sphinx/etc/sphinx.conf --rotate --all
执行生成索引文件
indexer.exe -c ../etc/sphinx.conf --rotate --all
语法:searchd.exe –c 配置文件 --install
例如sphinx安装在E盘dev文件夹下,通过控制台(cmd)进入到sphinx下面的bin目录
例:E:\dev\sphinx\bin>searchd.exe -c E:/dev/sphinx/etc/sphinx.conf --install
启动服务并起别名
说明: 配置文件路径最好是用全路径
--servicename *** 开启的服务名称
searchd.exe --install --config E:/dev/sphinx/etc/sphinx.conf --servicename SphinxSearch
服务器端默认监听 9312 端口。
常用命令:
-c : 指定配置文件路径
--stop : 停止当前服务
--status : 查看当前状态
--install : 安装为 windows 服务
--delete: 删除windows服务
--port port: 监听的端口
--index indexName : 只查询某个索引,默认查询所有索引
PHP使用 sphinx
<?php
require ( "sphinxapi.php" ); //引入文件可以放入框架中 用命名空间形式引用
$cl = new SphinxClient ();
$q = $_GET['key']??'化妆师'; //模拟关键字
//$mode = SPH_MATCH_ALL;
$host = "127.0.0.1";// sphinx的服务地址 此处用的是本地服务 切记 不是数据库地址!!!
$port = 9312;// sphinx监听端口号
$index = "testindex"; // 此处为配置文件中配置的索引项
$cl->SetServer ( $host, $port );
$cl->SetConnectTimeout(10);
$cl->SetArrayResult(true);
//$cl->SetMatchMode(SPH_MATCH_ALL);//这个关闭它,不然会提示警告
$res = $cl->Query ( $q, $index );
print_r($res['matches']); //此处为打印结果