最新消息: 新版网站上线了!!!

php + sphinx 的详细说明

sphinx 是基于sql的全文检索引擎,php一般都是使用mysql数据库。而sphinx也提供了php的api,同时也为mysql提供了存储引擎插件。

关于sphinx的具体性能可以去百科上查看,这里就不在复制粘贴了。

 

全文检索引擎,检索就需要检索的数据,那么数据源是怎么保存在sphinx中的呢?

首先我们要想到为什么我们要用sphinx呢,因为它的检索速度更快!对于一个大的业务系统,mysql中可能存在这百万甚至千万的记录,这就影响到我们的查询效率,尤其是当sql中包含groupby,orderby的时候效率差的更多。而sphinx可以满足我们的需求,只需将mysql中的数据按照自己的需求保存到sphinx中,从sphinx中查询就快的多了,注意保存到sphinx中的数据不是全部的mysql数据,sphinx中只保存索引和属性。

下面开始说下如何将mysql数据源导入到sphinx中

在sphinx的安装目录下会有bin  etc  share  var这几个目录

cd etc

和php一样,sphinx也有一个配置文件的模板sphinx.conf.dist

cp sphinx.conf.dist sphinx.conf #生成一份新的配置文件,供自己修改

sphinx.conf中有主要的几部分,source(数据源),index(索引),indexer(索引器配置),searchd(sphinx守护进程),common(公共配置)

source source_name {

type=mysql

sql_host                = 10.168.1.1
sql_user                = db_user
sql_pass                = db_pass
sql_db                  = db_name
sql_port                = db_port  # optional, default is 3306

# pre-query, executed before the main fetch query
# multi-value, optional, default is empty list of queries
sql_query_pre         = SET NAMES utf8

# 生成sphinx的主要数据源
# mandatory, integer document ID field MUST be the first selected column
sql_query               = select * from table where 1 group by field1

#将如下字段作为属性

sql_attr_uint       = fiedl1   #无符号整型

sql_attr_float      = field2   #浮点型
sql_attr_timestamp  = field3   #时间戳

 

#添加附属属性

#sql_attr_multi = ATTR-TYPE ATTR-NAME ‘from’ SOURCE-TYPE \
#[;QUERY] \
#[;RANGE-QUERY]

sql_attr_multi          = uint id2 from query; SELECT field1, id2 FROM table2
sql_attr_multi          = uint id3 from query; SELECT fiedl1, id3 FROM table3

 

# ranged query throttling, in milliseconds
# optional, default is 0 which means no delay
# enforces given delay before each query step
sql_ranged_throttle     = 0

}

index index_name {

type          = plain
source        = source_name

path          = /data/sphinx/source_name    #默认在/usr/local/sphinx/var/data/index_name

docinfo       = extern

mlock         = 1     #开启内存锁

morphology              = none  #预处理器列表,默认为none
min_word_len            = 1     #保存的最小索引词
preopen                 = 1     #预打开索引
inplace_enable          = 1     #开启就地转化,防止同一个文件过大

indexer {

mem_limit               = 1024M   #内存限制,推荐256-1024

max_iops                = 0       #每秒最大的io,0代表不限制
max_iosize              = 0       #io最大字节,0代表不限制

write_buffer            = 1M
max_file_field_buffer   = 8M
lemmatizer_cache = 1024M         #开启lemmatization后改进创建索引时间

searchd主要设置sphinx的端口号,日志,链接超时时间,fork子进程数量等等。

 

配置完成后,可以开始创建索引了

进入到sphinx/bin目录下

indexer -c ../etc/sphinx.conf source_name

 

创建成功后就可以用api查询数据了

在我们测试机上安装扩展木有成功,暂时用的php类文件,不过用法和扩展一样

转载请注明:谷谷点程序 » php + sphinx 的详细说明