数据源配置:mysql数据源
MySQL数据源配置注意事项:如果是MySQL,需要设置读取数据输出字符集为UTF-8;请现将数据的字符集转换为UTF-8或者至少可以输出为UTF-8。
MySQL4.1起可以通过SET NAMES UTF8设定输出字符集为UTF-8,即使原始数据为GBK也可(Latin1不能直接使用,需先转换为UTF-8或者GBK字符集);
MySQL4.1以下版本,请直接联系我们解决GBK或者Latin1输出为UTF-8问题;
MySQL任意版本,也可以直接联系我们解决字符集错乱问题(例如统统保存为错误的字符集Latin1,我们将负责转换为正确的编码);
测试数据库SQL脚本documents.sql:请注意输入环境的字符集,确保生成后,可以使用UTF-8字符集读取出来,才可被正确索引提供搜索;
测试数据:点击下载documents.sql
数据表字段取值对应到Coreseek的索引中,其关系如下: 数据库: SELECT id, group_id, UNIX_TIMESTAMP(date_added) AS date_added, score, title, content FROM documents id : 自增字段,表的主键,整数 group_id : 整数字段 date_added : 整数字段,使用UNIX_TIMESTAMP可将datetime类型转换为整数的timestamp score : 浮点数字段 title : 字符串字段 content : 文本字段 业务分析: 文档编号:id 查询过滤:分组(group_id),时间(date_added),score 全文检索:title、content Coreseek索引配置: id :ID属性,必须提供,在SQL语句中字段名称不限 对应SQL查询的第一个字段,系统自动使用,内部属性名为@id,不需要也不能在配置中设定 使用SetFilter()过滤,或者使用SetIDRange()过滤; SphinxSE之中,使用filter或者minid, maxid过滤 sql_attr_uint :整数属性,以上group_id、date_added都可用此设置,使用SetFilter()过滤, 或者使用SetFilterRange()过滤; SphinxSE之中,使用filter或者range过滤; sql_attr_float :浮点数属性,以上score可用此设置,使用SetFilterFloatRange()进行范围过滤, SphinxSE之中,使用range过滤; sql_attr_timestamp:timestamp属性,整数,以上date_added可用此设置,可用SetFilter()过滤 或者使用SetFilterRange()过滤; SphinxSE之中,使用filter或者range过滤 sql_attr_str2ordinal:字符串序列属性,以上title可用此设置,仅用于根据该字段排序 但是设置后,该属性不可用于过滤,也不会保存实际字符串内容,更不能全文检索 搜索结果中,其对应的信息为整数,由系统计算出来的排序序列值 全文检索字段 :全文检索字段,以上title、content等字符串或者文本的字段都可用此设置 任何出现在SQL语句中,既不是ID属性,也没有使用“sql_attr_类型”设置的字段,都是全文字段, 使用Query()搜索; SphinxSE之中,使用query的查询文本进行搜索 其他更详细和丰富的类型,请前往中文手册了解。
Windows操作系统下:mysql数据源配置:(对应coreseek-3.2.13-win32/etc/csft_mysql.conf)
#源定义
source mysql
{
type = mysql #表示使用mysql数据源
sql_host = localhost #表示数据库服务器的链接地址
sql_user = root #表示数据库的用户名
sql_pass = 123456 #表示数据库的密码
sql_db = test #表示数据库的名称
sql_port = 3306 #表示数据库的端口
sql_query_pre = SET NAMES utf8
#从数据库之中读取数据的SQL语句设置
sql_query = SELECT id, group_id, UNIX_TIMESTAMP(date_added) AS date_added, title, content FROM documents
#sql_query第一列id需为整数,且被系统使用,无需再设置sql_attr_uint
#使用sql_attr设置的字段,只能作为属性,使用SphinxClient::SetFilter()进行过滤;未被设置的字段,自动作为全文检索的字段,使用SphinxClient::Query("搜索字符串")进行全文搜索;
#title、content作为字符串/文本字段,被全文索引
sql_attr_uint = group_id #从SQL读取到的值必须为整数;sql_attr_uint表示该字段是数值属性
sql_attr_timestamp = date_added #从SQL读取到的值必须为整数,作为时间属性;sql_attr_timestamp表示该字段是时间属性;可以不用该配置
sql_query_info_pre = SET NAMES utf8 #命令行查询时,设置正确的字符集,3.2.14开始支持
sql_query_info = SELECT * FROM documents WHERE id=$id #命令行查询时,从数据库读取原始数据信息
}
#index定义
index mysql
{
source = mysql #对应的source名称
path = var/data/mysql #索引存放的位置,路径为var/data
docinfo = extern
mlock = 0
morphology = none
min_word_len = 1
html_strip = 0
#charset_dictpath = /usr/local/mmseg3/etc/ #BSD、Linux环境下设置,/符号结尾
charset_dictpath = etc/ #Windows环境下设置,/符号结尾
charset_type = zh_cn.utf-8
}
BSD、Linux操作系统下:mysql数据源配置:(对应coreseek-3.2.13/testpack/etc/csft_mysql.conf)
#源定义
source mysql
{
type = mysql
sql_host = localhost
sql_user = root
sql_pass =
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_query第一列id需为整数
#title、content作为字符串/文本字段,被全文索引
sql_attr_uint = group_id #从SQL读取到的值必须为整数
sql_attr_timestamp = date_added #从SQL读取到的值必须为整数,作为时间属性
sql_query_info_pre = SET NAMES utf8 #命令行查询时,设置正确的字符集,3.2.14开始支持
sql_query_info = SELECT * FROM documents WHERE id=$id #命令行查询时,从数据库读取原始数据信息
}
#index定义
index mysql
{
source = mysql #对应的source名称
path = var/data/mysql
docinfo = extern
mlock = 0
morphology = none
min_word_len = 1
html_strip = 0
charset_dictpath = /usr/local/mmseg3/etc/ #BSD、Linux环境下设置,/符号结尾
#charset_dictpath = etc/ #Windows环境下设置,/符号结尾
charset_type = zh_cn.utf-8
}
上一篇: 数据源配置:xml数据源
下一篇: 【万能】数据源:python数据源