数据源配置: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
}