这么多字段干嘛用的。。。
先别管这个,看文件中的配置格式
source mysql
{
...
}
index mysql
{
...
}
....
这些就是配置文件中的'类',配置格式就是以类为基础的,类的格式是 '关键字 [名称] {}',每个关键字的作用:
source:定义数据索引源(就是被搜索的数据啦),如果以mysql为索引源,那么source里的信息包含数据库账号、密码、端口、获取数据索引的sql语句等
index:定义如何处理索引源,例如索引文件目录、分词单位、分词配置文件、去除数据的html标签等
indexer:定义indexer服务设置,例如内存使用大小限制、文件索引大小限制
searchd:定义searchd服务设置,用于搜索时的设置,例如服务端口、搜索最大数量限制、搜索超时时间等
其实配置文件中好多字段都有默认值的,并不需要我们进行配置(不用写出来),下面对一些常用的配置字段进行解释,以mysql数据库为例
基本环境:
主机 localhost
账号 root
密码 root
端口 3306
数据库 ibos
数据表:email
数据结构:
CREATE TABLE email (
emailid mediumint(8) unsigned NOT NULL auto_increment COMMENT '邮件id',
fromid int(10) unsigned NOT NULL default '0' COMMENT '发送人ID',
toid int(10) unsigned NOT NULL default '0' COMMENT '收件人ID',
content text unsigned NOT NULL COMMENT '邮件内容',
subject varchar(100) unsigned NOT NULL COMMENT '邮件标题',
sendtime int(10) NOT NULL COMMENT '发送时间',
attachment varchar(100) NOT NULL COMMENT '附件ID,以逗号分割',
PRIMARY KEY (emailid),
) ENGINE=MyISAM';
配置内容:
#定义数据源,取一个好听的名字,就叫email吧。。。
source attach {
type = mysql #定义数据源的类型
sql_host = localhost
sql_user = root
sql_pass = root
sql_db = ibos
sql_port = 3306
#sql_query_pre是获取数据源前执行的操作,内容是mysql可执行的语句,你可以设置多个sql_query_pre,sphinx将会按顺序执行
sql_query_pre = SET NAMES utf8 #一般设置好编码以保证数据格式正确
sql_query_pre = xxx
#sql_query就是真正获取数据源的语句,内容是mysql可执行的语句
#SELECT的第一个字段是非负整数并且值都不相同的,搜索结果返回的ID就是这个,建议使用数据表的主键,这里是emailid
#其它字段是用来设置搜索条件和希望被搜索的字段,如果那个字段你认为对搜索没有作用,那就不要选择
sql_query = SELECT emailid,fromid,toid,subject,content,sendtime,attachement FROM email
#sql_attr_ 索引属性,主要被用来设置搜索条件,并且搜索结果返回的信息也包含这些属性的值
#设置某个属性的前提是在sql_query中有返回这个字段的数据
#sql_attr_uint,从SQL读取到的值必须为整数
sql_attr_uint = fromid
sql_attr_uint = toid
#sql_attr_timestamp,从SQL读取到的值必须为整数,作为时间属性
sql_attr_timestamp = sendtime
#程序运行前执行的查询操作,这个没有什么意义,可以不写,仅仅用于调试目的
sql_query_info = SELECT * FROM email
}
#接下来要配置如何处理索引源,名称建议和索引源一样吧
index email {
source = email #对应的source名称
path = d:\coreseek\data\email #生成索引文件的路径(包含文件名),可自定义
min_word_len = 1 #最小分词长度
html_strip = 1 #是否去除html标签,强烈建议开启此项,像邮件这些富文本包含大量html标签,对搜索没有任何帮助,而且增加搜索时间和索引文件大小(至少增大5倍以上)
charset_dictpath = d:\coreseek\etc\ #中文分词配置文件目录
charset_type = zh_cn.utf-8
}
#还可以定义多个索引源
source diary {
}
index diary {
source :diary
}
#indexer服务定义,注意没有名字!这个设置是全局的!
indexer {
mem_limit = 128M #内存大小限制
}
#searchd服务定义,注意没有名字!这个设置是全局的!
searchd {
listen = 9312 #服务端口,默认9312
read_timeout = 5 #最大搜索时间
max_matches = 1000 #最大匹配数
max_children = 30 #子进程数目限制
#这几项看文档吧
pid_file = d:\coreseek\var\log\searchd_mysql.pid
log = d:\coreseek\var\log\searchd_mysql.log #全部searchd运行时事件会被记录在这个日志文件中。
query_log = d:\coreseek\var\log\query_mysql.log #全部搜索查询会被记录在此文件中
}
好了,配置就到这里,那如何进行搜索,那就要用到cmd命令行,别吓着了,其实我们记住三个命令就可以了
开始 - 运行 - cmd 打开命令行模式
建立索引
d:\coreseek\bin\indexer -c d:\coreseek\bin\sphinx.conf --all #sphinx.conf就是刚刚我们的配置文件
按回车,如无意外会看到正在建立索引的信息,稍等一会就可以了