冷月醉雪 2018-04-17
sql_query 参数提供 SQL 语句,检索将引用的数据。实际上,此处的唯一限制是第一个字段必须是唯一的、无符号的正整数 ID 数字
Sphinx 支持的属性类型
sql_attr_uint 和 sql_attr_bigint
32 位无符号整数值和 64 位有符号整数值。可对所有整数数据库字段和 DATE 使用这两种类型。
sql_attr_float
32 位浮点值。如果您想要存储地理坐标,可使用此属性类型。还要注意的是,如果您需要更高的精确度,则没有解决方法;字段四舍五入到七位小数。
sql_attr_bool
一个布尔型(单个位)值,类似于 MySQL 的 tinyint 值。
sql_attr_timestamp
一种 UNIX 时间戳,可表示从 1970-01-01 到 2038-01-19 的日期/时间值。您在 Sphinx 中无法直接使用 DATE 或 DATETIME 列类型。您必须使用 UNIX_TIMESTAMP() 函数将它们转换为时间戳。如果您仅需要日期,可使用 TO_DAYS() 函数将 DATE 字段转换为一个整数。
sql_attr_string 和 sql_field_string
字符串,前者仅用于检索,而后者可作为全文本被索引
Sphinx 的索引定义
index xxx
{
type = plain
source = employeesSource
path = /home/fkereki/bin/sphinx/var/data/sphinxFilesEI
charset_type = utf-8
preopen = 1
}
Sphinx 使用的索引文件独立于 MySQL 使用的索引文件。type=plain 行表示您正在使用标准的 Sphinx 索引文件。其他可能的索引是 distributed(当您具有在网络的几个节点分布的索引文件时)和 rt(表示 real time),您可以立刻更新这些索引。source= 行将一个数据源与一个索引相关联。您可以在一个索引中合并几个数据源,但是在本示例中没有这样做。path= 行定义索引文件名称及其存储位置。charset_type= 行指定您应该使用 Single Byte Character Set (sbcs) 还是 Universal Character Set (UCS) Transformation Format-8 bit (utf-8)。最后,preopen=1 告诉搜索守护进程在加载时打开所有索引文件,而不是等待第一批查询到达。
SphinxQL 查询与 MySQL 查询的不同之处在于:
1、您使用 MATCH 来查询文本字段。
2、您必须将所有日期转换为时间戳或整数。为了具有多样性,本示例使用了两种方法。
3、Sphinx 可返回完整记录或仅 ID 字段,后者更高效。当然,如果您使用后一个选项,您必须使用 MySQL 来检索其他信息。
4、AND 和 OR 运算符的优先级是相同的,因此使用它们时应小心,并在需要时使用括号。
5、并不是所有 MySQL 数值、字符串和其他函数都是由 Sphinx 提供的。