版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wyansai/article/details/81814371
Sphinx搜索引擎
安装
1、安装mysql的开发包
sudo apt-get install mysql-client mysql-server mysql-common
sudo apt-get install libmysqld-dev libmysqlclient-dev
2、安装sphinx
- 下载sphinx 下载地址
- 安装命令
./configure --prefix=/usr/local/sphinx --with-mysql & make & make install
- 生成xdict文件
/usr/local/sphinx/bin/mkdict xdict_1.1.txt xdict
- 复制xdict到sphinx根目录
cp xdict /usr/local/sphinx/etc/
- 生成sphinx配置文件
cp /usr/local/sphinx/etc/sphinx.conf.dist /usr/local/sphinx/etc/sphinx.conf
3、配置sphinx
- 示例如下:
source basic
{
type = mysql
sql_host = 192.168.1.10
sql_user = user
sql_pass = password
sql_db = db_name
sql_port = 3306
sql_ranged_throttle = 0
}
source ad_src : basic {
sql_query_pre = SET NAMES utf8
sql_query = SELECT id,material
sql_attr_uint = id
sql_field_string = material
}
index ad
{
source = ad_src
path = /usr/local/sphinx/var/data/ad
chinese_dictionary = /usr/local/sphinx/etc/xdict
docinfo = extern
dict = keywords
mlock = 0
morphology = none
min_word_len = 1
min_prefix_len = 0
min_infix_len = 1
ngram_len = 1
html_strip = 0
}
indexer
{
mem_limit = 128M
}
searchd
{
listen = 9312
log = /usr/local/sphinx/var/log/searchd.log
query_log = /usr/local/sphinx/var/log/query.log
read_timeout = 5
client_timeout = 300
max_children = 30
persistent_connections_limit = 30
pid_file = /usr/local/sphinx/var/log/searchd.pid
seamless_rotate = 1
preopen_indexes = 1
unlink_old = 1
mva_updates_pool = 1M
max_packet_size = 8M
max_filters = 256
max_filter_values = 4096
max_batch_queries = 32
workers = threads
}
- 简单的解释如下:
1、source basic是定义一个数据库基本信息,用来给其他的sql查询源做基。
2、ad_src是一个继承于basic的查询源,就拥有了mysql的基础信息,不用再设置了
3、index ad是索引名,主要用来配置索引路径与中文路径
4、indexer与searchd是根据配置文件创建索引和开启守护进程
使用方法
1、索引的建立
- 某个索引
/usr/local/sphinx/bin/indexer -c /usr/local/sphinx/etc/sphinx.conf <indexname>
- 全部索引 indexname设置为空,增加
--all
选项 - 强制建立,忽略守护进程 增加
--rotate
2、守护进程
- 开启
/usr/local/sphinx/bin/searchd -c /usr/local/sphinx/etc/sphinx.conf
- 关闭 立即
/usr/local/sphinx/bin/searchd --stop
或 等待结束后停止--stopwait
3、php中加载
- 示例代码
<?php
include_once("sphinxapi.php");
$sphinx = new SphinxClient();
$sphinx->SetServer($ip,$port);
$sphinx->SetConnectTimeout(3);
$sphinx->SetMaxQueryTime(2000);
$sphinx->Query($keyword,$indexname);
$sphinx->GetLastError();