1、修改sphinx配置文件?
source 数据源名称
{
type = mysql ######数据源类型
sql_host = #######数据库主机地址(如果是外网,请确保防火墙允许链接)
sql_user = root ####数据库用户名称
sql_pass = #######数据库密码
sql_db = #####数据库名称
sql_port = ######数据库服务器端口号
sql_query_pre = 执行SQL前设置的编码(SET NAMES utf8)
sql_query = 全文检索要显示的内容,据官方说法:尽可能不要使用where 或者groupby,将其交给sphinx效率会更高;
select出来的字段必须包含至少一个唯一主键,以及全文检索的字段sphinx会对select中的字段1,字段2建立sphinx自己的索引,以及在查询
的字段中查找键字,
###如果使用Unix sock连接可以使用这个
sql_sock = /tmp/mysql.sock
##indexer和mysql之间的交互,需要考虑到效率和安全性。
###比如考虑到效率,他们两者之间的交互需要使用压缩协议;考虑到安全,他们两者之间的传输需要使用ssl
###那么这个参数就代表这个意思,0/32/2048/32768 无/使用压缩协议/握手后切换到ssl/Mysql 4.1版本身份认证。
##mysql_connect_flags = 32
##当mysql_connect_flags设置2048(ssl)的时候,下面几个就代表所需要使用的几个参数。
#mysql_ssl_cert = /etc/ssl/client-cert.pem
#mysql_ssl_key = /etc/client-eky.pem
#mysql_ssl_ca = /etc/ssl/cacert.pem
###mssql特有,是否使用windows登录
#mssql_winauth = 1
####mssql特有,是使用Unicode还是单字节数据。
#mssql_unicode = 1 #request Unicode data from server
###odbc的dsn串
#odbc_dsn =
###SQL某一列的缓冲大小,一般是针对字符串来说的。
###为什么要有这么一种缓冲呢?
#有的字符串,虽然长度很长,但是实际上并没有使用那么长的字符,所以在SPhinx并不会收录所有的字符,而是给每个属性一个缓存作为长度限制。
##默认情况下非字符类型的属性是1KB,字符类型的属性是1MB。
###而如果想要配置这个buffer的话,就可以在这里进行配置了。
###sql_column_buffers = content=12M, comments=1M
##indexer的SQL执行语句
sql_query = \
SELECT id, group_id, UNIX_TIMESTAMP(date_added) AS date_added, title, content \
FROM documents
###有的时候有多个表,我们想要查询的字符在其他表中,这个时候要对sql_query进行join操作。
#而这个join操作可能非常慢,导致建立索引的时候特别慢,那么这个时候,就可以考虑sphinx端进行join操作了。
##sql_joined_field是增加一个字段,这个字段是从其他查询中查询出来的。
#这里封号后面的查询语句是有要求的,如果是query,则返回id和查询字段,如果是payload-query,则返回id,查询字段和权重。
###并且这里的后一个查询要按照id进行升序排序。
#sql_join_field = tags from query; select docid,concat('tag', tagid) from tags order by docid asc;
# sql_joined_field = wtags from payload-query; SELECT docid, tag, tagweight FROM tags ORDER BY docid ASC
##外部文件字段,意思就是一个表中,有一个字段存的是外部文件地址,但是实际的字段内容在文件中。比如这个字段叫做content_file_path.
##当indexer建立索引的时候,查到这个字段,就读取这个文件地址,然后加载,并进行分词和所以建立等操作。
# sql_file_field = content_file_path
##当数据源数据太大的时候,一个语句查询下来往往很可能锁表操作。
###那么我们就可以使用多次查询,那么这个多次查询就需要有个范围和步长,sql_query_range和sql_range_step就是做这个使用的。
####而5次SQL查询每次的时间间隔时间是使用sql_ranged_rhrottle来进行设置的,单位是毫秒。
#sql_query_range = SELECT MIN(id), MAX(id) FROM documents
#sql_range_step = 1000
#sql_ranged_throttle = 0
###下面就是些不同属性的数据了
###先要了解属性的概念,属性是存在索引中的,他不进行全文索引,但是可以用于过滤和排序,
###uint 无符号整型属性
sql_attr_uint = group_id
###bool属性
#sql_atttr_bool = is_deleted
##长整型属性
sql_attr_bigint = my_bigint_id
##时间戳属性吗,经常被用于排序
sql_attr_timestamp = date_added
###字符串排序属性,一般我们按照字符串排序的话,我们会将字符串存下来进入到索引中没然后在查询的时候比较索引中的字符大小进行排序。
####但是这个时候索引就会很大,于是我们就想到了一个方法,我们在建立的时候,先将字符串值从数据库中取出,暂存,排序。
#####然后给排序后的数组分配一个序号,然后建立索引的时候,就将这个序号引入到索引中去,这样在查询的时候也就能完成字符串排序的操作。
####这, 就是这个字段的意义。
#sql_attr_str2ordinal = author_name
##浮点数属性,经常在查询地理纬度的时候会用到。
#sql_attr_float = lat_dadians
@sql_attr_float = long_radians
###多值属性(MVA)
###试想一下,有一个文章系统,每篇文章都有多个标签,这个文章就叫多值属性。
#####我要对某个标签进行查询过滤,那么在建立查询的时候就应该把这个标签的值放入到索引中。
#这个字段,sql_attr_multi就是用来做这个事情的,
# sql_attr_multi = uint tag from query; SELECT docid, tagid FROM tags
# sql_attr_multi = uint tag from ranged-query; \
# SELECT docid, tagid FROM tags WHERE id>=$start AND id<=$end; \
# SELECT MIN(docid), MAX(docid) FROM tags
#字符串属性,
#sql_attr_string = stitle
## 文档词汇数记录属性。比如下面就是在索引建立的时候增加一个词汇数的字段
# sql_attr_str2wordcount = stitle
## 字符串字段,可全文搜索,可返回原始文本信息。
# sql_field_string = author
## 文档词汇数记录字段,可全文搜索,可返回原始信息
# sql_field_str2wordcount = title
## 取后查询,在sql_query执行后立即操作。
## 它和sql_query_post_index的区别就是执行时间不同
## sql_query_post是在sql_query执行后执行,而sql_query_post_index是在索引建立完成后才执行。
## 所以如果要记录最后索引执行时间,那么应该在sql_query_post_index中执行。
# sql_query_post =
## 参考sql_query_post的说明。
# sql_query_post_index = REPLACE INTO counters ( id, val ) \
# VALUES ( 'max_indexed_id', $maxid )
####命令行获取信息查询
###什么意思呢?
#我们进行索引一般只会返回组件id,而不会返回表中的所有字段。
###但是在调试的时候,我们一般需要返回表中的字段,那这个时候,就需要使用sql_query_info.
###同时这个字段只在控制台有效,在API中是无效的。
sql_query_info = SELECT * FROM documents where id = $id;
}
sphinx的source是有继承这么一种属性的,意思就是除了父source之外,这个source还有这个特性。
source src1throttled : src1
{
sql_ranged_throttle = 100
}
索引test1
index test1
{
##索引类型,包括有plain,distributed和rt。分别是普通索引/分布式索引/增量索引。默认是plain。
#type = plain
#索引数据源
source = src1
##索引文件存放路径
path = /home/yejianfeng/instance/coreseek/var/data/test1
####文档信息的存储模式,包括有none,extern,inline,默认是extern。
###docinfo 指的就是数据的所有属性(field)构成的一个集合。
#首先文档id是存储在一个文件中的(spa)
}